2015-10-29 52 views
4

所以我已經知道如何使用SSL_CTX_load_verify_locations()指定可信證書的位置。現在的文件說以下內容:OpenSSL和可信系統證書

SSL_CTX_load_verify_locations()指定CTX的位置,在 這對於覈查目的CA證書的位置。可通過CAfile和CApath獲得的 證書是可信的。

而且還說:

當仰視CA證書,OpenSSL庫將首先搜索 在憑證檔案錯誤的證書,那麼這些在CApath。

這很好。但是沒有提到位於OPENSSLDIR中的可信系統證書。

  1. 在CAfile和CApath都失敗之後是否檢查系統證書?
  2. 撥打電話SSL_CTX_set_default_verify_paths()是否覆蓋SSL_CTX_load_verify_locations()?或者它們並行工作,即可信系統證書和CAfile和CApath指定的證書?
  3. 如果使用SSL_CTX_get_cert_store()將證書手動添加到證書存儲區,即完全不會調用SSL_CTX_load_verify_locations(),那麼會發生什麼情況?是否只檢查商店證書?無論如何,在這種情況下禁用/啓用檢查受信任的系統證書?

回答

1

好的..所以我刺了一下,發現了我需要知道的東西。
設置:
- 簡單的客戶端和服務器兩側
啓用對等認證 - 我創建兩個CA。我們稱它們爲SS(自簽名)和TR(可信)。
- SS用於創建客戶端(SS_C)和服務器(SS_S)證書。
- TR用於創建客戶端(TR_C)和服務器(TR_S)證書。
- 將TR CA散列並添加到默認CA目錄。

萬全測試:
- openssl verify SS_C和SS_S的失敗,除非我指定CAfile
- openssl verify TR_C和TR_S的成功
結果如預期

客戶機/服務器的基本測試:
- 沒有驗證路徑調用:SS失敗 - TR失敗
- 呼籲SSL_CTX_set_default_verify_paths:SS失敗 - 成功TR
- 呼籲SSL_CTX_load_verify_locations與SS作爲憑證檔案錯誤:SS成功 - TR未能如預期


現在
結果,讓我們以更有趣的東西。
呼籲雙方SSL_CTX_set_default_verify_pathsSSL_CTX_load_verify_locations
在這種情況下,調用SSL_CTX_load_verify_locations總是與SS作爲憑證檔案錯誤作出。
- TR成功 - 無論通話
的順序 - SS成功 - 無論通話
有趣的結果的順序 - 至少對我來說現在
,我能想到的是使用證書存儲區將工作以及

使用的X509_STORE代替SSL_CTX_load_verify_locations
在這種情況下,我創建了SS CA的字節數組,得到了上下文的證書存儲,和廣告將SS CA加入它。
- 只有獲取上下文的商店,並添加SS CA給它:SS成功 - TR失敗
- 只有獲取上下文的商店(測試它是否添加默認的信任證書):SS失敗 - TR失敗
- 召喚SSL_CTX_set_default_verify_paths +獲取上下文的存儲並添加SS CA到它:SS成功 - TR成功
好..它確實有效