2015-06-17 161 views
4

我是新來配置Jetty服務器的SSL。我按照digcert的步驟創建了私鑰文件,證書請求 CSR文件。從私鑰和CA證書包創建java密鑰庫

我向CA發送了證書申請並獲得了簽名的CSR。但CA向我發送了一個包含兩個證書的包,其中一個是我的CA證書,另一個是CA證書(1. star_xyx_abc_com crt文件,2.DigiCertCA crt文件)。現在我面臨從這些文件創建密鑰庫的麻煩。

當我使用密鑰工具通過以下步驟Oracle docs 4,5和6來創建密鑰庫,我得到一個錯誤

keytool error: java.lang.Exception: Certificate not imported, alias already exists. 

當我用的OpenSSL創建PKCS12

Loading 'screen' into random state - done 
Error unable to get issuer certificate getting chain. 

錯誤。

如何從私鑰文件生成KeyStore,我的證書由CA和CA證書籤名?

回答

0

這裏是我遵循的步驟來安裝證書。

1.Created一個PKCS12使用OPENSSL工具三個文件(私鑰文件,我的證書,CA證書)。

openssl pkcs12 -export -out j2vproject.pkcs12 -inkey my_privatekeyfile.key -in star_xyz_abc.crt -certfile DigiCertCA.crt 

2.Created使用使用Keytool工具從PKCS12一個java 密鑰庫

keytool -v -importkeystore -srckeystore j2vproject.pkcs12 -srcstoretype PKCS12 -destkeystore j2vprojectkeystore.jks -deststoretype JKS 

3.將此密鑰庫添加到服務器,它工作。

4

旁白:你有證書由CA簽名,但證書是簽署的CSR。 一些數據中的證書與中的一些中的數據相同,但不是全部。另外我想知道爲什麼你遵循Apache/OpenSSL的digicert指令而不是Tomcat/Java的指令,這會更簡單,因爲Jetty也是Java。

無論如何:如果您使用Java keytool生成了私鑰和CSR ,則該Oracle頁面上的說明僅適用於步驟1,2,3中所述的操作。此外,步驟4和5 + 6是替代品;儘管文本並不盡如人意,但你只能做一個或另一個,而不是兩個 - 只有在做了1,2,3之後。

鑑於您現在在哪裏,您唯一的選擇是將OpenSSL文件轉換爲pkcs12,然後使用keytool將pkcs12轉換爲JKS。 (Java加密本身可以直接使用pkcs12,但並不是所有Java加密應用都可以調用此選項,並且我不知道Jetty是否可以)

你說你試過這個,沒有提供關於你做什麼的細節,但是我猜想最有可能的是你的「Digicert CA」文件不是根,而是爲了得到一個完整的鏈,你需要添加根。 (pkcs12格式實際上並不需要完整的鏈,因此openssl pkcs12子命令實際上不需要,但對於SSL/TLS(如Jetty)非常有用,因此您應該這樣做。)

首先檢查你的(即時)CA是,並與

openssl x509 -in $yourcert.crt -noout -issuer 
openssl x509 -in DigicertCA.crt -noout -subject -issuer 

如果您的證書的頒發者DigicertCA,的主題相符,並什麼DigicertCA.crt他們(雙方)包括像「中間CA 「或‘SSL CA’,發行DigicertCA有‘CN’,這是任何DigiCert Assured ID Root CADigiCert Global Root CADigiCert High Assurance EV Root CA然後你走運了,只要你(或其他人)沒有刪除digicert根(s)從默認的cacerts中你的Java(JRE)安裝。使用keytool -exportcert將該digicert根從JRE/lib/security/cacerts中的匹配條目複製到文件中。將您的私鑰,證書,中級「DigicertCA」證書和相應的根證書連接到一個文件中,並將其提供給openssl pkcs12 -export [-name whatever]並將輸出指向文件,並提供非空密碼。 (其他情況:如果DigicertCA.crt實際上是一個根與你的證書的頒發者相匹配,那將是非常奇怪的。如果它是一個根,並且與你的證書的頒發者不匹配,那麼你缺少中間的CA證書(或者甚至可能超過一個);你應該能夠從Digicert獲得它(如果它(DigicertCA.crt)匹配你的證書的發行者,並且不是根,但是它的發行者不是上面提到的根源之一,就需要更多的證書爲您的鏈條,但沒有更多的數據,我不能勸哪。)

隨着PKCS12文件,請

keytool -importkeystore -srckeystore p12file -srcstoretype pkcs12 -destkeystore newjksfile 
+0

感謝dave_thompsom_085我跟着你的建議,並安裝了我的證書。 –

0

我試圖從SSL分佈中追加CA證書鏈和cacerts,並將結果作爲ca cert鏈使用並且工作正常!

cat yourCACert.crt /etc/ssl/certs/ca-certificates.crt > fullCAChain.crt 

openssl pkcs12 -export -chain -CAfile fullCAChain.crt -in customercert.cer -inkey customercert.key -out customercert.keystore -name tomcat