configurationGit接受特定的https远程特定的自签名服务器证书

我所在的项目的系统pipe理员已经决定SSH是“太麻烦”了。 相反,他已经build立了可以通过https:// URL(和用户名/密码authentication)访问的Git。 该URL的服务器提供了自签名证书,因此他build议每个人closures证书validation。 这并不意味着我是一个安全的好设置。

是否有可能告诉Git,对于远程X(或者更好,任何仓库中的任何远程启动https://$SERVERNAME/ )它是接受一个特定的证书, 只有该证书? 基本上重复SSH的服务器密钥行为。

简述:

  1. 获得自签名证书
  2. 把它放到一些(例如〜/ git-certs / cert.pem)文件中
  3. 设置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它,并使用Exportbutton我得到完全相同的文件,使用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.sslCAInfohttp.sslCAPathconfiguration项到.git / config,它包含Web服务器的证书。

OSX用户调整。

在“接受”答案的步骤之后,在OSX上进行configuration时,只需less量添加。

我将cert.pem文件放在我的OSXlogin用户下的一个目录中,从而导致我调整可信证书的位置。

configurationgit来信任这个证书:

$ git config –global http.sslCAInfo $ HOME / git-certs / cert.pem