我有几个使用自签名证书的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
来建议我:)
答案 0 :(得分:0)
Git使用curl(libcurl)来通过http(s)进行调用,并具有属性http.sslCAPath
定义具有ssl证书的目录和属性http.sslCAInfo
来描述具有ssl证书的文件。属性分别映射到邪教的--capath
和--cacert
。
Curl的文档说,在不同的操作系统上可能会有不同的行为。此外,--capath
在目录上运行c_rehash
实用程序,并且可能未安装该实用程序。
如我所研究的,最好将http.sslCAInfo
与http.sslCAPath
相对使用。 http.sslCAInfo
必须以PEM格式定向到文件。如果要编写多个ssl证书,则必须将证书一个接一个地存储在一个文件中。