2013-07-11 132 views
16

我將PEM文件複製到/ usr/local/share/ca-certificates /中,然後運行update-ca-certificates,並驗證結果證書現在包含在/etc/ssl/certs/ca-certificates.crt中這是由curl-config --ca打印的文件。我還驗證了由openssl s_client -connect example.com:443打印的證書與我的PEM文件相同。然後我繼續得到「錯誤:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:證書驗證失敗」消息。即使我使用curl的--cacert選項(如http://curl.haxx.se/docs/sslcerts.html中所述)來告訴它使用哪個證書,也會發生這種情況。爲什麼不能識別自簽名的SSL證書?

它工作,如果我完全禁用curl -k證書驗證,但我不想這樣做,因爲我試圖編寫一個測試設備,應該適當地測試SSL。

它工作正常,如果我訪問lynx中的相同的URL,通常會抱怨,如果有任何SSL錯誤。但我不能僅僅使用Lynx來測試這個測試工具,除非我能找到某種方式讓Tornado的AsyncHTTPClient使用Lynx而不是libcurl。並且安裝自簽名證書似乎沒有任何意義,但可以滿足Lynx而不是捲曲。

我在Vagrant驅動的VirtualBox中使用Ubuntu 12.04 LTS;它捲曲7.22.0。 SSL終結代理是在同一臺機器上運行的nginx/1.3.13,並且域名通過/ etc/hosts中的條目指向127.0.0.1。

任何線索可能是什麼問題?謝謝。

回答

14

當我們使用cURL檢索未使用CA簽名證書的HTTPS站點時,會發生以下問題。

curl https://example.selfip.com 
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 

當然,這可以簡單地通過使用-k選項來克服。

解決辦法:

步驟1
識別您的OpenSSL安裝使用的目錄。

[email protected]:~# openssl version -d 
OPENSSLDIR: "/usr/lib/ssl" 

步驟2
切換到該目錄,並列出目錄的內容。你應該看到一個名爲「certs」的目錄。

[email protected]:~# cd /usr/lib/ssl && ls -al 

步驟3
更改到該目錄。

[email protected]:/usr/lib/ssl# cd certs 

列出目錄內容。您應該從符號鏈接中看到證書實際存儲在/usr/share/ca-certificates中。

步驟4
更改爲/usr/share/ca-certificates目錄和添加你的自簽名證書有,(例如:your.cert.name.crt)

步驟5
更改爲/etc目錄並編輯文件ca-certificates.conf

[email protected]:# cd /etc 
[email protected]:# nano ca-certificates.conf 

添加your.cert.name.crt到文件(ca-certificates.conf)並保存。

最後一步:

執行程序update-ca-certificates –fresh
注意:您可能希望在執行命令之前備份/etc/ssl/certs

[email protected]:# update-ca-certificates --fresh 
Clearing symlinks in /etc/ssl/certs...done. 
Updating certificates in /etc/ssl/certs....done. 
Running hooks in /etc/ca-certificates/update.d....done. 

在您的目標HTTPS網站上進行卷曲測試,它現在應該可以工作。

Source