利用Openssl進行SSL證書格式轉換

         各類證書由於存儲的內容不同(如是否包含公鑰/私鑰是否加密存儲/單一證書或多證書等)、採用編碼不同(DER/BASE64)、標準不同(如PEM/PKCS),所以儘管X.509標準規定了證書內容規範,但證書文件還是五花八門。

            在實際應用中經常會要求進行證書格式轉化,比如在配置VMware Operation Manager 和Identity Manager等Linux場景下的證書服務器時要求使用的是PEM編碼格式的證書,但是很多人手上只有CER格式的證書。好在openssl對這些不同的標準都有着不錯的支持,可以用來進行不同格式證書的轉換。本文章將會以Identity Manager場景下的SSL格式轉換爲例進行演示講解

證書導出

本環境中將會有企業內的CA證書頒發機構爲其進行證書頒發,所以獲取的證書格式爲Windows易於識別的Cer或者pfx格式。首先我們將該證書導出

clip_image002

對於本環境的Identity Manager需要用到私鑰,故此選擇導出私鑰

注:一般情況下需要用到pem格式的證書都需要導出和識別證書

clip_image004

勾選導出私鑰後,文件格式只能選擇pfx

clip_image006

設置密碼

clip_image008

選擇導出路徑

clip_image010

導出完成

clip_image012

同時我們也要導出企業的根證書頒發機構的證書進行導出

clip_image014

根證書選擇不導出私鑰。注:將根證書頒發機構的證書導出是一件很危險的事情

clip_image016

證書格式我們選擇“base64編碼”

clip_image018

導出完成

clip_image020

至此我們已經獲得一個服務器證書以及一個對應的根證書頒發機構的證書,接下來就可以通過openssl進行證書格式轉換。

證書格式轉換

在安裝openssl前,請先在系統中安裝 Microsoft Visual C++ 2008 Redistributable Package (x86)。要下載軟件包,(下載地址:

https://www.microsoft.com/en-us/download/confirmation.aspx?id=29)

clip_image022

下載適用於OpenSSL x86 的 Shining Light Productions 安裝程序,,下載網址爲 Shining Light Productions。這是 OpenSSL Project 開發的軟件。下載完成後點擊安裝,默認情況下其會安裝在C盤根目錄

clip_image024

通過cmd進入安裝目錄的bin目錄

首先將pfx格式轉換爲pem格式

並通過以下命令將上述導出的證書轉換成pem格式(不含私鑰)

openssl pkcs12 -in c:\idm.pfx -clcerts -nokeys -out c:\idm.pem

(上述命令就是通過openssl將idm.pfx這個pkcs12格式的證書轉換成pem格式,其中-nokeys爲指定如無需導出私鑰,命令中需要根據自己情況制定具體的證書位置)

clip_image026

接着通過命令將私鑰也轉換成pem格式,並且在轉換輸出過程中要求輸入密碼

openssl pkcs12 -in c:\idm.pfx -nocerts -out c:\idm.key.pem

(-nocerts爲控制不轉換證書 只轉換私鑰)

clip_image028

最後再通過命令將這個pem格式的私鑰轉換成rsa

clip_image030

打開C盤 可以看到其已經生成一個pem格式的證書以及pem格式的私鑰

clip_image032

最後也要將根證書轉換成pem格式

也就是實現從CER格式轉化爲PEM的過程命令如下

openssl.exe x509 -in c:\rootca.cer -out c:\rootca.pem


當然openssl除了可以實現pfx以及Cer向pem格式轉換外, 還支持很多其他格式的轉換,基本參考如下:

  • PEM--DER/CER(BASE64--DER編碼的轉換)

       openssl x509 -outform der -in certificate.pem -out certificate.der

  • EM--P7B(PEM--PKCS#7)

       openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer

  • PEM--PFX(PEM--PKCS#12)

       openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

  • PEM--p12(PEM--PKCS#12)

       openssl pkcs12 -export -out Cert.p12 -in Cert.pem -inkey key.pem

  • CER/DER--PEM(編碼DER--BASE64)

       openssl x509 -inform der -in certificate.cer -out certificate.pem

  • P7B--PEM(PKCS#7--PEM)

       openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

  • P7B--PFX(PKCS#7--PKCS#12)

       openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
       openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

  • PFX/p12--PEM(PKCS#12--PEM)

       openssl pkcs12 -in certificate.pfx -out certificate.cer
如無需加密pem中私鑰,可以添加選項-nodes;如無需導出私鑰,可以添加選項-nokeys;

  • PEM BASE64--X.509文本格式

       openssl x509 -in Key.pem -text -out Cert.pem

  • PFX文件中提取私鑰(.key)

       openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key

  • PEM--SPC

       openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc

  • PEM--PVK(openssl 1.x開始支持)

       openssl rsa -in mycert.pem -outform PVK -pvk-strong -out mypvk.pvk

  • PEM--PVK(對於openssl 1.x之前的版本,可以下載PVK轉換器通過以下命令完成)

       pvk -in ca.key -out ca.pvk -nocrypt -topvk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章