- X.509被广泛使用的数字证书标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sign-on)和授权管理基础设施 (PMI-Privilege Management Infrastructure)制定的PKI标准,其中,单点登录指的是用户只需要登录一次就可以访问所有相互信任的应用系统,PKI标准指的是为支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施。
- X.509证书数据结构详细描述:<摘自:RCF 2459 4.1 Basic Certificate Fields >
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate, -- 证书主体
signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识
signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
-- 证书版本号
serialNumber CertificateSerialNumber,
-- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书
signature AlgorithmIdentifier,
--证书签名算法标识
issuer Name, --证书发行者名称
validity Validity, --证书有效期
subject Name, --证书主体名称
subjectPublicKeyInfo SubjectPublicKeyInfo,
--证书公钥
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- 证书发行者ID(可选),只在证书版本2、3中才有
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- 证书主体ID(可选),只在证书版本2、3中才有
extensions [3] EXPLICIT Extensions OPTIONAL
-- 证书扩展段(可选),只在证书版本3中才有
}
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::= INTEGER
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
parameters:
Dss-Parms ::= SEQUENCE {
-- parameters ,DSA(DSS)算法时的parameters,RSA算法没有此参数
p INTEGER,
q INTEGER,
g INTEGER }
signatureValue:
Dss-Sig-Value ::= SEQUENCE {
-- sha1DSA签名算法时,签名值
r INTEGER,
s INTEGER }
Name ::= CHOICE {
RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
Validity ::= SEQUENCE {
notBefore Time, -- 证书有效期起始时间
notAfter Time -- 证书有效期终止时间
}
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
-- 公钥算法
subjectPublicKey BIT STRING
-- 公钥值
}
subjectPublicKey:
RSAPublicKey ::= SEQUENCE { -- RSA算法时的公钥值
modulus INTEGER, -- n
publicExponent INTEGER -- e -- }
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING }
X.509数字证书实例
<摘自RCF 2459 Appendix D. Examples> –下文在此附加翻译与注释
D.3 End-Entity Certificate Using RSA
包含一个结束实体证书的转储,包含一个RSA公钥,并与RSA和MD5签署。这
证书不是最小认证路径的一部分。
证书包含675字节,证书版本号为3。
(a) 证书序列号是256 (0x100);
(b) 证书使用RSA和MD2哈希算法签署;
(c) 证书发行者的名字是OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(d) 证书主体的名字是CN=Francisco Jordan;OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(e) 证书于1996年5月21日签发,并1997年5月21日到期;
(f) 证书包含一个768位RSA 公钥;
(g) 证书是一个结束实体证书(不是CA证书);
(h) 证书包含证书主体别名、证书发行者别名–都是URLs
(i) 证书包括一个权威密钥标识符和证书政策扩展;
(j) 证书包含一个密钥用法的扩展,指定用于数字签名
0000 30 80 : SEQUENCE (size undefined)
// Certificate:: SEQUENCE类型(30),数据块长度不定,由00、00作为结束符
0002 30 82 02 40 576: . SEQUENCE
// tbsCertificate:: SEQUENCE类型,长度576
0006 a0 03 3: . . [0]
// Version:: 特殊内容-证书版本(a0),长度3
0008 02 01 1: . . . INTEGER 2 //整数类型(02),长度1
: 02
// 版本3(2)
0011 02 02 2: . . INTEGER 256
//serialNumber:: 整数类型(02),长度2
: 01 00 // 证书序列号256
0015 30 0d 13: . . SEQUENCE
// signature:: SEQUENCE类型(30),长度13
0017 06 09 9: . . . OID 1.2.840.113549.1.1.2: MD2WithRSAEncryption
// signature:: OBJECT IDENTIFIER类型,长度9
: 2a 86 48 86 f7 0d 01 01 02 //MD2WithRSAEncryption算法
0028 05 00 0: . . . NULL
0030 30 68 88: . . SEQUENCE // 以下的数据块表示issuer信息
0032 31 0b 11: . . . SET
0034 30 09 9: . . . . SEQUENCE
0036 06 03 3: . . . . . OID 2.5.4.6: C
: 55