X.509是# 公钥证书的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中。X.509证书可以由# CA颁发,也可以自签名产生。
1 Overview {#1-overview}
X.509证书中主要含有公钥
、身份信息
、签名信息
和有效性信息
等信息。这些信息用于构建一个验证公钥的体系,用来保证客户端得到的公钥正是它期望的公钥。
公钥
: 非对称密码中的公钥。公钥证书的目的就是为了在互联网上分发公钥。身份信息
: 公钥对应的私钥持有者的信息,域名以及用途等。签名信息
: 对公钥进行签名的信息,提供公钥的验证链。可以是CA的签名或者是自签名,不同之处在于CA证书的根证书大都内置于操作系统或者浏览器中,而自签名证书的公钥验证链则需要自己维护(手动导入到操作系统中或者再验证流程中单独提供自签名的根证书)。有效性信息
:证书的有效时间区间,以及# CRL等相关信息。
X.509证书的标准规范RFC5280中详细描述了证书的# 1.1 Encoding Format和# 1.2 Structure。
1.1 Encoding Format {#1-1-encoding-format}
- # DER格式 :
二进制
格式。 - # PEM格式 :
ASCII文本
格式。在DER格式或者其他二进制数据的基础上,使用base64编码为ASCII文本,以便于在仅支持ASCII的环境中使用二进制的DER编码的数据
。
1.2 Structure {#1-2-structure}
一个具体的X.509 v3数字证书结构大致如下 :
Certificate
Version Number
Serial Number
Signature Algorithm ID
Issuer Name
Validity period
Not Before
Not After
Subject name
Subject Public Key Info
Public Key Algorithm
Subject Public Key
Issuer Unique Identifier (optional)
Subject Unique Identifier (optional)
Extensions (optional)
...
Certificate Signature Algorithm
Certificate Signature
2 File Extension {#2-file-extension}
X.509有很多种常用的扩展名。不过这些扩展名有时候也是其他类型文件的扩展名,也就是说具有这个扩展名的文件并不一定是X.509证书。也可能只是保存了私钥的文件。
.pem
: PEM格式。.key
: PEM格式的私钥文件。.pub
: PEM格式的公钥文件。.crt
: PEM格式的# 公钥证书文件,也可能是DER。.cer
: DER格式的# 公钥证书文件,也可能是PEM。.crs
: PEM格式的# CSR文件,也可能是DER。
3 Reference {#reference}
3.1 公钥证书 {#public-key-certificate}
Public Key Certificate
=公钥证书
。
参考资料 : https://en.wikipedia.org/wiki/Public_key_certificate
3.2 CA {#certificate-authority}
CA
=Certificate Authority
=证书颁发机构
。
参考资料 : https://en.wikipedia.org/wiki/Certificate_authority
3.3 DER {#distinguished-encoding-rules}
DER
=Distinguished Encoding Rules
是# X.690标准中的一种二进制编码格式。
下面的文件是https://google.com所使用的DER编码的二进制公钥证书文件(由于是二进制,故而显示乱码)。
{{
参考资料 : https://en.wikipedia.org/wiki/X.690#DER_encoding。
3.4 PEM {#privacy-enhanced-mail}
PEM
=Privacy Enhanced Mail
=隐私增强邮件
。
PEM是一种事实上的标准文件格式,采用base64来编码密钥或证书等其他二进制数据,以便在仅支持ASCII
文本的环境中使用二进制数据
。PEM在RFC7468中被正式标准化。具体格式如下:
-----BEGIN label 1-----
base64 string...
-----END label 1-----
-----BEGIN label 2-----
base64 string...
-----END label 2-----
其中label 1
和label 2
可以有1~N
个。常用的label
有(https://tools.ietf.org/html/rfc7468#section-4):
CERTIFICATE
: 公钥证书文件 。CERTIFICATE REQUEST
: CSR请求证书文件。PRIVATE KEY
: 私钥文件。PUBLIC KEY
: 公钥文件。X509 CRL
: X509证书吊销列表文件。
下面的文件是上面的google.com.der.cer
的PEM编码形式 :
{{
参考资料 :
3.5 CSR {#certificate-signing-request}
CSR
=Certificate Signing Request
=证书签名请求
。
-----BEGIN CERTIFICATE REQUEST-----
MIIBWDCCAQcCAQAwTjELMAkGA1UEBhMCU0UxJzAlBgNVBAoTHlNpbW9uIEpvc2Vm
c3NvbiBEYXRha29uc3VsdCBBQjEWMBQGA1UEAxMNam9zZWZzc29uLm9yZzBOMBAG
ByqGSM49AgEGBSuBBAAhAzoABLLPSkuXY0l66MbxVJ3Mot5FCFuqQfn6dTs+9/CM
EOlSwVej77tj56kj9R/j9Q+LfysX8FO9I5p3oGIwYAYJKoZIhvcNAQkOMVMwUTAY
BgNVHREEETAPgg1qb3NlZnNzb24ub3JnMAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/
BAUDAwegADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgM/ADA8
AhxBvfhxPFfbBbsE1NoFmCUczOFApEuQVUw3ZP69AhwWXk3dgSUsKnuwL5g/ftAY
dEQc8B8jAcnuOrfU
-----END CERTIFICATE REQUEST-----
参考资料 : https://en.wikipedia.org/wiki/Certificate_signing_request
3.6 CRL {#certificate-revocation-list}
CRL
=Certificate Revocation List
=证书吊销列表
。
-----BEGIN X509 CRL-----
MIIB9DCCAV8CAQEwCwYJKoZIhvcNAQEFMIIBCDEXMBUGA1UEChMOVmVyaVNpZ24s
IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsT
PXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3JwLiBieSBSZWYu
LExJQUIuTFREKGMpOTgxHjAcBgNVBAsTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDEm
MCQGA1UECxMdRGlnaXRhbCBJRCBDbGFzcyAxIC0gTmV0c2NhcGUxGDAWBgNVBAMU
D1NpbW9uIEpvc2Vmc3NvbjEiMCAGCSqGSIb3DQEJARYTc2ltb25Aam9zZWZzc29u
Lm9yZxcNMDYxMjI3MDgwMjM0WhcNMDcwMjA3MDgwMjM1WjAjMCECEC4QNwPfRoWd
elUNpllhhTgXDTA2MTIyNzA4MDIzNFowCwYJKoZIhvcNAQEFA4GBAD0zX+J2hkcc
Nbrq1Dn5IKL8nXLgPGcHv1I/le1MNo9t1ohGQxB5HnFUkRPAY82fR6Epor4aHgVy
b+5y+neKN9Kn2mPF4iiun+a4o26CjJ0pArojCL1p8T0yyi9Xxvyc/ezaZ98HiIyP
c3DGMNR+oUmSjKZ0jIhAYmeLxaPHfQwR
-----END X509 CRL-----
参考资料 : https://en.wikipedia.org/wiki/Certificate_revocation_list
3.7 X.690 {#x690}
X.690是一个ITU-T标准,规定了几种ASN.1编码格式:
BER
=Basic Encoding Rules
: https://en.wikipedia.org/wiki/X.690#BER_encoding
CER
=Canonical Encoding Rules
: https://en.wikipedia.org/wiki/X.690#CER_encoding
DER
=Distinguished Encoding Rules
: https://en.wikipedia.org/wiki/X.690#DER_encoding
参考资料 : https://en.wikipedia.org/wiki/X.690
3.8 ASN.1 {#abstract-syntax-notation-1}
ASN.1
=Abstract Syntax Notation 1
=抽象标记语法1
。
参考资料 : https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
4 参考
本文首发于:https://linianhui.github.io/information-security/05-x.509/