【问题标题】:Verifying SSL certificates of a remote web-site验证远程网站的 SSL 证书
【发布时间】:2013-04-23 14:10:11
【问题描述】:

我有一个用 C 编写的 OpenSSL 客户端(多线程)。 此客户端连接到多个 HTTPS 网站,并执行类似于典型浏览器的操作。 为了确保客户端连接到真实的网络服务器,我已将其设置为使用 ca-certificates.crt 使用典型的 SSL_CTX_load_verify_locations (ctx, "ca-certificates.crt" , NULL) 方法。

为了生成“ca-certificates.crt”文件,我安装了 mono / mozroots 并执行了以下操作:

mozroots --pkcs7 moz.p7b
openssl pkcs7 -inform DER -in moz.p7b -print_certs -out ca-certificates.crt

到目前为止,一切都按预期运行,并且使用:

SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
SSL_CTX_set_verify_depth(ctx, 4);

后跟 SSL_get_verify_result(ssl);如果我连接到一些“不真实”的 HTTPS 网站,则会产生警报。

我的 OpenSSL 客户端目前并行处理大约 100 个网站,通过进一步优化,我希望能实现更多

我想进一步优化我的客户端,以便:

  1. 我认为 openssl 会调用一些底层方法来执行磁盘 I/O 以使用“ca-certificates.crt”,对吗? 有没有办法将这个“ca-certificates.crt”加载到内存中,并使用一些openssl api来访问这个内存位置?它不会让我的客户更快一点吗?

  2. 典型的网络浏览器如何访问“信任库”?我认为他们使用一些更有效的方法访问内存中的“信任库”?我对吗?有人可以在这里给我一些关于如何做的好建议吗?

【问题讨论】:

    标签: c openssl x509


    【解决方案1】:

    请查看如何验证远程 SSL 证书的精彩教程:https://github.com/iSECPartners/ssl-conservatory/blob/master/openssl/everything-you-wanted-to-know-about-openssl.pdf

    在同一个 gitHub 存储库中还有一个演示应用程序可用:https://github.com/iSECPartners/ssl-conservatory/tree/master/openssl

    希望对你有帮助!

    【讨论】:

    • 您建议的链接非常有用,对于准备开始使用 openssl 编程的任何人来说都是最值得推荐的。但是他们并没有真正解决我的问题。 :(
    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2019-03-29
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多