簡體   English   中英

將具有多個證書的pem轉換為Java密鑰庫

[英]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),因此您可以看到私鑰和第一個證書屬於同一類。 但這有點奇怪,因為...

  1. 私鑰不再加密(不再加密)。
  2. 該格式僅對使用OpenSSL庫的軟件進行進一步處理有用,而在Java或Microsoft(IIS,.NET)世界中則無效。 二進制PKCS#12文件在所有環境中都可以使用。

您可以使用以下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文件中的私鑰只是私鑰。 不需要該密鑰與文件中的任何證書有任何關系。

查看是否是證書的公鑰的私鑰的唯一方法是比較相應的公鑰。 從私鑰生成公鑰,並與證書中的公鑰進行比較。

  1. 從私鑰獲取公鑰

將私鑰提取到一個單獨的文件(將各行

-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----

進入單獨的privkey.pem文件)

在命令行中:

openssl rsa -in privkey.pem -pubout > pubkey.pub
  1. 從證書獲取公鑰

將證書放入單獨的文件certfile.pem (各行

-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----

再次調用openssl

openssl x509 -pubkey -noout -in certfile.pem > pubkey2.pem

-noout禁止打印證書

然后檢查pubkey.pempubkey2.pem

Java密鑰庫

在Oracle網站上有一篇文章介紹了如何將PEM證書導入JKS。 你試過了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM