2013-04-23 198 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