2017-03-02 49 views
1

我需要使用OpenSSL驗證客戶端證書。但是,我沒有根證書(只有可信中間證書)。SSL_CTX_set_verify回調獲取證書在哪裏?

我開始東張西望怎麼做,發現幾個環節:

幾乎是總結「設置回調(使用SSL_CTX_set_verify)並忽略此回調中的錯誤「。

回調會被調用多次(鏈中的每個證書)和文件說:

證書鏈檢查開始最深嵌套級(根CA證書)和向上的工作到同行的證書。在每個級別檢查簽名和發行者屬性。

我的問題是OpenSSL從哪裏獲得這些證書鏈?它來自客戶端(意味着它們不受信任)還是從可信任商店獲取(意味着它們是受信任的)。

在這種情況下,如果只有客戶端證書來自客戶端,我幾乎可以忽略深度大於0(中間證書)的所有錯誤。在這種情況下,如果客戶端可以發送整個鏈,那麼我不能忽略錯誤,而是需要做額外的驗證。

P.S.我的實驗顯示depth = 1是中間的可信證書,depth = 0是由客戶端發送的證書。但是,這是不確定的。

回答

2

整個鏈都來自客戶端,其中最上面的元素應該是您稱爲在CertificateRequest消息中信任的CA的那個元素。否則客戶端不應該發送任何東西(可能是一個空鏈)。

出於您的目的,您信任的任何證書都是根。因此,您需要做的就是確保自己的可信證書集中存在最高級的證書,然後繼續進行鏈的正常驗證。