4
我正在處理的系統體系結構需要比較兩個SSL/TLS(通常是X.509)證書。也就是說,我需要驗證兩個證書是否相同。通過簽名比較SSL證書:是否足夠?
我不在乎他們是否過期或自簽名,我只是想確保他們沒有以任何方式被改變。
哪一種是最正確的方法來執行此類操作?足夠比較這些證書的兩個簽名(兩個字節[])還是這種操作容易發生我迄今尚未考慮的漏洞利用?
我正在處理的系統體系結構需要比較兩個SSL/TLS(通常是X.509)證書。也就是說,我需要驗證兩個證書是否相同。通過簽名比較SSL證書:是否足夠?
我不在乎他們是否過期或自簽名,我只是想確保他們沒有以任何方式被改變。
哪一種是最正確的方法來執行此類操作?足夠比較這些證書的兩個簽名(兩個字節[])還是這種操作容易發生我迄今尚未考慮的漏洞利用?
我不認爲比較這兩個簽名是足夠的,除非您的代碼直接從某些實例中獲取證書,從而確保簽名也是對照證書本身的。所以在很多情況下,我會說:沒有。
我相信最靈活,最正確的方法是單獨檢查兩個證書(body vs signature)的完整性,然後直接比較證書中所有需要相同的信息。 (我這樣說,因爲我不確定你需要總共身份)。但是,如果你的目標是真的檢查服務器發送的真實性證書,那麼在你的代碼中擁有整個證書的副本不一定是明智的;在這種情況下,您可以驗證服務器的證書,然後使用存儲在您的應用中的安全哈希來檢查其身體。
我需要驗證_total_標識。據我的理解你的答案,你建議 1)驗證證書的簽名本身 2)驗證兩個簽名匹配 是這樣嗎?順便說一句,我的應用程序不存儲任何證書,全部在運行時完成。 – Sebastiano 2013-03-15 11:57:27
@dextor在驗證證書和簽名後,我不會比較兩個_signatures_,而是比較_certificates_或它們的相關部分。 – 2013-03-15 13:06:21
感謝您的澄清。通過逐場進行原始比較,這當然是可行的。我仍然不清楚的是,爲什麼你認爲一個「完整的證書」比較(比如說散列它們的編碼形式並將結果與另一個比較)是不夠安全的。 – Sebastiano 2013-03-15 13:28:44