OpenSSL和可信系统证书

OpenSSL and Trusted System Certifcates

本文关键字:系统 证书 OpenSSL      更新时间:2023-10-16

所以我已经知道如何使用SSL_CTX_load_verify_locations()指定受信任证书的位置。现在文件上写着:

SSL_CTX_load_verify_locations()指定CTX的位置,位于用于验证目的的CA证书位于哪个位置。这个通过CAfile和CApath可用的证书是可信的。

还说:

在查找CA证书时,OpenSSL库将首先进行搜索CAfile中的证书,然后是CApath中的证书。

没关系。但是没有提及驻留在OPENSSLDIR中的受信任系统证书。

  1. CAfile和CApath都失败后,是否检查了系统证书
  2. SSL_CTX_set_default_verify_paths()的调用是否覆盖SSL_CTX_load_verify_locations()?或者它们是并排工作的,即受信任的系统证书和CAfile和CApath指定的证书
  3. 如果使用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失败,除非我指定CAfile
-TR_C和TR_S的openssl verify成功
结果如预期

客户端/服务器基本测试:
-无验证路径调用:SS失败--TR失败
-调用SSL_CTX_set_default_verify_paths:SS失败--TR成功
-以SS为CA文件调用SSL_CTX_load_verify_locations:SS成功--TR失败
结果如预期


现在,让我们进入更有趣的内容
同时调用SSL_CTX_set_default_verify_pathsSSL_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成功
太好了。。它确实有效