天天看點

常見證書密鑰格式與标準PEMASN.1DER編碼X.509PKCSPKIJKSSEC證書密鑰字尾推薦參考

作為一個加密開發者,一定要熟悉證書密鑰的各種格式、編碼與标準。

PEM

PEM(Privacy-Enhanced Mail,隐私增強郵件) 是一種事實上的檔案格式,用于存儲和發送加密密鑰、證書和其他資料,它基于一組定義“隐私增強郵件”的 1993 IETF标準。

許多密碼學标準使用ASN.1來定義它們的資料結構,并使用可分辨編碼規則(DER) 來序列化這些結構。

PEM 格式通過使用base64對二進制資料進行編碼解決了這個問題。PEM 還定義了一個單行頁眉,由 -----BEGIN, a label, and -----組成,以及單行頁腳,由-----END, a label, and -----組成。标簽确定編碼消息的類型。常用标簽包括 CERTIFICATE, CERTIFICATE REQUEST, PRIVATE KEY and X509 CRL。

-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
           

PEM 資料通常存儲在帶有“.pem”字尾,“.cer”或“.crt”字尾(用于證書)或“.key”字尾(用于公鑰或私鑰)的檔案中。

ASN.1

Abstract Syntax Notation One ( ASN.1 ) 是一種标準接口描述語言,用于定義可以跨平台方式序列化和反序列化的資料結構。它廣泛用于電信和計算機網絡,尤其是密碼學。

DER編碼

DER(Distinguished Encoding Rules,可分辨編碼規則)是BER的一種受限變體,用于為ASN.1描述的資料結構生成明确的傳輸文法。

X.509

在密碼學中,X.509是定義公鑰證書格式的國際電信聯盟 (ITU)标準。 X.509 證書用于許多 Internet 協定,包括作為HTTPS基礎的TLS/SSL,浏覽網頁的安全協定。它們還用于離線應用程式,例如電子簽名。

證書的結構中Subject Public Key Info 字段用來包含公鑰。

證書檔案的擴充名

X.509 證書有幾種常用的檔案擴充名。其中一些擴充還用于其他資料,例如私鑰。

  • .pem– (隐私增強電子郵件)Base64編碼的DER證書,包含在-----BEGIN CERTIFICATE-----和之間-----END CERTIFICATE-----
  • .cer, .crt, .der– 通常采用二進制DER形式,但 Base64 編碼的證書也很常見(見.pem上文)
  • .p7b, .p7c–沒有資料的PKCS#7 SignedData 結構,隻有證書或CRL
  • .p12– PKCS#12,可能包含證書(公鑰)和私鑰(受密碼保護)
  • .pfx– PFX,PKCS#12 的前身(通常包含 PKCS#12 格式的資料,例如,在IIS中生成的 PFX 檔案)

PKCS#7是用于簽名或加密(正式稱為“封裝”)資料的标準。由于需要證書來驗證簽名資料,是以可以将它們包含在 SignedData 結構中。檔案.P7C是退化的 SignedData 結構,沒有任何資料要簽名。

PKCS#12從個人資訊交換(PFX) 标準演變而來,用于在單個檔案中交換公共和私有對象。

PKCS

在密碼學中,PKCS代表“公鑰密碼學标準”。這些是由RSA Security LLC 從 1990 年代初開始設計和釋出的一組公鑰加密标準。

Version Name Comments
PKCS #1 2.2 RSA Cryptography Standard[1] 請參閱 RFC 8017。定義 RSA 公鑰和私鑰(ASN.1 - 以明文編碼)的數學屬性和格式,以及用于執行 RSA 加密、解密以及生成和驗證簽名的 基本算法和編碼/填充方案。
PKCS #7 1.5 Cryptographic Message Syntax Standard[5] 請參閱 RFC 2315。用于在PKI下簽名和/或加密消息。也用于證書傳播(例如作為對 PKCS #10 消息的響應)。形成了S/MIME的基礎,截至 2010 年,它基于 RFC 5652,一種更新的加密消息文法标準(CMS)。常用于單點登入。
PKCS #8 1.2 Private-Key Information Syntax Standard[6] 請參閱 RFC 5958。用于攜帶私有證書密鑰對(加密或未加密)。
PKCS #10 1.7 Certification Request Standard[8] 請參閱 RFC 2986。發送到證書頒發機構以請求公鑰證書的消息格式。請參閱證書簽名請求。
PKCS #12 1.1 Personal Information Exchange Syntax Standard[11]

請參閱 RFC 7292。定義了一種檔案格式,通常用于存儲私鑰和随附的公鑰證書,并使用基于密碼的對稱密鑰進行保護。PFX 是 PKCS #12 的前身。

這種容器格式可以包含多個嵌入對象,例如多個證書。通常使用密碼保護/加密。可用作Java KeyStore的格式并在 Mozilla Firefox 中建立用戶端身份驗證證書。可供Apache Tomcat使用。

PKI

公鑰基礎設施( PKI,Public key infrastructure )是建立、管理、分發、使用、存儲和撤銷數字證書以及管理公鑰加密所需的一組角色、政策、硬體、軟體和程式。

JKS

Java KeyStore ( JKS ) 是安全證書(授權證書或公鑰證書 )加上相應私鑰的存儲庫,例如在TLS 加密中使用。

Java開發工具包在檔案夾jre/lib/security中維護一個名為cacerts的CA密鑰庫檔案。JDK 提供了一個名為keytool ([1])的工具來操作密鑰庫。keytool沒有從密鑰庫中提取私鑰的功能,但可以使用第三方工具,如 jksExportKey、CERTivity、Portecle和 KeyStore Explorer。

SEC

SM2私鑰輸出基于SEC1标準。

SEC(Standards for Efficient Cryptography,高效密碼學标準)。

SEC 1:橢圓曲線密碼術,2.0 版

This document specifies public-key cryptographic schemes based on elliptic curve cryptography (ECC). In particular, it specifies:

• signature schemes;

• encryption and key transport schemes; and

• key agreement schemes.

It also describes cryptographic primitives which are used to construct the schemes, and ASN.1 syntax for identifying the schemes.

The schemes are intended for general application within computer and communications systems.

證書密鑰字尾推薦

結合本機證書密鑰檔案的多少,給出以下推薦。

  1. x509 證書字尾推薦 .crt
  1. pem 密鑰字尾推薦 .pem
  1. 普通 密鑰字尾推薦 .key
# 推薦示例
azure.crt
azure_prikey.pem
azure_pubkey.pem
azure_prikey_pkcs1.pem
azure_prikey_pkcs8.pem
azure_pri.key
azure_pub.key
           

參考

https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail

https://en.wikipedia.org/wiki/ASN.1

https://en.wikipedia.org/wiki/X.509

https://en.wikipedia.org/wiki/PKCS

https://en.wikipedia.org/wiki/Public_key_infrastructure

https://en.wikipedia.org/wiki/Java_KeyStore

繼續閱讀