1.数字证书格式
RFC 3280 规定了 X.509 数字证书的基本格式
X.509 数字证书结构
X.509 证书域组成
分类 | 标识符 | 说明 |
---|---|---|
证书内容(待签名) | tbsCertificate | 包含持有者公钥、持有者信息、签发者信息等 |
签名算法 | signatureAlgorithm | 包含摘要算法和公钥算法 |
签名值 | signatureValue | 使用签名算法,对证书内容 tbsCertificate 进行签名后的结果 |
X.509 证书内容
分类 | 标识符 | 说明 |
---|---|---|
版本号 | version | 用于区分证书格式版本,最新版本为 v3,缺省值为 v1 |
序列号 | serialNumber | 证书唯一标识 |
签名算法 | signature | 必须与证书域名中的签名算法相同 |
证书签发者 | issure | 用于区分证书签发者,包含证书签发者身份信息 |
证书有效期 | validity | 由生效日期和失效日期组成 |
证书持有者 | subject | 用于区分证书持有者,包含证书持有者身份信息 |
证书持有者公钥 | subjectPublicKeyInfo | 包含证书持有者公钥信息 |
证书签发者ID | issuerUniqueID | 表示证书签发者唯一标识 |
证书持有者ID | subjectUniqueID | 表示证书持有者唯一标识 |
扩展项 | extension | 包含其他可扩展信息 |
issure 和 subject 包含的主要属性类型
分类 | OID | 说明 |
---|---|---|
country | id-at 6 | 国家,C |
organization | id-at10 | 单位,O |
organizational-unit | id-at 11 | 部门,OU |
distinguished name qualifier | id-at 46 | DN 限定符 |
state or province name | id-at 8 | 省份或州,ST |
common name | id-at 3 | 通用名称,CN |
serial number | id-at 5 | 序列号,SN |
locality | id-at 7 | 城市,L |
domain component | 域名组件,等同于 DNS,DC | |
title | id-at 12 | 头衔 |
surname | id-at 4 | 姓 |
given name | id-at 42 | 名 |
initials | id-at 43 | 首字母缩写 |
pseudonym | id-at 65 | 假名 |
generation qualifier | id-at 44 | 时代限定符,如老、小、第四代等 |
email address | pkcs-9 1 | 电子邮箱 |
2.KeyUsages
密钥用法
仅仅加密 Encipher Only
仅仅解密 Decipher Only
数字签名 Digital Signature
认可签名 Non Repudiation
密钥加密 key Encipherment
数据加密 Data Encipherment
密钥协商 key Agreement
证书签名 Key CertSign
CRL 签名 Crl Sign
增强密钥用法
Microsoft 信任列表签名 (1.3.6.1.4.1.311.10.3.1)
合格的部属 (1.3.6.1.4.1.311.10.3.10)
密钥恢复 (1.3.6.1.4.1.311.10.3.11)
许可证服务器确认 (1.3.6.1.4.1.311.10.6.2)
生存时间签名 (1.3.6.1.4.1.311.10.3.13)
Microsoft 时间戳 (1.3.6.1.4.1.311.10.3.2)
加密文件系统 (1.3.6.1.4.1.311.10.3.4)
文件恢复 (1.3.6.1.4.1.311.10.3.4.1)
根列表签名者 (1.3.6.1.4.1.311.10.3.9)
数字权利 (1.3.6.1.4.1.311.10.5.1)
密钥数据包许可证 (1.3.6.1.4.1.311.10.6.1)
文档签名 (1.3.6.1.4.1.311.10.3.12)
证书申请代理 (1.3.6.1.4.1.311.20.2.1)
智能卡登录 (1.3.6.1.4.1.311.20.2.2)
私钥存档 (1.3.6.1.4.1.311.21.5)
Windows 硬件驱动程序验证 (1.3.6.1.4.1.311.10.3.5)
密钥恢复代理 (1.3.6.1.4.1.311.21.6)
代码签名 (1.3.6.1.5.5.7.3.3)
时间戳 (1.3.6.1.5.5.7.3.8)
客户端身份验证 (1.3.6.1.5.5.7.3.2)
安全电子邮件 (1.3.6.1.5.5.7.3.4)
服务器身份验证 (1.3.6.1.5.5.7.3.1)
IP 安全用户 (1.3.6.1.5.5.7.3.7)
IP 安全 IKE 中级 (1.3.6.1.5.5.8.2.2)
OEM Windows 系统组件验证 (1.3.6.1.4.1.311.10.3.7)
IP 安全终端系统 (1.3.6.1.5.5.7.3.5)
IP 安全隧道终止 (1.3.6.1.5.5.7.3.6)
目录服务电子邮件复制 (1.3.6.1.4.1.311.21.19)
内嵌 Windows 系统组件验证 (1.3.6.1.4.1.311.10.3.8)
Windows 系统组件验证 (1.3.6.1.4.1.311.10.3.6)
所有颁发的策略 (2.5.29.32.0)
证书类型
(1)根证书
密钥用法:认可签名,证书签名,CRL签名
keyUsage=nonRepudiation, keyCertSign,cRLSign
(2)代码签名
密钥用法:数字签名
增强密钥用法:代码签名
keyUsage=digitalSignature
extendedKeyUsage=codeSigning
(3)计算机
密钥用法:数字签名,密钥协商
增强密钥用法:服务器验证,客户端验证
keyUsage=digitalSignature,keyAgreement
extendedKeyUsage=serverAuth,clientAuth
(4)WEB服务器
密钥用法:数字签名,认可签名,密钥加密,数据加密,密钥协商
增强密钥用法:服务器验证
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgreement
extendedKeyUsage=serverAuth
(5)客户端
密钥用法:数字签名,认可签名,密钥加密,数据加密
增强密钥用法:客户端验证
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
extendedKeyUsage=clientAuth
(6)信任列表签名
密钥用法:数字签名
增强密钥用法:信任列表签名
keyUsage=digitalSignature
extendedKeyUsage=msCTLSign
(7)时间戳
密钥用法:数字签名,认可签名,密钥加密,数据加密
增强密钥用法:时间戳
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
extendedKeyUsage=timeStamping
(8)IPSEC
密钥用法:数字签名,认可签名,密钥加密,数据加密
增强密钥用法:IP安全IKE中级
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
extendedKeyUsage=1.3.6.1.5.5.8.2.2
(9)安全Email
密钥用法:数字签名,认可签名,密钥加密,数据加密
增强密钥用法:安全电子邮件
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
extendedKeyUsage=emailProtection
(10)智能卡登陆
密钥用法:数字签名,密钥协商,仅仅解密
增强密钥用法:密钥恢复,加密文件系统,智能卡登陆
keyUsage=digitalSignature,keyAgreement,decipherOnly
extendedKeyUsage=1.3.6.1.4.1.311.10.3.11,msEFS,1.3.6.1.4.1.311.20.2.2
3.openssl
通过openssl的命令行能够轻松的将pkcs#12格式的证书解析成pem后缀的证书文件,方便程序调用
从pfx中获取CA证书
openssl pkcs12 -in client.pfx -password pass:11111111 -nokeys -cacerts -out ca.pem
从pfx中获取客户端证书
openssl pkcs12 -in client.pfx -password pass:11111111 -clcerts -nokeys -out clientcert.pem
从pfx中获取客户端私钥
openssl pkcs12 -in client.pfx -password pass:11111111 -nocerts -out clientkey.pem
解析密钥:
从pfx中获取密钥对
openssl pkcs12 -in w.pfx -password pass:111111 -nocerts -out w.key
从密钥对提取私钥
openssl rsa -in w.key -out w-private.key
从密钥对提取公钥
openssl rsa -in w.key -pubout -out w-public.key
因为RSA算法使用的是pkcs8模式补足,需要对提取的私钥进一步处理(可选)
openssl pkcs8 -in 1_pri.key -out 1_pri.p8 -outform der -nocrypt -topk8
网友评论