PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公開金鑰密碼的發展而制訂的一系列標準,PKCS 目前共發布過 15 個標準。 常用的有:
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
PKCS#7 常用的尾碼是: .P7B .P7C .SPC
PKCS#12 常用的尾碼有: .P12 .PFX
X.509是常見通用的認證格式。所有的認證都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。
X.509 DER 編碼(ASCII)的尾碼是: .DER .CER .CRT
X.509 PAM 編碼(Base64)的尾碼是: .PEM
cer/.crt是用於存放認證,它是2進位形式存放的,不含私密金鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人認證/私密金鑰,他通常包含保護密碼,2進位方式
p10是認證請求
p7r是CA對認證請求的回複,只用於匯入
p7b以樹狀展示憑證鏈結(certificate chain),同時也支援單個認證,不含私密金鑰。
注意:其中若要使用瀏覽器進行雙向認證的話,必須在瀏覽器安裝p12格式的認證 ,因為p12格式的數位憑證包含私密金鑰,只有包含私密金鑰 才能使雙方的加密通訊正常進行。
認證匯入
Der/Cer認證匯入:
要從某個檔案中匯入某個認證,使用keytool工具的-import命令:
keytool -import -file mycert.der -keystore mykeystore.jks
如果在 -keystore 選項中指定了一個並不存在的密鑰倉庫,則該密鑰倉庫將被建立。
如果不指定 -keystore 選項,則預設密鑰倉庫將是宿主目錄中名為 .keystore 的檔案。如果該檔案並不存在,則它將被建立。
建立密鑰倉庫時會要求輸入訪問口令,以後需要使用此口令來訪問。可使用-list命令來查看密鑰倉庫裡的內容:
keytool -list -rfc -keystore mykeystore.jks
P12格式認證匯入:
keytool無法直接匯入PKCS12檔案。
第一種方法是使用IE將pfx認證匯入,再匯出為cert格式檔案。使用上面介紹的方法將其匯入到密鑰倉庫中。這樣的話倉庫裡面只包含了認證資訊,沒有私密金鑰內容。
第二種方法是將pfx檔案匯入到IE瀏覽器中,再匯出為pfx檔案。
新產生的pfx不能被匯入到keystore中,報錯:keytool錯誤: java.lang.Exception: 所輸入的不是一個 X.509 認證。新產生的pfx檔案可以被當作keystore使用。但會報個錯誤as unknown attr1.3.6.1.4.1.311.17.1,查了下資料,說IE匯出的就會這樣,使用Netscape就不會有這個錯誤.
第三種方法是將pfx檔案當作一個keystore使用。但是通過微軟的認證管理主控台產生的pfx檔案不能直接使用。keytool不認此格式,報keytool錯誤: java.io.IOException: failed to decrypt safe contents entry。需要通過OpenSSL轉換一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
通過keytool的-list命令可檢查下密鑰倉庫中的內容:
keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12
這裡需要指明倉庫類型為pkcs12,因為預設的類型為jks。這樣此密鑰倉庫就即包含認證資訊也包含私密金鑰資訊。
P7B格式認證匯入:
keytool無法直接匯入p7b檔案。
需要將憑證鏈結RootServer.p7b(包含根憑證)匯出為根rootca.cer和子rootcaserver.cer 。
將這兩個認證匯入到可信任的密鑰倉庫中。
keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks
遇到是否信任該認證提示時,輸入y
keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks
總結:
1)P12格式的認證是不能使用keytool工具匯入到keystore中的
2)The Sun's PKCS12 Keystore對從IE和其他的windows程式產生的pfx格式的認證支援不太好.
3)P7B憑證鏈結不能直接匯入到keystore,需要將裡面的認證匯出成cer格式,再分別匯入到keystore。