我有了的下列證明鏈中的證書: Entrust->我CA->我發出CA->我的JBoss的認證。現在,如果我在我的JBoss實例上安裝證書,我訪問在此實例上運行的任何頁面都將顯示爲不可信,因爲我的瀏覽器無法識別我的頒發CA.我知道我的電腦擁有Entrust簽名機構的公鑰。我如何安裝證書以便任何瀏覽器都能看到整個證書鏈?增加一箇中間證書的PKCS12文件
我做的所有證書的思想,將工作的單個的.pem文件。它沒。任何人都可以解釋我做錯了什麼,即使這是可能的嗎?
我有了的下列證明鏈中的證書: Entrust->我CA->我發出CA->我的JBoss的認證。現在,如果我在我的JBoss實例上安裝證書,我訪問在此實例上運行的任何頁面都將顯示爲不可信,因爲我的瀏覽器無法識別我的頒發CA.我知道我的電腦擁有Entrust簽名機構的公鑰。我如何安裝證書以便任何瀏覽器都能看到整個證書鏈?增加一箇中間證書的PKCS12文件
我做的所有證書的思想,將工作的單個的.pem文件。它沒。任何人都可以解釋我做錯了什麼,即使這是可能的嗎?
增加一箇中間證書的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
作爲信任錨點,那麼你需要包含它。
如果您cat
和www-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或向我們展示你的鏈。但我猜測它的將是一個或多個:
你可以用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發佈到你的服務器上,這樣我們就可以看到發生了什麼。
我有了的下列證明鏈中的證書:Entrust->我CA->我發出CA->我的JBoss的證書,我認爲你有兩個問題在這裏....
。首先是簽名的CA,其次是不完整的客戶鏈。
一,容易的問題。服務器必須將最終實體(服務器)證書和任何中間證書發送到所需的構建鏈。服務器發送中間證書以避免「哪個目錄」問題。 「哪個目錄」在PKI中是一個衆所周知的問題。從本質上講,客戶不知道去哪裏獲取缺少的中間證書。
因此,第一個解決方案是服務器發送鏈:
其次,您遇到不可信發行人的問題。客戶必須信任您的內部頒發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,那麼問題出在瀏覽器和信任點上。
我的客戶確實信任Entrust。 Entrust包含在所有主流瀏覽器的信任庫中。我創建了一個pkcs12文件,其中包含Entrust,My CA,我的頒發CA和我的服務器以及我的服務器的私鑰的所有公鑰。當我使用openssl s_client -host「server.com」-port 443 -showcerts查詢我的服務器時,我只能看到我的證書。 – blackirishman
「在這種情況下,我們需要查看證書,以瞭解發生了什麼事情。您能發佈一個提供證書並使用該鏈的URL並在網上發佈內部CA('我的CA')證書嗎? 「我不能傷心地沒有任何幫助。當我將所有證書包含在單個筆文件中並查詢我的服務器時,我成功運行了openssl命令。該命令能夠解析服務器的證書和權限。 – blackirishman
「...... Entrust,我的CA,我的簽發CA的所有公鑰......」 - 這裏有兩件事。 (1)證書鏈需要證書,而不是公鑰。文件中證書的順序有時很重要。 (2)證書鏈不需要委託;並且如果您已在管理工作站和設備中預裝了組織的CA證書,則不需要「我的CA」。 – jww
連接我的pem編碼證書鏈(減去Entrust)工作成功。我能夠使一個安全的http通過將我公司的ca,我公司的ca簽名機構和我的機箱證書連接到一個pem.crt,然後與我的機箱的私鑰一起導出到pkcs12文件中,連接到我的JBoss實例。 – blackirishman