X.509和pem之间的区别

Vil*_*oja 3 cryptography rsa x509 private-key

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

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

Cry*_*t32 10

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还提供了识别嵌入对象的附加数据.

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

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
Run Code Online (Sandbox Code Playgroud)

由于十六进制对于表示二进制数据没有用,因为它需要的空间是原始数据的两倍,因此使用了更高效的Base64编码.并且特殊的页眉和页脚用于表示嵌入的对象类型:

X.509证书

-----BEGIN CERTIFICATE-----
MIIEITCCA+CgAwIBAgIUKMmxmDbjbHqt+Yzwj5lflBxuQwEwCQYHKoZIzjgEAzAjMSEwHwYDVQQD
ExhUb2tlbiBTaWduaW5nIFB1YmxpYyBLZXkwHhcNMTIxMTE2MTgzODMwWhcNMTIxMTIzMTgzODMw
WjAtMSswKQYDVQQDHiIAYgBiADEANAAxADkAYQAyAGMAZgBjADEAZQAwADAAOAAAMIGfMA0GCSqG
<...>
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

X.509证书撤销清单

-----BEGIN X509 CRL-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END X509 CRL-----
Run Code Online (Sandbox Code Playgroud)

X.509证书申请

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END NEW CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)

PKCS#1私钥

-----BEGIN RSA PRIVATE KEY-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

PKCS#8私钥

-----BEGIN PRIVATE KEY-----
MIIDBjCCAm8CAQAwcTERMA8GA1UEAxMIcXV1eC5jb20xDzANBgNVBAsTBkJyYWlu
czEWMBQGA1UEChMNRGV2ZWxvcE1lbnRvcjERMA8GA1UEBxMIVG9ycmFuY2UxEzAR
BgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqGSIb3DQEBAQUA
<...>
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

等等.