[英]Converting pem with multiple certificates to java keystore
我得到了一個帶有兩個證書的pem文件。
首先是證書是針對我公司的(即主題是針對我公司的)。
第二個證書是頒發者的證書。
看起來像這樣...
Bag Attributes
localKeyID: 01 00 00 00
friendlyName: CCAPI Client Certificate
Key Attributes
X509v3 Key Usage: 10
-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----
Bag Attributes
localKeyID: 01 00 00 00
friendlyName: CCAPI Client Certificate
subject=MyCompany CN/OU/O/L/ST/C
issuer=Issuer CN/OU/O/L/ST/C
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
Bag Attributes
localKeyID: 02 00 00 00
subject=Issuer CN/OU/O/L/ST/C
issuer=Issuer CN/OU/O/L/ST/C
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
首先,我想確認幾件事。
術語上明智的說法是我有一個帶有兩個證書的pem文件嗎? 如何描述私鑰部分? 這是我要連接的服務器的公鑰嗎?
其次,我需要使用keytool命令來創建一個同時包含證書和頒發證書的Java密鑰庫文件(jks)。
有人可以通過命令幫助我嗎? 我花了大量時間在谷歌上搜索,但是似乎有很多不同的用例,這使我感到困惑。
提前致謝
您沒有提到為什么要提供此文件,但是從內容來看,我認為它是用於通過HTTPS客戶端身份驗證訪問網站/服務的。 私鑰(和證書)用於針對服務器進行身份驗證。 可能需要頒發者證書才能完成到服務器上受信任的根證書的鏈(或者根本不需要)。
該文件不是以很常見的格式編碼的,基本上就是OpenSSL將PKCS#12文件寫為PEM時發生的情況。 以下OpenSSL命令將生成如下文件:
openssl pkcs12 -in keyStore.p12 -out keyStore.pem -nodes
這樣可以保留PKCS#12格式的元數據(例如ID和friendlyNames),因此您可以看到私鑰和第一個證書屬於同一類。 但這有點奇怪,因為...
您可以使用以下OpenSSL命令將其轉換回二進制PKCS#12:
openssl pkcs12 -export -in keyStore.pem -out keyStore.p12
從現在開始,您將擁有一個標准PKCS#12文件,您可以在Java軟件中直接使用它,也可以使用keytool將其轉換為JKS / JCEKS 。
嚴格來說,PEM是一個容器,可以保留各種類型的文本編碼的PKI數據以及信息文本。
引用規格 :
文本編碼以包含“ ----- BEGIN”,標簽和“ -----”的行開頭,並以包含“ ----- END”,標簽和“-”的行結尾---”。 在這兩行之間,即“封裝邊界”,是根據[RFC4648]第4節進行的base64編碼數據。 (PEM [RFC1421]將此數據稱為“封裝的文本部分”。)允許封裝邊界之前的數據,並且解析器在處理此類數據時絕不能發生故障。 此外,解析器應該忽略空格和其他非base64字符,並且必須處理不同的換行符。
PEM文件中的私鑰只是私鑰。 不需要該密鑰與文件中的任何證書有任何關系。
查看是否是證書的公鑰的私鑰的唯一方法是比較相應的公鑰。 從私鑰生成公鑰,並與證書中的公鑰進行比較。
將私鑰提取到一個單獨的文件(將各行
-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----
進入單獨的privkey.pem
文件)
在命令行中:
openssl rsa -in privkey.pem -pubout > pubkey.pub
將證書放入單獨的文件certfile.pem
(各行
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
)
再次調用openssl
:
openssl x509 -pubkey -noout -in certfile.pem > pubkey2.pem
-noout
禁止打印證書
然后檢查pubkey.pem
和pubkey2.pem
。
Java密鑰庫
在Oracle網站上有一篇文章介紹了如何將PEM證書導入JKS。 你試過了嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.