OpenSSL 和可信系统证书

OpenSSL and Trusted System Certifcates

所以我已经知道如何使用 SSL_CTX_load_verify_locations() 指定受信任证书的位置。现在文档说明如下:

SSL_CTX_load_verify_locations() specifies the locations for ctx, at which CA certificates for verification purposes are located. The certificates available via CAfile and CApath are trusted.

还说:

When looking up CA certificates, the OpenSSL library will first search the certificates in CAfile, then those in 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(),在这种情况下会发生什么情况?是否只检查商店证书?在那种情况下 disable/enable 检查受信任的系统证书?

好吧..所以我试了一下,发现了我需要知道的东西。
设置:
- 双方启用对等验证的简单客户端和服务器
- 我创建了两个 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 的 openssl verify 和 TR_S 成功
结果符合预期

Client/Server 基础测试:
- 无验证路径调用:SS 失败 -- TR 失败
- 调用 SSL_CTX_set_default_verify_paths:SS 失败 -- TR 成功
- 使用 SS 作为 CAfile 调用 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 成功
太棒了..它确实有效