2013-04-23 205 views
0

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

,生成 “CA-certificates.crt” 文件我安装单/ 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 web站点平行,并与一些进一步的优化,我希望实现更

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

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

  2. 典型的Web浏览器如何访问“Trust Store”?我认为他们使用更高效的方法访问内存中的“信任存储”?我对吗?有人可以提供一些关于如何做的好的提示吗?

回答

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

希望它可以帮助你!

+0

您建议的链接非常有用,对于任何准备开始使用openssl进行编程的人来说,最值得推荐。但他们并没有真正解决我的问题。 :( – mdk 2013-04-23 15:48:45