資安證書格式解析:從*.pem到*.pfx,完整指南和轉換方法

文章最後更新於 2024 年 1 月 1 日

資安證書是用於確保網站、應用程式或系統的安全性和可信度的數位憑證。它們包含了數位加密金鑰,用於加密和解密網路通訊,並且可以證明數據的真實性和完整性。在資安領域中,常見的檔案格式有以下幾種:

*.pem (Privacy-Enhanced Mail)

PEM 是一種基於 ASCII 的檔案格式,主要用於傳輸加密金鑰和證書。PEM 格式可以存儲 X.509 證書、私有金鑰和中間 CA (Certificate Authority) 的證書。這種格式常用於 Apache 和 Nginx 伺服器等環境。

*.crt (Certificate)

CRT 格式是 X.509 證書的標準檔案格式。它通常包含公開金鑰和簽發者的數據,以證明證書的有效性。CRT 檔案通常被用於網站伺服器和瀏覽器之間的 SSL/TLS 通訊。

*.cer (Certificate)

CER 格式也是 X.509 證書的一種常見檔案格式,與 CRT 格式相似。主要區別在於擴展名的命名慣例,CER 檔案通常被用於 Windows 系統。

*.key (Private Key)

KEY 檔案通常包含私有金鑰,用於數據加密和解密。私有金鑰應該保密,僅限應用程式或系統使用。常見的私有金鑰檔案格式包括 PEM 和 DER (Distinguished Encoding Rules)。

*.jks (Java KeyStore)

JKS 格式是 Java 平台上常用的金鑰存儲格式。它可以包含一個或多個證書和私有金鑰,並使用密碼保護。JKS 檔案通常用於 Java 應用程式和服務器的金鑰管理。

以下是使用keytool命令來讀取JKS檔案中的證書的步驟:

keytool -list -v -keystore truststore.jks -storepass yourTruststorePassword

請替換以下參數的值:

  • -list:用於列出Keystore中的證書。
  • -v:用於顯示詳細信息。
  • -keystore truststore.jks:指定要讀取的JKS檔案的路徑。
  • -storepass yourTruststorePassword:指定JKS檔案的密碼(請替換為實際的密碼)。

執行此命令後,它應該會顯示存儲在truststore.jks中的證書的詳細信息,包括證書的別名、所有者、有效期等。如果您需要讀取特定別名的證書,您可以在命令中使用-alias選項,並指定證書的別名。

*.pfx (Personal Information Exchange)

PFX 格式是一種個人信息交換格式,可以用於將私有金鑰和證書捆綁在一起。PFX 檔案通常使用密碼保護,用於將證書導入到 Windows 平台的應用程式或服務器。

轉換這些資安證書格式之間,您可以使用不同的工具和命令根據您所使用的作業系統和工具,以下是一些常見的轉換方法:

  • PEM 轉換:
    • 將 PEM 轉換為 CRT:
openssl x509 -outform der -in certificate.pem -out certificate.crt
  • 將 PEM 轉換為 KEY:
openssl rsa -in privatekey.pem -out privatekey.key
  • CRT/CER 轉換:
    • 將 CRT/CER 轉換為 PEM:
openssl x509 -inform der -in certificate.cer -out certificate.pem
  • KEY 轉換:
    • 將 KEY 轉換為 PEM:
openssl rsa -in privatekey.key -out privatekey.pem
  • JKS 轉換:

當涉及到不同格式的 Java KeyStore(JKS)檔案之間的轉換時,你可以使用 Java 的 keytool 工具來執行這些操作。以下是展示如何轉換不同格式的 JKS 檔案的示範:

  1. JKS 轉換為 PKCS12
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -srcstoretype JKS -deststoretype PKCS12

上述命令將名為 keystore.jks 的 JKS 檔案轉換為 PKCS12 格式的 keystore.p12 檔案。

  1. PKCS12 轉換為 JKS
keytool -importkeystore -srckeystore keystore.p12 -destkeystore keystore.jks -srcstoretype PKCS12 -deststoretype JKS

上述命令將名為 keystore.p12 的 PKCS12 檔案轉換為 JKS 格式的 keystore.jks 檔案。

  1. JKS 轉換為 PEM

首先,將 JKS 檔案轉換為 PKCS12 格式,然後再將 PKCS12 轉換為 PEM 格式。

