告诉Git将多个自签名证书用作受信任的证书

时间:2018-07-05 12:04:34

标签: git ssl

我有几个使用自签名证书的git服务器。

我需要将所有证书添加为可信证书。 我知道标志http.sslCAInfo-它仅适用于一个证书。 我知道标志http.sslCAPath-但它根本不起作用。

$ cat .gitconfig
...
[remote "origin"]
    url = https://[server_ip_address]/root/FirstOne.git
[http]
    sslCAPath = /Users/username/certs/
...
$ GIT_CURL_VERBOSE=1 git fetch
Couldn't find host [server_ip_address] in the .netrc file; using defaults
*   Trying [server_ip_address]...
* TCP_NODELAY set
* Connected to [server_ip_address] ([server_ip_address]) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection:     ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
CApath: /Users/username/certs/
* SSL certificate problem: unable to get local issuer certificate
* stopped the pause stream!
* Closing connection 0
fatal: unable to access 'https://[server_ip_address]/root/FirstOne.git/': SSL certificate problem: unable to get local issuer certificate

我看到CAFile具有默认值,并且据我了解,CAFile在CAPath下具有优先级。我试图将变量GIT_SSL_CAINFO设置为空值,但是得到了

error setting certificate verify locations:
CAfile:
CApath: /Users/username/certs/

如何解决此问题? 附言-请不要使用http.sslVerify false来建议我:)

1 个答案:

答案 0 :(得分:0)

Git使用curl(libcurl)来通过http(s)进行调用,并具有属性http.sslCAPath定义具有ssl证书的目录和属性http.sslCAInfo来描述具有ssl证书的文件。属性分别映射到邪教的--capath--cacert

Curl的文档说,在不同的操作系统上可能会有不同的行为。此外,--capath在目录上运行c_rehash实用程序,并且可能未安装该实用程序。

如我所研究的,最好将http.sslCAInfohttp.sslCAPath相对使用。 http.sslCAInfo必须以PEM格式定向到文件。如果要编写多个ssl证书,则必须将证书一个接一个地存储在一个文件中。