2011-10-15 156 views
2

我剛剛從Go Daddy購買了SSL證書。 優惠的價格,但它似乎有一個退步。Openssl需要使用CA包文件(中級證書)

它似乎需要bundle.crt爲了在必須瀏覽器上正常工作。 我還沒有確定它是什麼,從我所瞭解的它是來自證書頒發機構的中間證書。糾正我,如果我錯了 所以在我的軟件,我有OpenSSL的

SSL_CTX_set_default_passwd_cb(SSL_ctx, pem_passwd_cb); 
SSL_CTX_use_PrivateKey_file(SSL_ctx, _private_key, SSL_FILETYPE_PEM); 
SSL_CTX_use_certificate_file(SSL_ctx, _certificate, SSL_FILETYPE_PEM); 
SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.pem"); 
SSL_CTX_set_session_cache_mode(SSL_ctx,SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL); 
SSL_CTX_set_quiet_shutdown(SSL_ctx, 1); 

我得到的錯誤是:

沒有運行正確初始化或發生錯誤。

With lasts certs(geotrust)我不需要捆綁中間件,我真的迷失在這裏。

由於SSL_CTX_use_certificate_chain_file只接受PEM文件,因此我使用openssl將bundle.crt文件轉換爲PEM。

有什麼想法?

謝謝!

編輯1: 顯然中級證書必須位於/ etc/ssl/certs文件夾中。 我已經從推杆每個中間證書,這個文件夾去,爸爸,仍然沒有運氣... 我已刪除的行

SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.pem"); 

這似乎是沒有用的,我在這裏...

回答

3

好吧,在測試了一百萬件事後,我終於找到了答案。

我沒有將bundle.crt轉換爲PEM。 我已經直接在bundle.crt粘貼的證書文件(在文件的開頭)

我已刪除了我的這行代碼:

SSL_CTX_use_certificate_file(SSL_ctx, _certificate, SSL_FILETYPE_PEM); 

因此,這裏是爲SSL初始化最終代碼:

SSL_CTX_set_default_passwd_cb(SSL_ctx, pem_passwd_cb); 
SSL_CTX_use_PrivateKey_file(SSL_ctx, _private_key, SSL_FILETYPE_PEM); 
SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.crt"); 
SSL_CTX_set_session_cache_mode(SSL_ctx,SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL); 
SSL_CTX_set_quiet_shutdown(SSL_ctx, 1); 

希望這可以幫助別人,並保存了大量的時間(1整天對我;-))