2014-03-24 37 views
14

我有了的下列證明鏈中的證書: Entrust->我CA->我發出CA->我的JBoss的認證。現在,如果我在我的JBoss實例上安裝證書,我訪問在此實例上運行的任何頁面都將顯示爲不可信,因爲我的瀏覽器無法識別我的頒發CA.我知道我的電腦擁有Entrust簽名機構的公鑰。我如何安裝證書以便任何瀏覽器都能看到整個證書鏈?增加一箇中間證書的PKCS12文件

我做的所有證書的思想,將工作的單個的.pem文件。它沒。任何人都可以解釋我做錯了什麼,即使這是可能的嗎?

回答

19

增加一箇中間證書的PKCS12文件...

以下是我做我的Web和郵件服務器。

首先,www-example-com.crt是Startcom簽署Web服務器證書。 Startcom提供可信任的大多數瀏覽器和移動設備的免費Class 1證書,因此我使用它們。證書採用PEM格式(----- BEGIN CERT ---------- END CERT -----)。

其次,我打開www-example-com.crt和追加Startcom的1類中間體。我從Startcom的Index of /certs獲得中間人。現在我的www-example-com.crt有兩個PEM編碼的編碼證書。

第三,我執行以下步驟來創建在IIS使用PKCS12/PFX文件。

openssl pkcs12 -export -in www-example-com.crt -inkey www.example.key -out www-example-com.p12 

在你的情況,你的www-example-com.crt將有它至少有三個PEM編碼證書:

----- BEGIN CERT ----- 
< My JBoss Certificate > 
----- END CERT ----- 

----- BEGIN CERT ----- 
< My Issuing CA > 
----- END CERT ----- 

----- BEGIN CERT ----- 
< My CA > 
----- END CERT ----- 

鏈的第三個證書 - My CA - 是可選的。如果您的客戶使用My CA作爲信任錨點,則不需要它。如果你的客戶使用Entrust作爲信任錨點,那麼你需要包含它。

如果您catwww-example-com.crt有多個證書,則不要繼續。直到您的服務器證書具有驗證該鏈所需的所有必需的中間證書時,才執行openssl pkcs12

請勿包含Entrust CA證書。


我懷疑委託他們的CA直接簽署。他們也可能使用中間人。所以,你的證書鏈或許應該是這樣的:

----- BEGIN CERT ----- 
< My JBoss Certificate > 
----- END CERT ----- 

----- BEGIN CERT ----- 
< My Issuing CA > 
----- END CERT ----- 

----- BEGIN CERT ----- 
< My CA > 
----- END CERT ----- 

----- BEGIN CERT ----- 
< Entrust Intermediate > 
----- END CERT ----- 

委託在Entrust Root Certificates提供CA和中級證書。我不能告訴你哪一個你需要,因爲你不會提供一個URL或向我們展示你的鏈。但我猜測它的將是一個或多個:

  • 委託L1E鏈證書
  • 委託L1C鏈證書
  • 委託L1E鏈證書(SHA2)
  • 委託L1C鏈證書(SHA2 )

你可以用OpenSSL的`s_client測試你的鏈。這個時候,你會用委託的認證文件:

echo -e "GET/HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \ 
             -CAfile entrust-ca.pem 

您可以從Entrust Root Certificates得到entrust-ca.pem。運行它並告訴我們你得到了什麼錯誤。或者更好的辦法是將URL發佈到你的服務器上,這樣我們就可以看到發生了什麼。

+0

連接我的pem編碼證書鏈(減去Entrust)工作成功。我能夠使一個安全的http通過將我公司的ca,我公司的ca簽名機構和我的機箱證書連接到一個pem.crt,然後與我的機箱的私鑰一起導出到pkcs12文件中,連接到我的JBoss實例。 – blackirishman

0

我有了的下列證明鏈中的證書:Entrust->我CA->我發出CA->我的JBoss的證書,我認爲你有兩個問題在這裏....

。首先是簽名的CA,其次是不完整的客戶鏈。

一,容易的問題。服務器必須將最終實體(服務器)證書和任何中間證書發送到所需的構建鏈。服務器發送中間證書以避免「哪個目錄」問題。 「哪個目錄」在PKI中是一個衆所周知的問題。從本質上講,客戶不知道去哪裏獲取缺少的中間證書。

因此,第一個解決方案是服務器發送鏈:

  • 你中間證書(「我的頒發CA」)
  • 您的服務器證書(「我的JBoss的證書」)

其次,您遇到不可信發行人的問題。客戶必須信任您的內部頒發CA.

所以你的第二個解決方案是確保你的客戶信任你的內部CA(「我的CA」)。在這種情況下,由於信任點植根於您的內部CA,因此客戶端甚至不需要使用Entrust。

您可以讓服務器發送與「我的CA」,「」我的頒發CA」和‘我的JBoss的證書’鏈。在這種情況下,客戶必須信任'委託'。

如果客戶不信任'委託'或'我的CA',那麼您將收到驗證錯誤。


我做的所有證書的思維,將工作的單個的.pem文件。它沒。任何人都可以解釋我做錯了什麼,即使這是可能的嗎?

在這種情況下,我們需要查看證書以瞭解發生了什麼。你能發佈一個提供證書並使用鏈的URL嗎?並在網上發佈內部CA('我的CA')證書?

這裏有一個快速和骯髒的方式來測試與OpenSSL的s_client連接:

echo -e "GET/HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \ 
             -CAfile my-issuing-ca.pem 

OpenSSL的信任默認情況下沒有什麼(不同於瀏覽器),所以你必須與-CAfile指定您的信任錨。

該命令應該以類似於以下的內容結束。

SSL-Session: 
    Protocol : TLSv1 
    Cipher : DHE-RSA-AES256-SHA 
    Session-ID: 37E5AF0EE1745AB2... 
    Session-ID-ctx: 
    Master-Key: 7B9F8A79D3CC3A41... 
    Key-Arg : None 
    Start Time: 1243051912 
    Timeout : 300 (sec) 
    Verify return code: 0 (ok) 

如果OpenSSL命令導致OK,那麼問題出在瀏覽器和信任點上。

+0

我的客戶確實信任Entrust。 Entrust包含在所有主流瀏覽器的信任庫中。我創建了一個pkcs12文件,其中包含Entrust,My CA,我的頒發CA和我的服務器以及我的服務器的私鑰的所有公鑰。當我使用openssl s_client -host「server.com」-port 443 -showcerts查詢我的服務器時,我只能看到我的證書。 – blackirishman

+0

「在這種情況下,我們需要查看證書,以瞭解發生了什麼事情。您能發佈一個提供證書並使用該鏈的URL並在網上發佈內部CA('我的CA')證書嗎? 「我不能傷心地沒有任何幫助。當我將所有證書包含在單個筆文件中並查詢我的服務器時,我成功運行了openssl命令。該命令能夠解析服務器的證書和權限。 – blackirishman

+0

「...... Entrust,我的CA,我的簽發CA的所有公鑰......」 - 這裏有兩件事。 (1)證書鏈需要證書,而不是公鑰。文件中證書的順序有時很重要。 (2)證書鏈不需要委託;並且如果您已在管理工作站和設備中預裝了組織的CA證書,則不需要「我的CA」。 – jww

相關問題