OpenSSL+;CAPI:可以在Windows证书商店中找到CA证书,赢得';t使用它验证服务器证书

OpenSSL+;CAPI:可以在Windows证书商店中找到CA证书,赢得';t使用它验证服务器证书,openssl,Openssl,在连接到MQTT代理时,我试图使用CAPI引擎和OpenSSL来利用Windows证书存储,但遇到了一个问题,它似乎没有使用存储中的CA证书 (这是针对MQTT的,作为上下文提到,但MQTT本身并不涉及该问题。) 我已经退回到使用openssl.exe进行测试,以消除我自己代码中的问题。我使用的是OpenSSL wiki上列出的来自的预编译v1.1.1a二进制文件 它可以通过以下方式在Windows证书存储中找到CA证书: openssl engine capi -t -post store_n

在连接到MQTT代理时,我试图使用CAPI引擎和OpenSSL来利用Windows证书存储,但遇到了一个问题,它似乎没有使用存储中的CA证书

(这是针对MQTT的,作为上下文提到,但MQTT本身并不涉及该问题。)

我已经退回到使用openssl.exe进行测试,以消除我自己代码中的问题。我使用的是OpenSSL wiki上列出的来自的预编译v1.1.1a二进制文件

它可以通过以下方式在Windows证书存储中找到CA证书:

openssl engine capi -t -post store_name:ROOT -post list_options:8 -post lookup_cert:mqtt
但在使用连接到我的代理时,它似乎没有使用它来验证服务器证书

openssl s_client -connect 192.168.56.101:8883 -showcerts -engine capi
(我为这次测试将CA证书添加到我的个人存储中,因为在使用s_客户端时,我找不到将命令传递给CAPI引擎的方法,并且个人存储是默认的。)

客户端连接显示

engine "capi" set.
并列出服务器发送的正确证书(我可以将根证书的详细信息与存储区中的证书进行匹配),但是

verify error:num=19:self signed certificate in certificate chain
我认为这意味着在存储中找不到根证书,因此服务器和服务器提供的CA证书不可信,因此链的根证书被认为是自签名和不可信的

当直接提供CA证书文件时,通过在我自己的客户端应用程序中执行成功连接(使用OpenSSL但不使用CAPI),我已经确定证书是有效的

因此,我的问题是:

  • 为了使测试更容易,是否有方法将引擎命令传递给s_客户端
  • CAPI引擎验证证书是否存在问题?到目前为止,我的搜索结果表明它是有效的
  • 我的设置中是否有遗漏的内容

您有什么进展吗?我也被困在这里。@Michael-O不幸的是,我的时间有限,使用Windows应用商店不是一项硬性要求,因此我最终从磁盘加载了证书。请参阅: