簡體   English   中英

openssl客戶端如何信任服務器的自簽名證書

[英]How can an openssl client trust a self signed certificate for a server

我正在設置一個用於處理tls連接(客戶端和服務器)的c ++類。 除tls握手外,它均有效:我已經生成了我自己簽名的根證書,並用它簽名了rsa服務器密鑰。 但我收到一個未知的客戶端錯誤,CA

生成自簽名CA(CA文件和CA.pem文件)的腳本

openssl req -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout CA -out CA.pem

生成和簽名服務器密鑰的腳本(密鑰文件和key.pem文件)

read -p "key and cert name :" x

openssl genrsa -out $(echo $x) 2048
openssl req -new -key $(echo $x) -out $(echo $x).csr
openssl x509 -req -in $(echo $x).csr -CA CA/CA.pem -CAkey CA/CA -CAcreateserial -out $(echo $x).pem -days 3650 -sha256

然后,我通過使用CA.pem客戶SSL_CTX_use_certificate_file ,重點使用服務器SSL_CTX_use_PrivateKey_file和key.pem使用SSL_CTX_use_certificate_file

客戶端處於SSL_VERIFY_PEER模式,服務器處於SSL_VERIFY_NONE模式,因此只有客戶端檢查服務器證書。

由於服務器密鑰是使用CA和客戶端信任CA.pem簽名的,因此它應該可以工作,但是當握手時,我會在Wireshark中收到此消息(從客戶端到服務器的消息): Alert level Fatal, Description : Unknown CA

如果您閱讀OpenSSL的文檔,則對於客戶端SSL_CTX_use_certificate_file將安裝客戶端證書。 它沒有指定可用於驗證證書的受信任CA的列表。

為此,在客戶端,您想使用SSL_CTX_load_verify_locations

SSL_CTX_load_verify_locations()指定ctx的位置,用於驗證的CA證書位於該位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM