我在Windows上使用git。我安装了msysgit包。我的测试存储库在服务器上有一个自签名证书。我可以使用http访问和使用存储库而不会出现问题。移至https会出现错误“SSL证书问题:无法获取本地颁发者证书”。
我在Windows 7客户端计算机的受信任的根证书颁发机构中安装了自签名证书。我可以浏览到Internet Explorer中的https存储库URL,没有错误消息。
这篇博客http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s-store.aspx解释说curl不使用客户端机器的证书存储区。我按照博客文章的建议创建了curl-ca-bundle.crt的私有副本,并配置git来使用它。我确信git正在使用我的副本。如果我重命名副本; git抱怨文件丢失了。
我粘贴在我的证书中,如博客文章中所述,我仍然收到“无法获得本地颁发者证书”的消息。
我通过https克隆了一个GitHub存储库,验证了git仍在工作。
我唯一看到的与博客文章不同的是我的证书是根证书 - 没有链条可以达到它。我的证书最初来自于单击IIS8 IIS管理器链接“创建自签名证书”。也许这使得证书在某种程度上与curl期望的不同。
我怎样才能获得git / curl来接受自签名证书?
如果要完全禁用SSL验证,请打开Git Bash并运行该命令。
git config --global http.sslVerify false
注意:此解决方案可能会让您受到类似中间人攻击的攻击。因此,请尽快再次启用验证:
git config --global http.sslVerify true
我之前遇到过这个问题,并使用以下配置解决它。
[http "https://your.domain"]
sslCAInfo=/path/to/your/domain/priviate-certificate
从git 2.3.1开始,您可以在http之后放置https://your.domain
,以指示以下证书仅适用于它。
C:\Program Files\Git\bin
和C:\Program Files\Git\mingw64\bin
然后尝试类似:git clone https://github.com/heroku/node-js-getting-started.git
让我烦恼的一件事是路径的格式(在我的Windows PC上)。我原来有这个:
git config --global http.sslCAInfo C:\certs\cacert.pem
但是由于“无法获得本地颁发者证书”错误而失败。
最终起作用的是:
git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
之前使用此命令运行composer update / install:
git config --global http.sslverify false
我也有这个问题。在我的情况下,我试图获得一个post-receive Git钩子,以便在每次推送时更新服务器上的工作副本。试图按照您链接的博客中的说明进行操作。对我来说也没有用,并且在每个用户的基础上覆盖设置似乎也没有用。
我最不得不做的是为Git整体禁用SSL验证(如文章所述)。不是完美的解决方案,但它会起作用,直到我能找到一个更好的解决方案。
我编辑了Git配置文本文件(带有我最喜欢的行结束中性应用程序,如Notepad ++),位于:
C:\ Program Files(x86)\ Git \ etc \ gitconfig
在[http]块中,我添加了一个禁用sslVerify的选项。我完成时看起来像这样:
[http]
sslVerify = false
sslCAinfo = /bin/curl-ca-bundle.crt
这就是诀窍。
注意:这会禁用SSL验证,不建议将其作为长期解决方案。
问题是git默认使用“Linux”加密后端。
从Git for Windows 2.14开始,您现在可以将Git配置为使用SChannel,内置的Windows网络层作为加密后端。这意味着您将使用Windows证书存储机制,而无需显式配置curl CA存储机制:https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx
只需执行:
git config --global http.sslbackend schannel
这应该有所帮助。
在安装git for windows时,使用schannel现在是标准设置,如果可能的话,建议不要通过SSH检查存储库,因为https更容易配置,不太可能被防火墙阻止,这意味着失败的可能性更小。
kiddailey我认为非常接近,但我不会禁用ssl验证,而只是提供本地证书:
在Git配置文件中
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
或者通过命令行:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
这个问题的答案Using makecert for Development SSL为我解决了这个问题。
我不知道为什么,但是IIS Manager中简单的“创建自签名证书”链接创建的证书不起作用。我在创建和安装自签名CA Root的链接问题中遵循了该方法;然后使用它为我的服务器颁发服务器身份验证证书。我在IIS中安装了它们。
这使我的情况与原始问题中引用的博客文章相同。将根证书复制/粘贴到curl-ca-bundle.crt后,git / curl组合就会得到满足。
我也遇到过这个问题。最后通过获得this MSDN Blog的指导得到了解决。
更新
实际上你需要在git的证书文件curl-ca-bundel.cert中添加证书,该文件位于Git \ bin目录中。
脚步
最后检查状态。请注意,在编辑之前备份curl-ca-bundle.crt文件以保持安全。
为了避免完全禁用ssl验证或复制/黑客攻击git使用的捆绑CA证书文件,您可以将主机的证书链导出到文件中,并使git使用它:
git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer
如果这不起作用,您可以仅为主机禁用ssl验证:
git config --global http.https://the.host.com/.sslVerify false
注意:当ssl验证关闭时,可能会受到中间人攻击。
我刚刚遇到了同样的问题,但在Windows上使用sourcetree同样适用于Windows上的普通GIT。按照以下步骤,我能够解决此问题。
这应该可以解决您使用自签名证书和使用GIT的问题。
我尝试使用“http.sslcapath”配置,但这不起作用。此外,如果我没有在证书文件中包含整个链,那么这也将失败。如果有人指出这些,请告诉我,因为必须重复上述新安装。
如果这是系统GIT,那么您可以使用TOOLS - > options GIt选项卡中的选项来使用系统GIT,然后这也解决了sourcetree中的问题。