
背景:
- aws.amazon.com/ec2 上的 Ubuntu Server 14.10 64 位
- 來自 COMODO 的廉價 PositiveSSL 伺服器證書
- 來自 COMODO 的 1 個伺服器憑證、2 個中間 CA 憑證和 1 個作為 ZIP 存檔形式的根 CA 憑證
- Citadel 的 WebCit httpsd
問題:
連接的憑證鏈似乎是正確的,但驗證失敗。
openssl s_client myhost:port
顯示憑證鍊和頒發者-主題對在鏈中正確排列,但是:
verify error:num=19:self signed certificate in certificate chain
儘管預設可以在 Ubuntu 伺服器信任儲存中找到根 CA 證書,但 openssl 不接受根 CA 憑證。
具體來說:
AddTrustExternalCARoot.crt
從 COMODO 收到的每封電子郵件及其
/etc/ssl/certs/AddTrust_External_Root.pem
連結
/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
都是相同的。
這裡有什麼問題嗎?
答案1
OpenSSL 至少到目前(1.0.2a)有一個漏洞s_client
沒有-CA{path,file}
參數的地方實際上並不使用預設信任庫正如它應該的那樣,因此無法根據該信任庫驗證有效的憑證。 (還有s_server
和s_time
,但很少關心其中的驗證。)參見https://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-ca。開發人員已宣布修復,但可能需要一些時間才能發布和分發。同時,您需要明確指定-CA*
參數。請注意,openssl verify
沒有此錯誤,因此正確地將憑證/鏈報告為有效。
更新2015/08/26:修復已發布2015/06/12 1.0.1o 和 1.0.2c。另外,在調查其他事情時我發現RedHat 軟體包可能沒問題。更具體地說,據我了解,CentOS 源 RPMopenssl-1.0.1e-30.el6.11
是 RedHat 源 RPM 的副本(但無法輕易確認),openssl-1.0.1c-default-paths.patch
其中包含對s_client.c s_server.c s_time.c
2012 年12 月06 日的更改,這些更改看起來與2015 年等效(儘管在文本上不相同) /06/12 上游修復。假設這個補丁應用在 RedHat 和 CentOS 軟體包中(我無法輕易返回並檢查),它們將按預期工作。
答案2
最近,我在使用 Ruby 開發腳本時遇到了類似的 Comodo 憑證問題。最終,OpenSSL 的商店中並沒有它,儘管看起來有。
要測試這一點,請下載所有 Comodo 中間憑證並建立類似如下的憑證包(您需要根據下載的內容使用不同的憑證名稱):
cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle
完成後,嘗試使用 OpenSSL 再次驗證憑證並在命令列上指定憑證儲存:
openssl verify -untrusted yourDomain.ca-bundle cert.pem
此範例改編自這篇 Unix 和 Linux StackExchange 文章。
一旦確定了它是哪個證書,就可以將證書新增到本地證書儲存中,Ubuntu 的詳細資訊請參閱此處,並且類似於:
在 /usr/share/ca-certificates 中建立額外 CA 憑證的目錄
sudo mkdir /usr/share/ca-certificates/extra
將“.crt”檔案複製到該目錄
sudo cp foo.crt /usr/share/ca-certificates/extra/foo.crt
讓 Ubuntu 將 '.crt' 檔案相對於 /usr/share/ca-certificates 的路徑加入 /etc/ca-certificates.conf
sudo dpkg-reconfigure ca-certificates
答案3
comodo 根憑證不再受信任 - 如果您不知道原因,請Google搜尋「comodo 被盜憑證」。
雖然 comodo 憑證可能很便宜,但其價值遠低於其價格:它實際上毫無價值,信任鏈被破壞。