我不知道到底发生了什么,但我注意到如果不添加额外的开关,curl 就无法获取安全页面。
~# curl -v https://api.dreamhost.com
* About to connect() to api.dreamhost.com port 443 (#0)
* Trying 75.119.208.14...
* connected
* Connected to api.dreamhost.com (75.119.208.14) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
(hangs for a minute)
* Unknown SSL protocol error in connection to api.dreamhost.com:443
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to api.dreamhost.com:443
现在,当我添加 -1(强制 tlsv1)或 -3(强制 sslv3)时,curl 可以完美运行。问题是其他程序似乎也有类似的问题,比如 python 脚本。
当我尝试 openssl 时,它像 curl 一样挂起
openssl s_client -connect api.dreamhost.com:443
CONNECTED(00000003)
(HANGS)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 320 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
如果我使用 -tls1_2,也会发生同样的情况,但如果我使用 -ssl3 开关,它就会起作用
附加数据:
OpenSSL> version
OpenSSL 1.0.1e 11 Feb 2013
有人知道如何修复这个问题,并使 curl 或 openssl 使用默认设置吗?我有另一台装有 Debian lenny 的机器,可以完美地运行这两个命令而无需任何切换。
谢谢!
—罗德里戈
答案1
如果您针对此网站运行SSLLabs 测试,你会发现它不能忍受长时间的握手,这个问题肯定会影响你的 OpenSSL 版本。
减少密码列表的大小应该会有所帮助,例如:
openssl s_client -cipher RSA -connect api.dreamhost.com:443
(您可以使用--ciphers
选项curl
。)
答案2
所以我继续向 Dreamhost 提交了一张票(基于上面 @Bruno 的分析),因为我遇到了同样的问题。花了几个星期,但他们确实解决了问题。如果是其他公司,他们可能会让我陷入技术支持地狱。
答案3
确保已ca-certificates
正确安装该软件包。如果已安装,则可能是您意外删除了其文件,需要重新安装。
sudo apt-get install --reinstall ca-certificates