X.509 和 pem 的区别

Difference between X.509 and pem

在密码学中,X.509 和 pem 有什么区别?

X.509 格式可以包含私钥吗?私钥可以是pem格式吗?

X.509是一系列标准,而PEM只是文件中的X.509对象表示(编码)。从字面上看,任何数据都可以用 PEM 格式表示。任何可以转换为字节数组的东西(任何东西都可以,因为 RAM 是一个非常大的字节数组)都可以用 PEM 格式表示。

所有 X.509 对象都是可传输的,并使用抽象语法表示法一 (ASN.1) 作为字节数组表示。字节数组在通过网络传输时非常有用,但在存储在某处时并不总是有用。另一件事是,如果不进行彻底的内容分析,您将无法轻易确定 X.509 对象类型。

PEM 代表 Privacy Enhanced Mail 并在 RFC1421 中定义。虽然 PEM 的开发目的有点不同,但该标准定义了 PEM 表示,尤其是在需要仅使用可打印字符来表示不可打印字符时。在密码学中,PEM 仅与 X.509 对象表示相关联。此外,PEM 还提供了额外的数据来识别嵌入对象。

ASN.1 形式的 X.509 对象是字节数组,例如(表示字节的八位字节系列):

3a 20 63 65 72 74 6c 69  62 5c 6c 64 61 70 2e 63
70 70 28 32 31 33 31 29  3a 20 6c 64 61 70 65 72

由于十六进制无法用于表示二进制数据,因为它需要 space 两倍于原始数据,因此使用了更高效的 Base64 编码。并使用特殊的页眉和页脚来表示嵌入对象类型:

X.509 证书

-----BEGIN CERTIFICATE-----
MIIEITCCA+CgAwIBAgIUKMmxmDbjbHqt+Yzwj5lflBxuQwEwCQYHKoZIzjgEAzAjMSEwHwYDVQQD
ExhUb2tlbiBTaWduaW5nIFB1YmxpYyBLZXkwHhcNMTIxMTE2MTgzODMwWhcNMTIxMTIzMTgzODMw
WjAtMSswKQYDVQQDHiIAYgBiADEANAAxADkAYQAyAGMAZgBjADEAZQAwADAAOAAAMIGfMA0GCSqG
<...>
-----END CERTIFICATE-----

X.509 证书吊销列表

-----BEGIN X509 CRL-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END X509 CRL-----

X.509 证书请求

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END NEW CERTIFICATE REQUEST-----

PKCS#1 私钥

-----BEGIN RSA PRIVATE KEY-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END RSA PRIVATE KEY-----

PKCS#8 私钥

-----BEGIN PRIVATE KEY-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END PRIVATE KEY-----

等等。