PKI
PKI(公钥基础设施Public KeyInfrastructure)
是网络信息安全的一项关键技术,广泛用于高强度、高级别的信息保护、身份鉴别、安全通讯、行为鉴定等安全领域。
X.500
-
是ITU-T关于目录服务的一系列规范、协议,用于解决国际电话、电报互联互通、邮件发送时的人员查找、身份认证等问题。
-
包括了多个子集:X.501、X.509
X.509是一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。
在一份证书中,必须证明公钥及其所有者的姓名是一致的。对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式)
详细特征
所有的X.509证书包含以下数据:
- 1、X.509版本号(version):指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。
- 2、证书的序列号(serialNumber):由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。
- 3、认证机构(Issuer Name):证书发布者,是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
- 4、证书的有效期(validity):证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
- 5、主题信息(subject):证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样:
CN=Bob Allen,//公用名称
OU=Total Network Security Division//组织单位
O=Network Associates, Inc.//组织
C=US//国家
这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服务处所等信息。
- 6、证书持有人的公钥(subjectPublicKeyInfo):包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数。
- 7、Issuer Unique Identifier (optional):发行人唯一标志
- 8、Subject Unique Identifier (optional):主题唯一标志
- 9、签名算法标识符(Certificate Signature Algorithm):用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法。
- 10、发布者的数字签名(Certificate Signature):这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。
证书扩展项
- 授权密钥标识符:提供识别对使用私有密钥在一张证书上签名相对应的公开密钥的手段
- 主题密钥标识符:提供识别包含特定公开密钥的证书的的手段
- 密钥使用:证书密钥的目的(加密、签名、签名证书)
- 私有密钥使用周期:不建议使用
- 证书策略:包含由对象标识符和可选的限定语组成的一个或多个策略信息条目
- CSP Pointer 包含指向CA发布的证书实施声明指针,URL格式
- User notice将展示依靠部分
- 策略映射
- 主体可替换名称
- 发行者可替换名称
- 基本约束:识别出证书的主体
- 策略约束
- 扩大密钥的使用领域
- CRL发布点
扩展文件
.cer, .crt - 通常被用于二进制的DER文件格式(同于.der), 不过也被用于Base64编码的文件 (例如 .pem).
.P7B - 同于 .p7c
.P7C - PKCS#7证书格式,仅仅包含证书和CRL列表信息,没有私钥。
.PFX - 同于 .p12
.P12 -PKCS#12文件, 包含证书(公钥)和私钥(受密码保护),已经完整的证书链信。
PKCS#7 是一种将数据加密和签名(正式名称是“enveloping”)的技术标准。 它描述数字证书的语法和其他加密消息——尤其是,数据加密和数字签名的方法,也包含了算法。但PKCS#7不包含私钥信息。
PKCS#12 定义了一个用于保存私钥和对应公钥证书的文件格式,并由对称密钥加密保护。PKCS#12通常采用PFX,P12作为文件扩展名。 PKCS#12文件可以存放多个证书,并由密码保护,通常用于WINDOWS IIS,也能够被当作Java Keysotre文件使用,用于Tomcat,Resign,Weblogic,Jboss等,不能被用于Apache.
编码 (也用于扩展名)
- .DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
- .PEM = 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。
常用的扩展名
- .CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。
- CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
- .KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。
CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。
总结
-
ITU-T制定X.509 V1规范
-
IETF 制定PKI的大部分协议
-
RSA公司制定PKCS系列标准
-
OSCCA制定国密相关标准
-
CERTICOM、SECG定制ECC相关标准。
X.500系列
- X.500是关于目录服务一系列标准
- X.501是关于目录服务数据模型的定义
- X.509是关于目录服务认证框架的定义
- X.520是数据模型中属性定义
- X.521是数据模型中对象定义
- ASN.1是协议定义语言
- BER、DER、CER是编码格式
- X.509是证书协议
- BASD64、PEM是另一层次的编码格式
PKCS系列
- PKCS#1定义了RSA公私钥格式及RSA运算过程、填充格式。
- PKCS#5定义了基于口令的私钥保护方式
- PKCS#7定义了数字封装格式,可以用于证书链、签名、数字信封。
- PKCS#8定义了更通用的私钥保护格式
- PKCS#10定义了证书请求格式
- PKCS#11定义了加密介质接口。
- PKCS#12定义了带私钥的证书格式。
编码格式
- BER: Basic Encoding Rules
- 基本编码格式。
- 对相同的数据,可以有多种编码方式,比如长字节型、短字节型、不定长型等。
- DER: Distinguished Encoding Rules
- 是BER的一个子集,为更严格的一个变种版本。
- 和BER相比,DER的编码格式只有固定一种。比如BER的Boolean变量编码值是可以1~255的任意值,而DER只能是1。
- DER使用在有数据签名的场合,以保证数据原文编码后可以保持一致。
- X.509证书都是DER编码。
- CER: Canonical Encoding Rules
- CER和DER一样,都是BER的限定编码规则的子集。
- CER和DER不同在于它是不定长编码,可以用于大数据块的封装。
- PKCS#7数字信封可以用DER编码,也可以用CER编码。
证书结构
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate, //证书内容
signatureAlgorithm AlgorithmIdentifier,// 签名算法
signatureValue BIT STRING//签名值 对tbsCer进行DER编码
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,//发行者
validity Validity,//有效期
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3