简单地说:
- 获取自签名证书
- 将其放入某个(例如
~/git-certs/cert.pem)文件中
- 使用
http.sslCAInfo 参数将git 设置为信任此证书
更多细节:
获取远程服务器的自签名证书
假设,服务器 URL 是 repos.sample.com,您想通过端口 443 访问它。
有多种选择,如何获取。
使用 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-----
使用您的网络浏览器获取证书
我将 Redmine 与 Git 存储库一起使用,并且我为 Web UI 和 git 命令行访问访问相同的 URL。这样,我必须将该域的例外添加到我的网络浏览器中。
使用 Firefox,我去了Options -> Advanced -> Certificates -> View Certificates -> Servers,在那里找到了自签名主机,选择了它并使用Export 按钮我得到了与使用openssl 创建的完全相同的文件。
注意:我有点惊讶,没有明显提及的权威名称。这很好。
在专用文件中拥有可信证书
前面的步骤将导致证书在某个文件中。只要在访问该域时对您的 git 可见,它是什么文件都没有关系。我用~/git-certs/cert.pem
注意:如果您需要更多受信任的自签名证书,请将它们放入同一个文件中:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
这应该可以(但我只用一个证书测试了它)。
配置 git 以信任此证书
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
您也可以尝试在整个系统范围内使用--system 而不是--global。
并对其进行测试:您现在应该能够与您的服务器进行通信,而无需诉诸:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
如果您已经将您的 git 设置为不知道 ssl 证书,请取消设置:
$ git config --global --unset http.sslVerify
您还可以检查,您是否正确执行了所有操作,没有拼写错误:
$ git config --global --list
什么应该列出所有变量,你已经全局设置了。 (我将 http 拼错为 htt)。