【问题标题】:C++/OpenSSL: Use root CA from buffer rather than file (SSL_CTX_load_verify_locations)C++/OpenSSL:使用来自缓冲区而不是文件的根 CA (SSL_CTX_load_verify_locations)
【发布时间】:2011-02-19 18:07:45
【问题描述】:

我正在使用 OpenSSL 来验证服务器的证书。由于 OpenSSL 没有任何内置的根 CA,因此我们必须自己与我们的软件一起分发根 CA 证书(我们静态链接 OpenSSL)。通常,这样做的方法是分发 PEM 格式的证书文件并调用 SSL_CTX_load_verify_locations。

但是,此函数采用文件/目录路径并直接从文件系统读取根证书文件。我们真的希望能够将证书硬编码到我们的二进制文件中,而不是将其保存到文件系统中。

换句话说,我们真的希望有一个像 SSL_CTX_load_verify_locations 这样的函数,它接受 X509* 而不是文件路径。

这样的东西存在吗?还是有一种简单的方法可以自己破解它?我们似乎找不到太多关于此的信息。

非常感谢您的任何建议!

【问题讨论】:

  • 是什么阻止您在调用 SSL_CTX_load_verify_locations 之前将硬编码的根证书保存在磁盘上?
  • 没有什么可以阻止它:但是,我们是一个安全应用程序并且担心恶意干扰。特别是,如果很容易找到并覆盖我们的根证书文件,那么您可以阻止我们的任何 SSL 交易。如果需要,我们会走这条路,但如果能够将根证书编译到二进制文件中,那就太好了。
  • 将根 CA 硬编码并不比将其保存在文件中更安全。
  • 至少硬编码需要一些不平凡的逆向工程来定位它并在二进制文件中操作它。此外,虽然我同意这是一个值得商榷的观点,而且我很高兴与您讨论,但我也想知道我的原始问题是否有答案(SSL_CTX_load_verify_locations 的替代方案需要 X509*在内存中而不是文件路径中)。

标签: c++ security ssl openssl ssl-certificate


【解决方案1】:

函数SSL_CTX_get_cert_store()可用于获取用于验证的证书存储的句柄(X509_STORE *),然后可以使用X509_STORE_add_cert()函数(在openssl/x509_vfy.h中)将证书直接添加到那个证书存储。

【讨论】:

  • 完美!非常感谢你;这非常有效。正是我想要的。谢谢!
  • 请注意,这必须在连接之前完成。如果你再这样做,验证将失败。
猜你喜欢
  • 2016-11-07
  • 2020-08-16
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2011-08-14
相关资源
最近更新 更多