configurationGit接受特定的https远程特定的自签名服务器证书
我所在的项目的系统pipe理员已经决定SSH是“太麻烦”了。 相反,他已经build立了可以通过https://
URL(和用户名/密码authentication)访问的Git。 该URL的服务器提供了自签名证书,因此他build议每个人closures证书validation。 这并不意味着我是一个安全的好设置。
是否有可能告诉Git,对于远程X(或者更好,任何仓库中的任何远程启动https://$SERVERNAME/
)它是接受一个特定的证书, 只有该证书? 基本上重复SSH的服务器密钥行为。
简述:
- 获得自签名证书
- 把它放到一些(例如〜/ git-certs / cert.pem)文件中
- 设置git使用http.sslCAInfo参数来信任这个证书。
更多细节:
获取远程服务器的自签名证书
假设服务器url是repos.sample.com
并且您想通过端口443
访问它。
有多种select,如何得到它。
使用openssl获得证书
$ openssl s_client -connect repos.sample.com:443
将输出捕获到cert.pem
文件中,删除(包括) -BEGIN CERTIFICATE-
和-END CERTIFICATE-
结果文件的内容〜/ git-certs / cert.pem可能如下所示:
-----BEGIN CERTIFICATE----- MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7 mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1 U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn /27/jIdVQIKvHok2P/u9tvTUQA== -----END CERTIFICATE-----
使用您的networking浏览器获得证书
我使用redit和git repos,并访问相同的networking用户界面和git命令行访问。 这样,我不得不为该域添加例外到我的网页浏览器。
使用Firefox,我去了Options -> Advanced -> Certificates -> View Certificates -> Servers
,发现那里的自我签名的主机,select它,并使用Export
button我得到完全相同的文件,使用openssl创build。
注:我有点惊讶,没有明显提到的权威的名字。 这可以。
在专用文件中拥有可信证书
以前的步骤应导致在某个文件中拥有证书。 无关紧要,只要访问该域时git可以看到什么文件即可。 我用~/git-certs/cert.pem
注意:如果您需要更多可信的自签名证书,请将它们放入同一个文件中:
-----BEGIN CERTIFICATE----- MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw ........... /27/jIdVQIKvHok2P/u9tvTUQA== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw ........... /27/jIdVQIKvHok2P/u9tvTUQA== -----END CERTIFICATE-----
这应该工作(但我只用一个证书testing它)。
configurationgit来信任这个证书
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
你也可以尝试在系统中使用--system
而不是--global
。
并testing它:现在您可以与您的服务器进行通信,而无需诉诸于:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
如果你已经将你的git设置为无知的ssl证书,请取消它:
$ git config --global --unset http.sslVerify
你也可以检查一下,你做的都是正确的,没有拼写错误:
$ git config --global --list
什么应该列出所有的variables,你已经设置了全局。 (我拼错http到htt)。
根据aeminium.org上的这个页面,你需要添加一个http.sslCAInfo
或http.sslCAPath
configuration项到.git / config,它包含Web服务器的证书。
OSX用户调整。
在“接受”答案的步骤之后,在OSX上进行configuration时,只需less量添加。
我将cert.pem文件放在我的OSXlogin用户下的一个目录中,从而导致我调整可信证书的位置。
configurationgit来信任这个证书:
$ git config –global http.sslCAInfo $ HOME / git-certs / cert.pem