我有一個通過HTTPS安全的Web服務。我也有客戶端軟件,它使用libcurl(可能與OpenSSL鏈接,或鏈接到GnuTLS;我不知道哪一個取決於用戶如何安裝libcurl)與此Web服務進行交談。由於Web服務只能通過客戶端軟件訪問,並且永遠不會通過瀏覽器訪問,因此Web服務使用自簽名證書。客戶端軟件則擁有該自簽名證書的副本,並明確檢查該證書的連接。我可以在一個證書文件中放置多個主機替代證書嗎?
由於Heartbleed,我想更改私鑰和證書。不過,我希望我的用戶儘可能減少服務中斷。
因此,我無法在固定的日期和時間更改密鑰/證書。如果我這樣做,那麼所有用戶都必須在確切的日期和時間升級其客戶端軟件。否則,升級後的客戶端軟件在服務器更改之前無法工作,而舊版本的客戶端軟件在服務器更改後將無法工作。
理想情況下,我想告訴我的用戶我要在1個月內更改證書,並且他們有1個月的時間來升級客戶端軟件。客戶端軟件應與舊證書和新證書兼容。然後,1個月後,我可以發出另一個客戶端軟件更新,取消對舊證書的支持。
所以,現在我們來到我的問題:我可以追加舊的證書和新的證書到一個單一的.crt文件?這會導致libcurl接受兩個證書嗎?如果不是,我該怎麼做呢?行爲是否依賴於SSL庫或版本?
對OS X的測試似乎表明將兩個證書都附加到單個文件中,但我不知道這是否是OS X特定的行爲,還是它在任何地方都可以使用。我的客戶端軟件必須支持各種Unix系統,包括Linux(多發行版)和FreeBSD。
http://stackoverflow.com/questions/9879688/difference-between-cacert-and-capath-in-curl的答案似乎表明您的文件是否可以包含多個證書取決於您的客戶端如何使用捲曲。我認爲你可以以這種或那種方式提取答案,因爲你總是可以改變你的客戶使用捲曲的方式。 –
@WarrenDew在服務器端,將多個證書連接在一起表示證書鏈。連接甚至必須按照特定的順序來完成。客戶端的工作方式是否有所不同? OpenSSL和GnuTLS都認爲客戶端證書連接意味着「這裏有多個證書,如果它們中的任何一個匹配通過」?這個話題似乎沒有明確地回答這個問題。我對於OpenSSL和GnuTLS之間的行爲是否有差異,甚至是不同的OpenSSL版本,有點謹慎。 – Hongli
我認爲這個問題是關於curl的,而不是關於OpenSSL和GnuTLS的。我不是一個捲曲專家,但我可以說最好的一個選擇是擁有一個捲曲庫中的多個證書,只需要將它們放在一個文件中,而不是Java如何將它們存儲(加密)在cacerts中文件。當他們被提交給OpenSSL或GnuTLS時,他們已經被提取到單個證書中,我想。 –