“error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”解决方法

本文介绍了一种常见问题——使用Git通过HTTPS方式从GitHub克隆仓库时遇到的证书验证失败错误,并提供了解决方案,包括下载正确的CA证书及如何配置Git以使用该证书。

使用git通过https方式从github clone git repo源码时,报错如下:

1
2
3
Cloning into  'git' ...
fatal: unable to access  'https://github.com/git/git.git/' : SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

开启curl verbose选项(用于调试)并重新执行git clone,详细报错信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
export  GIT_CURL_VERBOSE=1
$ git clone https: //github .com /git/git .git   
Cloning into  'git' ...
* Couldn't  find  host github.com  in  the .netrc  file , using defaults
* About to connect() to github.com port 443
*   Trying 192.30.252.128... * connected
* Connected to github.com (192.30.252.128) port 443
* successfully  set  certificate verify locations:
*   CAfile:  /usr/share/ssl/certs/ca-bundle .crt
   CApath: none
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Closing connection  #0
fatal: unable to access  'https://github.com/git/git.git/' : SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

 从错误提示可知,git通过curl访问https地址时,未能在本机未找到ca证书,从而导致ssl certificate verify failed。

解决方法:

Setp1:从curl官网下载cacert.pem文件(下载链接参见这里,关于curl的Server SSL Certificates细节参见这里,其中提到,从curl 7.18.0开始,编译安装curl时默认安装ca证书,而我机器的curl version=7.12.1,curl –version可查看):

1
2
3
  ~$ mkdir ~/tools/https-ca
  ~$ cd ~/tools/https-ca
  ~$ curl http: //curl.haxx.se/ca/cacert.pem -o cacert.pem

Step2:终端执行下面的命令,以便为git配置ca认证信息: 

1
  ~$ git config --global http.sslCAInfo  /home/slvher/tools/https-ca/cacert .pem

可打开~/.gitconfig确认cainfo配置成功写入git配置文件

        完成以上两步后,执行git clone https://github.com/git/git.git成功,问题解决。

【参考资料】

1. StackOverflow: SSL certificate rejected trying to access GitHub over HTTPS behind firewall

2. cURL: Details on Server SSL Certificates

### 关于TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL错误的原因 当遇到`error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed`这一特定的SSL错误时,通常意味着客户端无法验证服务器证书的有效性。这可能是由于以下几个原因造成的: - 客户端未能找到可信的CA(Certificate Authority)来验证服务器提供的证书。 - 服务器配置不正确,导致其发送了一个不可信或自签名的证书给客户端。 - 中间网络设备篡改了通信过程中的数据包,使得原本有效的证书变得不再有效。 对于上述提到的第一个可能性,在某些情况下,操作系统可能缺少必要的根证书更新,从而阻止了对新颁发证书的信任关系建立[^2]。 针对该类问题的技术文档还指出,如果应用程序使用的OpenSSL版本过低,则可能会因为算法支持不足而引发类似的握手失败现象[^3]。 ### 解决方案概述 为了克服这个问题,可以采取如下措施之一或多者组合的方式来进行修复: #### 更新本地信任库 确保系统的受信任CAs列表是最新的,并包含了所有必需的中间件和根认证机构。可以通过安装最新的安全补丁或者手动导入缺失的证书链来完成这项工作。 #### 修改应用层逻辑绕过校验(仅限测试环境) 在开发调试阶段或是非生产环境中,临时禁用SSL/TLS连接上的主机名检查功能可以帮助快速定位其他潜在的问题根源所在;但是请注意这种方法存在严重的安全隐患,绝不应该应用于任何面向公众的服务当中! ```python import ssl context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.CERT_NONE ``` #### 升级依赖组件至最新稳定版 保持所使用软件栈各部分处于良好维护状态有助于减少兼容性和安全性方面带来的困扰。特别是像OpenSSL这样的底层加密库更应如此操作以获得更好的性能表现以及漏洞修补服务。 #### 配置代理设置排除干扰因素 有时企业内部防火墙或其他形式的安全网关会拦截并重新封装HTTPS流量,进而影响到正常的公钥基础设施(PKI)流程运转。此时应当联系相关人员调整策略参数允许直连目标站点直至恢复正常访问为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值