验证远程Web站点的SSL证书

时间:2013-04-23 14:10:12

标签: c openssl x509

我有一个用C编写的OpenSSL客户端(多线程)。 此客户端连接到许多HTTPS网站,并执行类似典型浏览器的操作。 为了确保客户端连接到可靠的Web服务器,我将其设置为使用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);如果我连接到某个“unauthentic”HTTPS网站,则会生成警报。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

请查看这个很棒的教程,了解如何验证远程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

希望它可以帮到你!