公钥证书编码解读
来源:互联网 发布:淘宝网店转让出售 编辑:程序博客网 时间:2024/04/29 03:47
[TOC]
一、文件编码
PEM (Privacy Enhancement Message),定义见 RFC1421
是一种基于 base64 的编码格式,常见于 linux/unix 下的证书编码
结构组成 == {header} body {tail}
示例
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMYfnvWtC8Id5bPKae5yXSxQTt+Zpul6AnnZWfI2TtIarvjHBFUtXRo96y7hoL4VWOPKGCsRqMFDkrbeUjRrx8iL914/srnyf6sh9c8Zk04xEOpK1ypvBz+Ks4uZObtjnnitf0NBGdjMKxveTq+VE7BWUIyQjtQ8mbDOsiLLvh7wIDAQAB-----END PUBLIC KEY-----
DER (Distinguished Encoding Rules) , 定义见维基百科-ASN.1.DER
是来自ASN.1 体系的一种二进制编码格式,常用于 windows/mac 的证书编码
编码方式 == DER uses a pattern of type-length-value triplets
二、公钥标准
PKCS (Public Key Cryptography Standards),定义见维基百科-PKCS
是一套公钥密码学标准,其定义范围涵盖了证书签名、加密算法、填充模式及校验流程等。
常见PKCS标准
三、RSA 密钥
RSA 公钥编码
PublicKey-PKCS#1-PEM
-----BEGIN RSA PUBLIC KEY-----BASE64 ENCODED DATA-----END RSA PUBLIC KEY-----
PublicKey-PKCS#1-DER
RSAPublicKey ::= SEQUENCE { modulus INTEGER, -- n publicExponent INTEGER -- e}
PublicKey-PKCS#8-PEM
-----BEGIN PUBLIC KEY-----BASE64 ENCODED DATA-----END PUBLIC KEY-----
PublicKey-PKCS#8-DER
PublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, PublicKey BIT STRING}AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL}
对于RSA公钥来说,OID就是(1.2.840.113549.1.1.1)
RSA 私钥编码
PrivateKey-PKCS#1-PEM
-----BEGIN RSA PRIVATE KEY-----BASE64 ENCODED DATA-----END RSA PRIVATE KEY-----
PrivateKey-PKCS#1-DER
RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL}
PrivateKey-PKCS#8-PEM
-----BEGIN PRIVATE KEY-----BASE64 ENCODED DATA-----END PRIVATE KEY-----
PrivateKey-PKCS#8-DER
PrivateKeyInfo ::= SEQUENCE { version Version, algorithm AlgorithmIdentifier, PrivateKey OCTET STRING}AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL}
私钥文件可采用加密方式存储,加密后的格式:
EncryptedPrivateKey-PKCS#8-PEM
-----BEGIN ENCRYPTED PRIVATE KEY-----BASE64 ENCODED DATA-----END ENCRYPTED PRIVATE KEY-----
Encrypted-PrivateKey-PKCS#8-DER
EncryptedPrivateKeyInfo ::= SEQUENCE { encryptionAlgorithm EncryptionAlgorithmIdentifier, encryptedData EncryptedData}EncryptionAlgorithmIdentifier ::= AlgorithmIdentifierEncryptedData ::= OCTET STRING
四、证书
X.509 证书,维基百科-X.509,是目前流行的公钥证书标准。
一个 X.509 证书包含了一个公钥和对应的实体名(hostname/organization/individual);证书通常由证书认证机构签名或自签名;当证书持有者被另外一方信任时(通过公钥签名验证),两者便可以基于公钥算法建立安全传输通道。
证书结构
CertificateVersion NumberSerial NumberSignature Algorithm IDIssuer NameValidity periodNot BeforeNot AfterSubject nameSubject Public Key InfoPublic Key AlgorithmSubject Public KeyIssuer Unique Identifier (optional)Subject Unique Identifier (optional)Extensions (optional)...Certificate Signature AlgorithmCertificate Signature
主要字段
|字段|描述|
|-|-|
|版本号 |指出该证书使用了哪种版本的X.509标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息 |
|序列号 |标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符 |
|签名算法标识符 |用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1-RSA |
|颁发者名称 |证书颁发者的可识别名(DN),是签发该证书的实体唯一的CA的X.500名字 |
|有效期限 |证书起始日期和时间以及终止日期和时间 |
|主体名 |证书持有人的唯一标识符(或称DN-distinguished name) |
|公钥信息 |包括证书持有人的公钥、算法 |
|颁发者唯一标识符 |标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
|主体唯一标识符 |标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
|颁发者的数字签名 |这是使用颁发者私钥生成的签名,以确保这个证书在发放之后没有被撰改过 |
|扩展信息 |.. |
扩展字段
|字段|描述|
|-|-|
|发行者密钥标识符 |证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥 |
|密钥使用 |一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于 SSL |
|CRL分布点 |指明CRL的分布地点 |
|私钥的使用期 |指明证书中与公钥相联系的私钥的使用期限,它也有Not Before和Not After组成。若此项不存在时,公私钥的使用期是一样的 |
|证书策略 |由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关 |
|策略映射 |表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在 |
|主体别名 |指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的 |
|颁发者别名 |指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段 |
|主体目录属性 |指出证书拥有者的一系列属性。可以使用这一项来传递访问控制信息 |
样例-维基百科证书
Certificate: Data: Version: 3 (0x2) Serial Number: 10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6 Signature Algorithm: sha256WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2 Validity Not Before: Nov 21 08:00:00 2016 GMT Not After : Nov 22 07:59:59 2017 GMT Subject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:c9:22:69:31:8a:d6:6c:ea:da:c3:7f:2c:ac:a5: af:c0:02:ea:81:cb:65:b9:fd:0c:6d:46:5b:c9:1e: ed:b2:ac:2a:1b:4a:ec:80:7b:e7:1a:51:e0:df:f7: c7:4a:20:7b:91:4b:20:07:21:ce:cf:68:65:8c:c6: 9d:3b:ef:d5:c1 ASN1 OID: prime256v1 X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Agreement Authority Information Access: CA Issuers - URI:http://secure.globalsign.com/cacert/gsorganizationvalsha2g2r1.crt OCSP - URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2 X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.4146.1.20 CPS: https://www.globalsign.com/repository/ Policy: 2.23.140.1.2.2 X509v3 Basic Constraints: CA:FALSE X509v3 CRL Distribution Points: Full Name: URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl X509v3 Subject Alternative Name: DNS:*.wikipedia.org, DNS:*.m.mediawiki.org, DNS:*.m.wikibooks.org, DNS:*.m.wikidata.org, DNS:*.m.wikimedia.org, DNS:*.m.wikimediafoundation.org, DNS:*.m.wikinews.org, DNS:*.m.wikipedia.org, DNS:*.m.wikiquote.org, DNS:*.m.wikisource.org, DNS:*.m.wikiversity.org, DNS:*.m.wikivoyage.org, DNS:*.m.wiktionary.org, DNS:*.mediawiki.org, DNS:*.planet.wikimedia.org, DNS:*.wikibooks.org, DNS:*.wikidata.org, DNS:*.wikimedia.org, DNS:*.wikimediafoundation.org, DNS:*.wikinews.org, DNS:*.wikiquote.org, DNS:*.wikisource.org, DNS:*.wikiversity.org, DNS:*.wikivoyage.org, DNS:*.wiktionary.org, DNS:*.wmfusercontent.org, DNS:*.zero.wikipedia.org, DNS:mediawiki.org, DNS:w.wiki, DNS:wikibooks.org, DNS:wikidata.org, DNS:wikimedia.org, DNS:wikimediafoundation.org, DNS:wikinews.org, DNS:wikiquote.org, DNS:wikisource.org, DNS:wikiversity.org, DNS:wikivoyage.org, DNS:wiktionary.org, DNS:wmfusercontent.org, DNS:wikipedia.org X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Subject Key Identifier: 28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36 X509v3 Authority Key Identifier: keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C Signature Algorithm: sha256WithRSAEncryption 8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35: 66:5e:62:d5:01:e2:63:47:70:cb:6d:1b:17:b0:f5:4d:11:e4: ad:94:51:c5:5e:72:03:b0:d5:ab:18:eb:b5:3a:08:a8:73:95: f3:7f:41:1a:28:7b:45:7c:83:2e:d3:14:95:d8:d5:d1:5f:99: 4b:0c:f4:c3:9b:0b:4f:e9:49:f4:2c:b5:ae:c3:1d:7d:2a:80: f6:70:29:4c:0c:e6:e0:cb:88:8a:8a:02:ee:a5:d1:73:c2:93: 58:24:ff:43:1b:e3:fd:7b:aa:f0:15:0c:60:52:8f:21:7d:87: 3a:14:fa:81:41:00:60:4f:96:9a:62:94:58:de:cb:15:5c:3c: f4:c1:4d:33:e3:ff:39:fe:28:fb:b0:41:3e:d2:8a:11:d1:06: 01:28:74:7d:71:d4:2a:ef:1f:e3:25:4b:2d:f0:66:ef:26:fb: 4c:f0:81:85:bb:1a:99:06:c9:37:87:de:8d:49:f7:00:91:a9: 42:31:4a:b9:40:a0:7d:4f:4f:a6:ea:d4:58:07:3c:01:e0:1a: 53:54:66:e1:a3:7e:30:cd:3b:f8:69:59:a3:48:92:48:e1:9e: 63:ab:08:70:91:f2:48:d2:83:4b:98:06:fa:fd:bc:99:02:da: 9c:98:b1:a3
证书格式
- PKI ITU-T X509标准,传统标准(.der .pem .cer .crt),仅包含公钥
- PKCS#7 加密消息语法标准(.p7b .p7c .spc .p7r),p7b/p7c/spc 包含了证书链,p7r是证书请求回复(非证书)
- PKCS#10 证书请求标准(.p10),.p10是证书请求文件,与.csr文件类似
- PKCS#12 个人信息交换标准(.pfx *.p12),包含公钥和私钥,需密码保护
编码形式
- X.509 DER(Distinguished Encoding Rules)编码,后缀为:.der .cer .crt
- X.509 BASE64编码(PEM格式),后缀为:.pem .cer .crt
X.509CRT-PEM
-----BEGIN CERTIFICATE-----BASE64 ENCODED DATA-----END CERTIFICATE-----
关键特性
- 编码形式:二进制还是ASCII
- 是否包含公钥、私钥
- 包含一个还是多个证书
- 是否支持密码保护(针对当前证书)
参考文档
mbed文档-公钥的der和pem编码格式比较
Chen-PKI系统与数字证书结构
- 公钥证书编码解读
- 公钥证书编码解读
- 编码解读
- 轻松解读音频视频编码
- HEVC编码流程解读
- 轻松解读音频视频编码
- HEVC编码流程解读
- GET请求解读编码
- 公钥证书概述
- 公钥证书
- 对百度百科SSL证书的解读
- 证书文件编码格式介绍
- openssl 获取base64编码证书
- Openssl DER 编码 证书读取
- 证书文件编码格式介绍
- 证书文件编码格式介绍
- 另一个视角解读计算机编码-补码编码
- 另一个视角解读计算机编码-补码编码
- Linux 搭建 YUM 服务器
- HDU_6153 A Secret【扩展KMP】
- CentOS6.5环境下MySQL编译安装
- github项目托管
- 模型融合
- 公钥证书编码解读
- AtomicInteger 理解
- go语言入门(流程控制,函数,错误处理)
- mybatis多参传递方式(三种)
- C/C++将控制台信息输出到文本
- Windows操作系统下安装IIS、组件及IIS创建网站流程
- AngularJs表单验证+仿某Q注册界面
- 如何使用ssh_scan远程验证SSH服务的配置和策略
- Mybatis多表查询