
概括
我需要從伺服器下載自簽名證書,以建立 .JKS 檔案以用作應用程式中的信任庫。我該如何從 Red Hat 伺服器執行此操作?
我嘗試過的
我嘗試過使用 openssl 來取得憑證:
echo -n | openssl s_client -connect hostname.example.com:20000 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > downloadedcerts.cert
此操作失敗並顯示以下訊息:
verify error:num=19:self signed certificate in certificate chain
確實,該伺服器的根證書是自簽名,而不是來自 CA。我對此感到滿意 - 根證書屬於我所在國家/地區的政府機構 - 但 openssl 不會連接以下載證書。
在 Firefox 中載入 URL、手動忽略憑證錯誤並下載憑證很容易,但由於防火牆的原因,我無法從桌上型電腦連接到伺服器。
任何幫助將非常感激 :)
答案1
驗證錯誤:num=19:憑證鏈中的自簽名憑證
事實上,該伺服器的根憑證是自簽署的,而不是來自 CA。
它是一個 CA,只是不可信;)
與瀏覽器(幾乎信任所有內容)不同,OpenSSL 不信任任何內容(您必須告訴它信任什麼)。
下載您所在國家/地區的 CA 憑證(通常是不是鍊式發送)。它是不是在鏈中發送,因為它是一個信任點;你必須已經擁有它並信任它。
您通常可以在線找到 CA 證書。例如,這裡是 DigiCert 的,這裡是 Verisign 等。驗證是棘手的部分 - 瀏覽器透過攜帶自己的已驗證憑證捆綁包來解決它。
將您所在國家/地區的 CA 憑證放入自己的文件中。然後,使用openssl s_client -connect hostname.example.com:20000 -CAfile my-country-ca.pem
.s_client
將以或類似的方式完成Verify OK (0)
。
答案2
我建議創建您自己的證書頒發機構[編輯-不是想要的。見下一段]。這是一種 PITA,當你研究如何做時,它似乎比實際上更難。您只需創建一個虛構的公司,您將其證書放入客戶端的受信任根中,它將能夠簽署證書而不是使用自簽名證書。
我在布魯諾對這個問題的回答中找到了解釋: https://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca-s
我並沒有認為根憑證是自簽署的,但它很有意義。因此,如果我理解正確的話,您將獲得所需的證書(第一個證書),以及證書鏈中的其他所有證書。根證書是導致該訊息的證書。