在日常开发中,我们常常碰到各种各样奇怪的问题,当然今天笔者又碰到一个,从报错的信息看这是一个https请求但证书认证异常的问题。

网络环境

微信截图_20200817113709.png

curl -v https://api.xxxx.cn/
*   Trying 47.115.xxx.xxx...
* TCP_NODELAY set
* Connected to api.dashiyun.cn (47.115.xxx.xxx) port 443 (#0)
* schannel: SSL/TLS connection with api.xxxx.cn port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 180 bytes...
* schannel: sent initial handshake data: sent 180 bytes
* schannel: SSL/TLS connection with api.xxxx.cn port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with api.xxxx.cn port 443 (step 2/3)
* schannel: encrypted data got 1286
* schannel: encrypted data buffer: offset 1286 length 4096
* schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - 证书链是由不受信任的颁发机构颁发 的。
* Closing connection 0
* schannel: shutting down SSL/TLS connection with api.xxxx.cn port 443
* schannel: clear security context handle
curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - 证书链是由不受信任的颁发机构颁发的。
'username' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'pwd' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

分析

在握手的第二部发生failed to receive handshake, need more data,说明服务器回来的数据,本地没有信任或者可用的证书。

而且在末尾提示:证书链是由不受信任的颁发机构颁发的。证明本地没有合适的证书。

正确安装证书

这个问题是因为证书没有安装成功或者安装的位置不被系统信任引起的。

  • window系统一般需要双击证书,然后安装到个人信任的位置,而mac系统则需要去安全中心开启信任证书。

window安装证书不能采取默认的默认的安装方式,一定要在自定义选择中:`选择安装到"个人信任"的位置。