Tls

.pem、.csr、.key、.crt 和其他此類文件副檔名之間有什麼區別?

  • July 23, 2021

我是 SSL / TLS 的新手,我想使用 OpenSSL 工具包。

做什麼.pem.csr代表什麼?

我知道那.key是私鑰,.crt也是公鑰。

文件副檔名可以(非常)鬆散地視為一種類型系統。

  • .pem代表PEM,Privacy Enhanced Mail;它只是表示帶有頁眉和頁腳行的 base64 編碼。郵件傳統上只處理文本,而不是大多數加密數據的二進制,因此需要某種編碼來使內容成為郵件消息本身的一部分(而不是編碼附件)。PEM 的內容在頁眉和頁腳行中有詳細說明——.pem它本身並沒有指定數據類型——就像.xml並且.html不指定文件的內容一樣,它們只是指定了特定的編碼
  • .key可以是任何類型的密鑰,但通常是私鑰 - OpenSSL 可以將所有算法(RSA、DSA、EC)的私鑰包裝在通用和標準 PKCS#8 結構中,但它也支持單獨的“遺留”結構對於每種算法,儘管文件已將 PKCS#8 標記為優越近 20 年,但兩者仍然被廣泛使用;兩者都可以儲存為 DER(二進制)或 PEM 編碼,並且 PEM 和 PKCS#8 DER 都可以使用基於密碼的加密來保護密鑰或保持不加密;
  • .csr或者.req或有時代表PKCS#10.p10中定義的證書籤名請求;它包含證書頒發機構為請求者創建和簽署證書所需的公鑰和通用名稱等資訊,編碼可以是 PEM 或 DER(這是 ASN.1 指定結構的二進制編碼);
  • .crt.cer僅代表證書,通常是X509v3證書,同樣編碼可以是 PEM 或 DER;證書包含公鑰,但它包含更多資訊(當然,最重要的是證書頒發機構對數據和公鑰的簽名)。

您還會發現很多其他擴展:

  • .p8,.pkcs8是私鑰。PKCS#8 定義了一種使案例如密碼來加密私鑰的方法。但是,通常只使用內部未加密的 PKCS#8 結構(它只是定義了密鑰的類型)。然後,內部結構可以例如包含用於 RSA 的 PKCS#1 格式化私鑰或用於橢圓曲線的 SEC1 私鑰。

[dave_thompson:X9.62 定義了 EC公鑰和參數(曲線)的常用格式,但我很確定不是私鑰,雖然我不會花錢去驗證;對於公鑰和參數,SEC1 引用了 X9.62,而 rfc5480 引用了 SEC1 和 X9.62,但對於私鑰,rfc5915 只引用了 SEC1,它什麼也沒引用。我還要說:通常不傳輸,但仍然相當普遍地使用 PEM 編碼,因為許多使用單獨的密鑰文件或部分的程序(通常通過 OpenSSL 庫)需要或更喜歡 PEM:Apache httpd、nginx、haproxy、nodejs、python、 wget 和一些捲曲;Apache tomcat 也取決於版本和選項。但是 Java 本身使用 PKCS#8 DER,未加密。]

  • .p12或者.pfxPKCS#12定義的密鑰庫,通常受密碼保護。它可以包含受信任的證書、私鑰及其證書鏈,還可以包含其他資訊,例如密鑰和(非常罕見的)其他個人資訊;.p12通常是二進制/DER編碼。PKCS#12 有很多選項和擴展(即屬性 OID),支持不同,因此假設每個 P12 文件都可以在使用(某些)P12 文件的任何東西中工作是不安全的。
  • .crl是在X.509v3證書規範中定義的證書撤銷列表,通常也是 DER 編碼的。
  • .p7b或者.p7c是一種特殊的PKCS#7/CMS消息:不包含數據且未簽名的 SignedData,僅用於方便地處理一組證書和/或 CRL。特別是,它通常被用作處理構成“鏈”或“捆綁”的證書的一種方式,這些證書作為一個單一的、定義明確的單元。存在其他類型的 PKCS#7/CMS 消息,但使用較少,並且可能具有類似.p7or的副檔名.p7m,除了作為特殊情況的分離簽名通常是.p7s. 此外, S/MIME位於 CMS 之上:S/MIME 消息實際上是以 MIME 格式包裝的 CMS 消息,因此通常該消息不是文件副檔名。

請注意,不是每個人都可以使用相同的擴展 - 沒有官方註冊或類似的東西。您最好file先使用 POSIX 命令行實用程序。


還有一些相對常見的專有格式。

  • .jks代表 Java 密鑰庫。它可用於儲存私鑰及其證書鏈(根 CA、中間 CA、葉證書或單個自簽名證書)、其他方的證書(通常但不一定是 CA)以形成信任庫,或兩者兼而有之. JKS 格式(如 Java KeyStoreAPI)在技術上是不可知的,並且可以使用已安裝的加密提供程序為其提供CertificateFactory對象的任何類型的證書,但實際上唯一CertificateFactory實現的是 X.509(或 PKIX)和 Java 中的主要應用程序對於密鑰庫 - 程式碼簽名、S/MIME、XML/SOAP 和 SSL/TLS - 僅使用 X.509。.jks密鑰庫受密碼保護,使用 Sun 在彈藥清單時代創建的專有(弱)密碼,但自 2017 年以來已被棄用支持帶有過渡支持的 PKCS#12

[dave_thompson:JSON 格式 JWS/JWE/JWT/JWK 現在在通信中很常見(不是專有的),但 IME 很少儲存在不同的文件中]

引用自:https://crypto.stackexchange.com/questions/43697