Openssl

Openssl p12 證書儲存提取單個證書保留名稱

  • July 19, 2016

我有一個 p12 證書儲存,並且有很多證書,它們與幾個不同的站點相關,因此一個站點有很多證書。我試圖以某種方式提取它們,這將保留他們的名字,因為名字上有一個重要資訊,通過私人數據辨識證書使用者。但到目前為止我試過這個:

pkcs12 -in myDatabaseCerts.p12  -clcerts -nokeys -out publictheCerts.pem

這樣我可以將所有證書放入一個文件中。

openssl pkcs12 -in myDatabaseCerts.p12 -nocerts -out keys.pem

有沒有辦法可以將所有這些數據提取到單個文件crt和密鑰中並自動保留它們的名稱?所以我最終會得到這個列表:

John_Williams_ID_18321239.crtJohn_Williams_ID_18321239.privatekey(or .pem)

我想將 p12 拆分成這樣的文件,因為稍後我需要將每一對組裝成單獨的 p12 文件,所以基本上將整個p12儲存轉換為許多只包含一key : certificate對的單獨文件。有沒有辦法用 openssl 做到這一點?或者唯一的方法是生成帶有密鑰和證書的文件並使用一些書面腳本解析它們?

正如您所推測的那樣,當且僅當您想要的標識符是友好名稱和/或 localkeyid 時,您可以輕鬆地解析輸出openssl pkcs12拆分各個部分,因為這些是通常提供的僅有的兩部分元數據。例如,對於僅使用friendlyName 的私鑰,因為它更容易並且通常應該足夠了:

openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}' 

這需要您輸入輸入 p12 的密碼,並為每個輸出鍵輸入兩次密碼;為避免這種情況,您可以根據手冊頁添加-passin-passout選項(假設所有輸出鍵都可以使用相同的密碼)。或者如果可以不加密私鑰,添加-nodes- 如果您及時將它們放回新的(和加密的)p12 文件並安全地刪除(例如shred)應該安全的未加密文件;否則你需要非常小心,沒有未經授權的人可以查看或獲取未加密私鑰的副本。

可以對證書執行相同的操作,但您可能不需要。如果您只想按照您的描述創建單獨的 p12 文件,並且您的私鑰都不同,那麼您可以為每個私鑰做

cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12 

並且它將僅在每個輸出 p12 中放入與密鑰匹配的輸入中的一個證書allcerts

openssl或者,您可以使用 openssl編寫一個程序,而不是預先編寫的命令行,它可以執行您喜歡的任何操作:在每個包和子包中四處尋找(解密後),提取您喜歡的任何數據,修改它(也許翻譯特殊字元等),等等。不過,這是一項更大的工作。

引用自:https://unix.stackexchange.com/questions/296758