OpenSSL和可信系统认证

时间:2015-10-29 17:34:20

标签: c++ linux openssl

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

  

SSL_CTX_load_verify_locations()指定ctx的位置,at   用于验证目的的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(),那么会发生什么情况?只检查商店证书吗?无论如何,在这种情况下禁用/启用检查受信任的系统证书?

1 个答案:

答案 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_pathsSSL_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成功
很好......确实有效