C++ OpenSSL和可信系统认证
因此,我已经知道如何使用C++ OpenSSL和可信系统认证,c++,linux,openssl,C++,Linux,Openssl,因此,我已经知道如何使用SSL\u CTX\u load\u verify\u locations()指定受信任证书的位置。现在,文件说明如下: SSL_CTX_load_verify_locations()指定CTX的位置,位于 哪些CA证书用于验证目的。这个 通过CAfile和CApath提供的证书是可信的 还说, 查找CA证书时,OpenSSL库将首先进行搜索 CAfile中的证书,然后是CApath中的证书 那很好。但是没有提到驻留在OPENSSLDIR中的受信任系统证书 CAfile和
SSL\u CTX\u load\u verify\u locations()
指定受信任证书的位置。现在,文件说明如下:
SSL_CTX_load_verify_locations()指定CTX的位置,位于
哪些CA证书用于验证目的。这个
通过CAfile和CApath提供的证书是可信的
还说,
查找CA证书时,OpenSSL库将首先进行搜索
CAfile中的证书,然后是CApath中的证书
那很好。但是没有提到驻留在OPENSSLDIR中的受信任系统证书
SSL\u CTX\u set\u default\u verify\u path()
是否覆盖SSL\u CTX\u load\u verify\u locations()
?或者它们是并排工作的,即受信任的系统证书和CAfile和CApath指定的证书SSL\u CTX\u get\u cert\u store()?是否只检查了存储证书?在这种情况下,是否仍要禁用/启用检查受信任的系统证书
好的。。所以我尝试了一下,找到了我需要知道的东西。
设置:
-简单的客户端和服务器,两侧均启用对等验证
-我创建了两个CA。让我们称它们为SS(自签名)和TR(可信)。
-SS用于创建客户端(SS_C)和服务器(SS_S)证书。
-TR用于创建客户端(TR_C)和服务器(TR_S)证书。
-TR CA被散列并添加到默认CA目录中 万无一失的测试:
-除非我指定
CAfile
-
openssl验证TR_C和TR_S成功
如期而至
客户端/服务器基本测试:
-没有验证路径调用:SS失败--TR失败
-调用SSL\u CTX\u set\u default\u verify\u path
:SS失败--TR成功
-调用SSL\u CTX\u load\u verify\u locations
,将SS作为CAfile:SS成功--TR失败
如期而至
现在,让我们来看看更有趣的东西。
调用SSL\u CTX\u set\u default\u verify\u路径
和SSL\u CTX\u load\u verify\u位置
:
在这种情况下,对SSL\u CTX\u load\u verify\u位置的调用总是以SS作为CAfile。
-TR成功--不考虑调用的顺序
-SS成功——无论调用顺序如何
有趣的结果——至少对我来说
现在,我可以预期使用证书存储也会起作用
使用X509\u存储
而不是SSL\u CTX\u加载\u验证\u位置
:
在本例中,我创建了SS CA的字节数组,获得了上下文的证书存储,并将SS CA添加到其中。
-仅获取上下文的存储并将SS CA添加到其中:SS成功--TR失败
-仅获取上下文的存储(以测试它是否添加默认的受信任证书):SS失败--TR失败
-调用SSL\u CTX\u set\u default\u verify\u path
+获取上下文的存储并将SS CA添加到其中:SS成功--TR成功
伟大的它确实有效