NSS error -12286
使用从HTTPS下载文件时出现错误curl
。
我可以下载相同的文件而不会出现任何问题,wget
因此可以排除任何防火墙或黑名单问题。
根据Qualys SSL Labs测试服务器工具,已经尝试过但没有运气的选项-k
和--cipher ecdhe_ecdsa_aes_128_gcm_sha_256
,这是服务器首选的密码:https ://www.ssllabs.com/ssltest/analyze.html?d=intribunale.net&latest
这是cURL
日志:
# curl -v https://www.intribunale.net/immobili
* About to connect() to www.intribunale.net port 443 (#0)
* Trying 104.27.150.214... connected
* Connected to www.intribunale.net (104.27.150.214) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error
我的库版本是:
# curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
我可以将CentOS6.7 curl-7.19.7-46.el6 nss-3.21.0-0.3.el6_7的问题重现到测试服务器。默认情况下,它不提供任何ECC套件,并且由于您的服务器(Cloudfare)仅接受某些ECC(特别是ECDHE)套件的协商失败。通过
—
dave_thompson_085 '16
--cipher[s]
指定该ECDHE套件,它甚至不发送ClientHello,仅关闭连接并给出错误。这似乎是内部不同步的,也许是在RedHat长期否认ECC之后。RedHat wget使用OpenSSL,而最近的RedHat OpenSSL确实支持ECC(仅适用于P256 P384 P521,但这已经足够了)。
我的第一个选择是(0)不要使用curl,但是如果您真的希望我看到的选项是:(1)如果您有支持,请将其报告为错误,并希望他们进行修复。(2)是开源的;自己调试和修复。(3)它是开源的;根据应正常工作的openssl(而不是NSS)重新构建。(4)设置
—
dave_thompson_085 '16
stunnel
(使用openssl)作为纯SSL协议,告诉curl,http(notS)://localhost[:port]/whatever
但是添加-H "Host: realhost"
目标服务器就无法区分两者。...
...(5)类似但更正式:在此处使用openssl设置真实的HTTP代理,或者在控件中另一个系统上的任何TLS1.2-ECDHE兼容的SSL / TLS甚至在您的真实计算机上也可以使用VM,例如HAproxy或nginx甚至httpd,您可以使用普通HTTP或至少使用非ECDHE HTTPS进行连接,但使用良好的ECDHE HTTPS中继到真实服务器。
—
dave_thompson_085
NSS上游肯定会长期支持ECDHE。直到2014年末,RedHat多年以来一直出于模糊的“合法”原因,从其加密软件包(AFAIK全部,绝对是OpenSSL NSS OpenJDK)的构建中删除了ECC(的所有变体),在我之前称之为“长期拒绝”。我猜想当他们把它放回原处时,他们犯了一些可能轻微的错误,从而影响了curl / NSS的情况。我不知道有其他发行版可以做到这一点,但是有很多人可能会这样做。在我目前拥有的一个Ubuntu 14.04LTS Trusty中,curl使用OpenSSL并支持ECDHE。
—
dave_thompson_085 '16
SSL_ERROR_NO_CYPHER_OVERLAP
“无法与对等对象安全通信:没有通用的加密算法。” 本地和远程系统没有共享的密码套件。这可能是由于任一端的配置错误。可能是由于服务器配置错误,无法通过RSA密钥交换算法使用非RSA证书。