我正在尝试使用cURL并在我发出的每个https请求中收到以下错误。错误总是一样的。 HTTP请求完美无缺。详细的输出很无用。
bash:$ curl https://google.com -vv
* Adding handle: conn: 0x7fe09b803a00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fe09b803a00) send_pipe: 1, recv_pipe: 0
* About to connect() to google.com port 443 (#0)
* Trying 74.125.226.129...
* Connected to google.com (74.125.226.129) port 443 (#0)
* Unknown SSL protocol error in connection to google.com:-9805
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to google.com:-9805
bash:$ curl https://google.com -V
curl 7.30.0 (x86_64-apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz
bash:$ openssl s_client -connect google.com:443 < /dev/null
CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
24255:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-50/src/ssl/s23_lib.c:182:
两个不同的网络上的结果是相同的,因此它似乎不是特定于网络的。尝试使用openssl s_client
进行连接时类似失败,因此它也不依赖于库(Mac上的卷曲使用SecureTransport)。 s_client
的调试输出显示SSL握手正常进行到客户端发送ChangeCipherSpec和Finished消息但未从服务器返回ChangeCipherSpec的位置。
我已尝试在Mac上的Debian VM上运行这些命令,并且所有内容都正确运行。此外,使用curl连接到本地OpenSSL服务器(openssl s_server
带有自签名证书)也可以正常工作。
我已在本论坛和互联网上的其他地方查看了其他答案,但未找到答案。大多数人的问题涉及特定服务器以及这些服务器上的SSL配置。然而,无论何时使用HTTPS(任何网站),我都会遇到问题。
有人建议问题可能在证书库中。但是,如果我理解正确,如果问题出在证书存储区,它将导致所有应用程序拒绝证书。但是,我的所有浏览器(chrome,safari,firefox)都没有问题地协商SSL。 GUI应用程序或shell的环境变量没有任何可疑之处。
有人可以建议我应该考虑解决问题吗?可能是某些东西没有正确配置?我应该寻找什么?