繁体   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