天天看点

常见证书密钥格式与标准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

继续阅读