因此,我已经知道如何使用来指定受信任证书的位置SSL_CTX_load_verify_locations()
。现在文档说明以下内容:
SSL_CTX_load_verify_locations()指定ctx的位置,用于验证的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()
根本不调用证书,在这种情况下会发生什么?仅检查商店证书吗?无论如何要在这种情况下禁用/启用检查受信任的系统证书?好吧..所以我尝试了一下并找出了我需要知道的内容。
设置:
- 简单的客户端和服务器,双方均启用对等验证
- 我创建了两个 CA。我们称它们为 SS(自签名)和 TR(可信)。
- SS 用于创建客户端 (SS_C) 和服务器 (SS_S) 证书。
- TR 用于创建客户端 (TR_C) 和服务器 (TR_S) 证书。
- TR CA 经过哈希处理并添加到默认 CA 目录中。
万无一失的测试:
SS_C 和 SS_S 的
-openssl verify
会失败,除非我指定TR_C 和 TR_S 的CAfile
-openssl verify
成功
结果如预期
客户端/服务器基本测试:
- 无验证路径调用:SS 失败 - TR 失败
- 调用SSL_CTX_set_default_verify_paths
:SS 失败 - TR 成功
- 使用SSL_CTX_load_verify_locations
SS 作为 CA 文件调用:SS 成功 - TR 失败
结果符合预期
现在,让我们来看看更有趣的事情。
调用 和SSL_CTX_set_default_verify_paths
:SSL_CTX_load_verify_locations
在
这种情况下,调用SSL_CTX_load_verify_locations
始终使用 SS 作为 CA 文件。
- 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 成功
太棒了..它确实有效
归档时间: |
|
查看次数: |
497 次 |
最近记录: |