X509C
X.509 协议:V3/V4版证书(建议改进版记作X.509C)
证书格式
(1)待签名部分
1、版本号 V3 Version
2、序列号 Serial Number
3、签名算法OID* Signature Algorithm Identifier
4、签发者 Issuer(各项名字的集合)
5、有效期 Validity
生效期 NotBefore
失效期 NotAfter
6、申请者 Subject (各项名字的集合)
7、申请者公钥信息 Subject Public Key Info
算法* Algorithm
公钥PK Subject Public Key
8、签发者唯一ID Unique ID of CA
9、申请者唯一ID Unique ID of Subject
10、扩展项 Extension
标准扩展项
自定义扩展项
(2)签名算法部分
签名算法OID* Signature Algorithm Identifier
(3)签名部分
签名体
几点说明
(1)签名算法OID(一、(1)中带*的地方)
目前主要有:
md2WithRSAEncryption = { 9, "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x02"};
md5WithRSAEncryption = { 9, "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x04"};
shaWithRSAEncryption = { 5, "\x2B\x0E\x03\x02\x0F"};
sha1WithRSAEncryption ={ 9, "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05"};
dsaWithSHA ={ 5, "\x2B\x0E\x03\x02\x0D"};
dsaWithSHA1 ={ 7, "\x2A\x86\x48\xCE\x38\x04\x03"};
dsaWithSHA1_2 ={ 5, "\x2B\x0E\x03\x02\x1B"};
申请增加:
schWithRSAEncryption ={ 6, "\x2A\x56\x0B\x05x05\x03 "}; (1,2,86, 11,5,5,3)
schWithECCAEncryption ={ 6,"\x2A\x56\x0B\ x05\x05\x04"}; (1,2,86, 11,5,5,4)
(2)签发者和申请者
目前主要有:
countryName //国名(二字节)
organizationName //组织名
organizationalUnitName //部门名
stateOrProvinceName //省名
commanName //通用名
localityName //所在地名
email //email地址
postalAddress //通信地址
postalCode //邮政编码
postalOfficeBox //邮箱
telephoneNumber //电话号码
telexNumber //传真号码
title //职务头衔
surName //姓0x550404
givenName //名
initials //
(3)有效期
当时间采用UTCTime时,年份采用二字节(YY),当YY大于等于50,年将被认为是19YY;当YY不到50,年将被认为是20YY。而当时间采用GeneralizedTime时,年份采用四字节(YYYY)。
(4)签名体
D=HashOID+(Hash结果),对D进行DER编码,再采用PKCS1标准进行私钥加密即签名。HashOID目前有:
md2 ={ 8, "\x2A\x86\x48\x86\xF7\x0D\x02\x02"};
md5 ={ 8, "\x2A\x86\x48\x86\xF7\x0D\x02\x05"};
sha ={ 5, "\x2B\x0E\x03\x02\x12"};
sha1 ={ 5, "\x2B\x0E\x03\x02\x1A"};
申请增加:sch ={ 5, "\x2A\x56\x0B\ x05\x05"}; (1,2,86, 11,5,5)
(5)在KeyUsage类型中位(Bits)使用如下:
定义 比特位 中文定义
-------------------------------------------------------
digitalSignature 0x8000 数字签名证书
nonRepudiation 0x4000 非抵赖证书
keyEncipherment 0x2000 密钥加密证书
dataEncipherment 0x1000 数据加密证书
keyAgreement 0x0800 密钥交换
keyCertSign 0x0400 签发证书
crlSign 0x0200 签发CRL文件
encipherOnly 0x0100 仅用于加密
decipherOnly 0x0080 仅用于解密
(6)标准扩展项
X.509C使用的标准扩展域如下:
权威密钥标识符(AuthorityKeyID) |
主体密钥标识符(SubjiectKeyID) |
密钥用法(KeyUsage) |
私有密钥使用周期(PrivateKeyUsagePeriod) |
证书策略(CertificatePolicies) |
策略映射(PolicyMappings) |
主体可替换名字(SubjectAlternativeName) 个人身份证号码 个人社会保险号 企业工商注册号 企业组织机构代码号 企业税号 |
发颁发者可替换名字(IssuerAlternativeName) |
主体目录属性(SubjectDirectoryAttributes) |
基本约束(BasicConstraints) |
名字约束(NameConstraints) |
策略约束扩大(PolicyConstraints) |
扩大密钥使用领域(ExtendedKeyUsage) |
CRL发布点(CRLDistributionPoints) |
目前主要有:
权威密钥标识符
主题密钥标识符
密钥使用
私有密钥使用周期
证书策略
策略映射
主题可替换名字
发行者可替换名字
主题目录服务系统属性
基本约束
名字约束
策略约束
扩大密钥使用领域
CRL发布点
其中“权威密钥标识符”即AuthorityKeyIdentifier为必选项,且其结构中的可选项keyIdentifier 、authorityCertSerialNumber为必选。
AuthorityKeyIdentifier ::= SEQUENCE {
keyIdentifier [0] KeyIdentifier OPTIONAL,
authorityCertIssuer [1] GeneralNames OPTIONAL,
authorityCertSerialNumber[2]CertificateSerialNumber OPTIONAL }
KeyIdentifier ::= OCTET STRING,由两种从公开密钥产生密钥标识符的通用方法如下:
A: keyIdentifier由BIT STRING subjectPublicKey的值的160位SHA1哈希值组成(排除标签,长度和不在使用的bits数目)。
B: keyIdentifier 4 bit类型字段值为0100以及随后的由BIT STRING subjectPublicKey的值SHA 1哈希的值中最后60 bits连接组成。
统一采用A形式。
(7)自定义扩展项(扩展扩展项)
自定义扩展项只要满足以下结构即可
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER, //OID
critical BOOLEAN DEFAULT FALSE, //是否是关键项
extnValue OCTET STRING //扩展值
}
另外,Netscape证书、SET证书还有LDAP的一些自定义扩展可以直接引
(8)CRL作废链
为适应安全EMAIL等SSL应用的证书链频繁下载需要,建议链文件在4K之内。把每100或200个证书放在一条链中,在每份证书中指明它所在的链名、URL。
4.3.3.2证书撤消表结构
版本号version |
签名算法标识signature |
颁发者名称issuer |
本次更新(日期/时间)thisUpdate |
下次更新(日期/时间)nextUpdate |
注销证书链 |
用户证书序列号 userCertificate |
注销日期revocationDate |
CRL条目扩展项crlEntryExtentions |
…… |
(CRL链长≤200个证书) |
CRL扩展域crlExtentions |
签名算法SignatureAlgorithm |
签名signatureValue |