我在运行 Debian 6 的生产服务器上遇到了问题(apt-get update;apt-get upgrade 成功完成)。
当我调用 HTTPS(StartSSL)服务器时,在 Debian 6 上收到一条错误消息:
#> curl --version
curl 7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
Protocols: dict file ftp ftps http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
#> curl https://mydomain.com/api/
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html
但是当我在 Debian 7 上调用相同的地址(服务器也是最新的)时,一切运行良好:
#> curl --version
curl 7.26.0 (x86_64-pc-linux-gnu) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
#> curl https://mydomain.com/api/
{'code':'ko', 'message':'ERR_AUTH_BASIC_NEEDED'}
你知道为什么 HTTPS 在 Curl Debian 6 上失败,却可以在 Debian 7 curl 上工作吗?
答案1
过时的不是 curl,而是系统使用的根 CA 证书包。随着 CA 启动、停止运营,或者证书过期、被吊销或续订,有效证书可能会随时间而变化。
在 Debian 中,这些是包裹ca-certificates
。对于 squeeze,这似乎几年都没有更新过。只有 wheezy 和 newer 似乎接近最新版本。发行版应该在发行版的支持生命周期内更新这些内容,但 Debian 似乎没有这样做。