所以我已经知道如何使用SSL_CTX_load_verify_locations()
指定受信任证书的位置。现在文档说明如下:
SSL_CTX_load_verify_locations()指定ctx的位置,at 用于验证目的的CA证书。该 通过CAfile和CApath提供的证书是可信的。
还说:
在查找CA证书时,OpenSSL库将首先进行搜索 CAfile中的证书,然后是CApath中的证书。
没关系。但没有提及居住在 OPENSSLDIR 中的可信系统证书。
SSL_CTX_set_default_verify_paths()
的电话会覆盖SSL_CTX_load_verify_locations()
吗?或者它们并排工作,即可信系统证书和CAfile和CApath指定的证书?SSL_CTX_get_cert_store()
手动将证书添加到证书库,即根本不调用SSL_CTX_load_verify_locations()
,那么会发生什么情况?只检查商店证书吗?无论如何,在这种情况下禁用/启用检查受信任的系统证书?答案 0 :(得分:1)
好吧..所以我捅了一下,发现了我需要知道的东西
的设定:强>
- 简单的客户端和服务器,双方都启用了对等验证
- 我创建了两个CA.我们称他们为SS(自签名)和TR(受信任)
- SS用于创建客户端(SS_C)和服务器(SS_S)证书
- TR用于创建客户端(TR_C)和服务器(TR_S)证书
- TR CA经过哈希处理并添加到默认CA目录中。
万无一失的测试:
- 除非我指定openssl verify
,否则SS_C和SS_S的CAfile
会失败
- TR_C和TR_S的openssl verify
成功
按预期结果
客户端/服务器基本测试:
- 没有验证路径调用:SS失败 - TR失败
- 呼叫SSL_CTX_set_default_verify_paths
:SS失败 - TR成功
- 使用SS作为CAfile呼叫SSL_CTX_load_verify_locations
:SS成功 - TR失败
按预期结果
现在,让我们来看看更有趣的东西
致电SSL_CTX_set_default_verify_paths
和SSL_CTX_load_verify_locations
:
在这种情况下,始终使用SS作为CA文件来调用SSL_CTX_load_verify_locations
- TR成功 - 无论通话顺序如何
- SS成功 - 无论通话顺序如何
有趣的结果 - 至少对我来说
现在,我可以预期使用证书存储也可以正常工作
使用X509_STORE
代替SSL_CTX_load_verify_locations
:
在这种情况下,我创建了SS CA的字节数组,获得了上下文的证书存储,并为其添加了SS CA.
- 只获取上下文的存储并向其添加SS CA:SS成功 - TR失败
- 只获取上下文的存储(以测试它是否添加了默认的可信证书):SS失败 - TR失败
- 呼叫SSL_CTX_set_default_verify_paths
+获取上下文的存储并向其添加SS CA:SS成功 - TR成功
很好......确实有效