2017-05-04 83 views
0

我知道如何SSL_CTX_load_verify_locations(ctx, caName, caPath)或通過創建X509_STORE和添加CA證書,它驗證證書如何驗證任何種類的C/C++(OpenSSL的)證書?

  1. 加載CA證書。
  2. 通過SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL)

通過這種方式,我們可以驗證通過加載CA證書籤名的證書啓用SSL客戶端的對等認證。

我想知道的:

1.驗證自簽名證書

如何通過SSL_CTX_load_verify_locations(ctx, caName, caPath)加載多個CA證書?

如何提供caPath中提到的功能?

我曾嘗試:

  • 創建軟玲通過命令openssl X509 -in ca_file.pem -noout -subject_hash產生與每名CA證書。
  • 這些軟鏈接名爲ca_path
  • 現在同一文件夾中創建,我通過上面的函數這個ca_pathcaPath參數。

    我試圖使用不同類型的軟件鏈接,如50693e.pem, 50693e.0, 50693e根據 哈希產生,但沒有任何工作。

2.確定由知名簽署的證書CA

我需要通過自己即使簽名證書的驗證提供CA證書捆綁?

openssl庫會在握手過程中從CertificateServer響應中獲取CA證書鏈本身(或者我有 做某事)?

3.如何啓用SSL客戶端驗證這兩個種類(個體經營由知名CA簽署並簽字)的服務器證書?

回答

0

在SSL握手期間,服務器證書鏈將被驗證,從主機證書開始直到最後一個證書,該證書將是自簽名證書。 例如考慮主機證書是server.cert,通過中間證書int.cert,由根證書籤名ca.cert

在握手簽名,客戶端請求服務器證書,服務器發送server.cert 客戶端使用驗證server.cert int.cert,驗證int.cert與ca.cert並驗證ca.cert與約證書在鏈中的最後一個證書,並通過自身 簽署不管你生成自己的證書或從知名CA得到它,它總是會驗證整個證書鏈,除非你明確地使用SSL_CTX_set_verify_depth

指定鏈的深度要使證書驗證成功,您需要在客戶端設置int.cert和ca.cert。 您可以在單個文件中連接多個CA(例如concat int.cert和ca.cert以形成ca.pem),並在握手期間使用SSL_CTX_load_verify_locations加載它,驗證server.cert所需的證書將從那裏查找。