Certificate
什麼是 Pem 文件,它與其他 OpenSSL 生成的密鑰文件格式有何不同?
我負責維護兩台 Debian 伺服器。每次我必須對安全證書做任何事情時,我都會在Google上搜尋教程並不斷努力,直到它最終奏效。
但是,在我的搜尋中,我經常遇到不同的文件格式(
.key
,.csr
,.pem
),但我一直無法很好地解釋每種文件格式的用途。我想知道ServerFault的好人是否可以就此事提供一些澄清?
SSL 已經存在了很長時間,您會認為容器格式會達成一致。你是對的,有。太多的標準,因為它發生。最後,所有這些都是以機器可讀的方式對抽象語法符號 1 (ASN.1)格式化數據進行編碼的不同方式——這恰好是定義 x509 證書的格式。
- .csr - 這是一個證書籤名請求。一些應用程序可以生成這些以送出給證書頒發機構。實際格式是RFC 2986中定義的 PKCS10 。它包括所請求證書的部分/全部關鍵細節,例如主題、組織、狀態、諸如此類,以及要簽署的證書的公鑰。這些由 CA 簽名並返回證書。返回的證書是公共證書(包括公鑰但不包括私鑰),它本身可以有多種格式。
- .pem - 在 RFC 1422 ( 1421到1424系列的一部分)中定義,這是一種容器格式,可能僅包括公共證書(例如 Apache 安裝和 CA 證書文件
/etc/ssl/certs
),或者可能包括整個證書鏈,包括公鑰、私鑰和根證書。令人困惑的是,它也可能對 CSR 進行編碼(例如,此處使用的),因為 PKCS10 格式可以轉換為 PEM。該名稱來自Privacy Enhanced Mail (PEM),這是一種失敗的安全電子郵件方法,但它使用的容器格式仍然存在,並且是 x509 ASN.1 密鑰的 base64 轉換。- .key - 這是(通常)PEM 格式的文件,僅包含特定證書的私鑰,只是一個正常名稱,而不是標準化名稱。在 Apache 安裝中,這通常位於
/etc/ssl/private
. 這些文件的權限非常重要,如果設置錯誤,有些程序會拒絕載入這些證書。- .pkcs12 .pfx .p12 - 最初由 RSA 在公鑰加密標準(縮寫為 PKCS)中定義,“12”變體最初由 Microsoft 增強,後來作為RFC 7292送出。這是一種受密碼保護的容器格式,包含公共和私有證書對。與 .pem 文件不同,此容器是完全加密的。Openssl 可以將其轉換為帶有公鑰和私鑰的 .pem 文件:
openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
不時出現的其他一些格式:
- .der - 一種以二進制編碼 ASN.1 語法的方法,.pem 文件只是 Base64 編碼的 .der 文件。OpenSSL 可以將這些轉換為 .pem (
openssl x509 -inform der -in to-convert.der -out converted.pem
)。Windows 將這些視為證書文件。預設情況下,Windows 會將證書導出為具有不同副檔名的 .DER 格式文件。喜歡…- .cert .cer .crt - 具有不同副檔名的 .pem(或很少 .der)格式的文件,Windows Explorer 將其辨識為證書,而 .pem 不是。
- .p7b .keystore - 在RFC 2315中定義為 PKCS 編號 7,這是 Windows 用於證書交換的格式。Java 本身就理解這些,並且經常將
.keystore
其用作擴展。與 .pem 樣式的證書不同,此格式具有包含證書路徑證書的定義方式。- .crl - 證書吊銷列表。證書頒發機構產生這些作為在到期前取消授權證書的一種方式。您有時可以從 CA 網站下載它們。
總之,有四種不同的方式來展示證書及其組成部分:
- PEM - 由 RFC 管理,開源軟體優先使用,因為它是基於文本的,因此不太容易出現翻譯/傳輸錯誤。它可以有多種副檔名(.pem、.key、.cer、.cert 等)
- PKCS7 - Java 使用並受 Windows 支持的開放標準。不包含私鑰材料。
- PKCS12 - 後來在 RFC 中定義的 Microsoft 私有標準,與純文字 PEM 格式相比,它提供了增強的安全性。這可以包含私鑰和證書鏈材料。Windows系統優先使用,可通過openssl自由轉換為PEM格式。
- DER - PEM 的父格式。將其視為 base64 編碼的 PEM 文件的二進製版本很有用。在 Windows 之外不經常使用。
我希望這有幫助。