使用 Git,有没有办法告诉它接受自签名证书?
我正在使用 https 服务器托管 git 服务器,但目前证书是自签名的。
当我第一次尝试在此处创建存储库时:
git push origin master -f
我得到了错误:
error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed
尝试使用http.sslCAPath
或http.sslCAInfo
。亚当 · 斯皮尔斯(Adam Spiers)的答案提供了一些很好的例子。这是最安全的解决方案。
尝试使用适当的 config 变量-c
传递给git
,或使用 Flow 的答案:
git -c http.sslVerify=false clone https://example.com/path/to/git
如果存储库完全在您的控制之下,则可以尝试:
git config --global http.sslVerify false
git
有很多 SSL 配置选项。 git config
的手册页中:
http.sslVerify
Whether to verify the SSL certificate when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_NO_VERIFY environment variable.
http.sslCAInfo
File containing the certificates to verify the peer with when fetching or pushing
over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.
http.sslCAPath
Path containing files with the CA certificates to verify the peer with when
fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_CAPATH environment variable.
其他一些有用的 SSL 配置选项:
http.sslCert
File containing the SSL certificate when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_CERT environment variable.
http.sslKey
File containing the SSL private key when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_KEY environment variable.
http.sslCertPasswordProtected
Enable git's password prompt for the SSL certificate. Otherwise OpenSSL will
prompt the user, possibly many times, if the certificate or private key is encrypted.
Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
您可以将GIT_SSL_NO_VERIFY
设置为true
:
GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git
或配置 Git 不在命令行上验证连接:
git -c http.sslVerify=false clone https://example.com/path/to/git
请注意,如果您不验证 SSL / TLS 证书,则容易受到 MitM 攻击。
我不是现有答案的 [编辑:原始版本] 的忠实拥护者,因为禁用安全检查应该是不得已的方法,而不是所提供的第一个解决方案。即使没有某些其他验证方法也无法信任首次签收的自签名证书,但将证书用于后续git
操作至少会大大降低仅在下载证书后才发生的攻击的难度。换句话说,如果您下载的证书是正版证书,那么从那时起您就可以了。相反,如果你简单地禁用验证,那么你敞开,以在任何时候任何中间人攻击的。
举一个具体的例子:著名的repo.or.cz
存储库提供了一个自签名证书。我可以下载该文件,将其放置在/etc/ssl/certs
,然后执行以下操作:
# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
git clone https://repo.or.cz/org-mode.git
# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem
请注意, git config
(即不使用--global
)意味着仅对该特定存储库信任此自签名证书,这很好。它比使用GIT_SSL_CAPATH
更好,因为它消除了git
通过不同的证书颁发机构进行验证的风险,该证书颁发机构可能会受到损害。