我正在嘗試建立到服務器計算機的TLS連接。我使用openssl CLI命令創建了根CA證書和服務器證書。我創建了具有與其IP地址相同的通用名稱的服務器證書。根CA證書的通用名稱是服務器的FQDN。Openssl:在SSL_CTX_load_verify_locations中使用CApath參數時,證書驗證失敗API
我正在使用openssl庫API建立與服務器的連接。 我現在用的是API
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath)
用於設置CA文件查找路徑。
當我使用CAfile參數指定我的CA文件的路徑並將CApath參數保留爲NULL時,一切正常。
但是,如果我用CApath參數指定的路徑到包含CA文件的目錄,留下憑證檔案錯誤參數爲NULL,則連接由於證書驗證錯誤失敗。
當我使用wireshark捕獲數據包時,發現我的客戶端代碼正在從服務器發送「服務器問候」的TLS響應「未知CA」。我已經使用了我在成功連接中使用的相同CA證書文件。
從我的觀察,同時探索OpenSSL庫的源代碼,我推斷,在我的情況下,CA的文件不被認爲是由庫API有效,因此沒有被加載由於一些未知的原因。
有人可以告訴我的原因,如果可能的話,這個問題的解決方案?
如文檔中所述,CApath中的文件是否具有正確的文件名稱(即證書散列)?從https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_load_verify_locations.html:「如果CApath不是NULL,它指向一個包含PEM格式CA證書的目錄,每個文件都包含一個CA證書,文件由CA主題名稱哈希值查找,因此必須可用...「 –
CA證書具有主題名稱(CN =)。但我不明白什麼是主題名稱散列。我在證書中看不到這樣的字段。 –
sreeyesh
您的評論顯示您的文件可能沒有正確的名稱。您可以閱讀https://mta.openssl.org/pipermail/openssl-users/2015-July/001687.html以獲取有關如何創建正確文件名的更多信息。 –