# JKS 轉換為 PKCS12
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -srcstoretype JKS -deststoretype PKCS12

# PKCS12 轉換為 PEM
openssl pkcs12 -in keystore.p12 -out keystore.pem -nodes

上述命令將名為 keystore.jks 的 JKS 檔案轉換為 PKCS12 格式的 keystore.p12 檔案,然後使用 OpenSSL 將 PKCS12 檔案轉換為 PEM 格式的 keystore.pem 檔案。

  1. PEM 轉換為 JKS

首先,將 PEM 檔案轉換為 PKCS12 格式,然後再將 PKCS12 轉換為 JKS 格式。

# PEM 轉換為 PKCS12
openssl pkcs12 -export -in keystore.pem -out keystore.p12 -name "alias"

# PKCS12 轉換為 JKS
keytool -importkeystore -srckeystore keystore.p12 -destkeystore keystore.jks -srcstoretype PKCS12 -deststoretype JKS

上述命令將名為 keystore.pem 的 PEM 檔案轉換為 PKCS12 格式的 keystore.p12 檔案,然後使用 keytool 將 PKCS12 檔案轉換為 JKS 格式的 keystore.jks 檔案。

這些命令將幫助你在不同格式的 JKS 檔案之間進行轉換。請確保替換命令中的實際檔案名稱和路徑,並根據你的需求進行調整。

  • PFX 轉換:
    • 將 PFX 轉換為 PEM:
openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

5. PEM轉為PFX

將PEM檔案轉換為PFX檔案通常涉及到將私鑰、證書以及CA根證書合併成單一的PFX(也被稱為PKCS#12)檔案。以下是一個簡單的步驟說明:

  • 準備PEM檔案:你需要有PEM格式的私鑰和證書檔案。有時,CA根證書(和/或中間證書)也可能需要包含在PFX檔案中。
  • 使用OpenSSL合併檔案:OpenSSL是一個常用的工具,可以用來執行這種轉換。如果你還沒有安裝OpenSSL,你需要先安裝它。
  • 執行轉換命令:一旦準備好所需的檔案和工具,你可以使用以下命令將PEM檔案轉換為PFX檔案:
openssl pkcs12 -export -out certificate.pfx -inkey privatekey.pem -in certificate.pem -certfile CACert.pem

這裡:

  • certificate.pfx 是你想要創建的PFX檔案的名稱。
  • privatekey.pem 是你的私鑰檔案。
  • certificate.pem 是你的證書檔案。
  • CACert.pem 是CA根證書檔案(如果需要)。
  • 設定密碼:執行上述命令時,系統會提示你設定一個密碼,這個密碼用於保護PFX檔案。
  • 檢查生成的PFX檔案:轉換完成後,檢查生成的PFX檔案以確保它包含了所需的所有元素。

以上是一些常見的轉換方法,但根據您的具體需求和使用情境,可能會有其他特定工具和命令可用。

補充部分: 除了上述提到的格式,還有一些其他常見的資安證書格式,例如:

*.p7b (PKCS#7)

PKCS#7 是一種加密的語法標準,常用於簽名和加密數據。P7B 檔案通常包含數個證書,用於將它們簽名、簽發者和中間 CA 一起封裝在一個檔案中。

*.p12 (PKCS#12)

PKCS#12 是一種個人信息交換的標準,它可以捆綁私有金鑰、證書和其他相關憑證。P12 檔案通常使用密碼保護,可用於將證書和私有金鑰導入到不同的應用程式和平台中。

轉換這些格式之間的方法,大多數情況下,可以使用 OpenSSL 工具或特定應用程式的功能來執行。請注意,在進行任何轉換之前,請確保您具有原始檔案的正確副本,並遵循相關的安全最佳實踐。

關於作者

卡哥
卡哥
我是Oscar (卡哥),前Yahoo Lead Engineer、高智商同好組織Mensa會員,超過十年的工作經驗,服務過Yahoo關鍵字廣告業務部門、電子商務及搜尋部門,喜歡彈吉他玩音樂,也喜歡投資美股、虛擬貨幣,樂於與人分享交流!

如果對文章內容有任何問題,歡迎在底下留言讓我知道。
如果你喜歡我的文章,可以按分享按鈕,讓更多的人看見我的文章。

網友留言