我的應用使用SSL與服務器進行安全通信,並且無法驗證證書鏈。鏈是這樣的:理解SSL證書鏈驗證的問題
Entrust.net安全服務器證書頒發機構 - > DigiCert全球CA - > * .ourdomain.com
我們使用的是證書存儲來自Mozilla的拉動。它包含Entrust.net證書,但不包含DigiCert全球CA證書。
我的理解是,中間的權威沒有,只要root權限被信任,但驗證失敗:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
所以我需要明確地信任DigiCert全球CA在爲了驗證通過?這似乎是錯誤的。但你告訴我!
編輯:我現在明白,證書文件需要預先提供給OpenSSL。像這樣的工作:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
這讓我提供DigiCert CA的副本,而不明確地說:「我相信它」,整個產業鏈仍有待驗證。
但是像Firefox這樣的瀏覽器肯定不會總是附帶它需要的每一個證書的副本。總會有新的CA,關鍵是要使用根證書的安全性來確保所有中間CA都是有效的。對?那麼如何這項工作?它看起來真的很傻嗎?
在OpenBSD上,'-CAfile'可以設置爲'/ etc/ssl/cert.pem'。 – 2015-07-24 12:30:41