本文资料来源于网络,本人根据需要进行了汇集整理,如有侵权,请联系本人删除
数字证书介绍
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构(Certificate Authority,又称为证书授权中心)发行的,人们可以在网上用它来识别对方的身份。
证书格式
证书数据编码格式,遵循ASN.1标准。
ASN.1提供了多种数据编码方法。包括了BER、DER、PER和XER等。这些编码方法规定了将数字对象转换成应用程序能够处理、保存和网络传输的二进制编码形式的一组规则。目前经常被采用的是BER(Basic Encode Rules)编码,但是BER编码具有编码不唯 一的性质,也就是说,一个相同的对象通过BER编码可能会产生几种不同的编码数据。所以,在OpenSSL和其他密码学相关软件中经常使用BER的一个子DER(Distinguished Encoding Rules)。对于每一个ASN.1对象,使用DER编码得出的二制编码的数据是唯一的。
PEM编码 (.pem)
PEM编码全称是Privacy Enhanced Mail
,是一种保密邮件的编码标准。通常来说,对信息的编码过程基本如下:
信息转换为ASCII码或其他编码方式,比如采用DER编码。
使用对称加密算法加密经过编码的信息。
使用BASE64对加密码后的信息进行编码。
-
使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息,头定义的格式形式如下:
Proc-Type:4,ENCRYPTED DEK-Info:cipher-name,ivec
- 第一个头信息标注了该文件是否进行了加密,该头信息可能的值包括ENCRYPTED(信息已经加密和签名),MIC-ONLY(信息经过数据签名但没有加密),MIC-CLEAR(信息经过数字签名但是没有加密,也没有进行编码,可使用非PEM格式阅读),以及CLEAR;
- 第二个头信息标注了加密的算法及对称加密块算法使用的初始向量。
-
将这些信息添加报头和报尾封装成完整的PEM格式文件:
-----BEGIN CERTIFICATE----- block of base64 encoded data -----END CERTIFICATE-----
【注】OpenSSL的PEM编码基本上是基于DER编码之上的,也就是说,它在上述第一步采用的是DER编码,所以,从本质上来说,OpenSSL的PEM编码就是在DER编码基础上进行BASE64编码,然后添加一些说明信息组成的。
DER编码(.cer & .crt)
DER编码存储的密钥文件是不可读的,因为这是一个二进制编码的文件。
辨别编码规则(DER)可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN.1 DER
格式存储。它是无报头的PEM,PEM是用文本报头包围的DER。
PFX或P12编码(.pfx & .p12)
公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。
通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式合并转换为标准的PFX文件,你可以将PFX文件格式导入到微软IIS 5/6、微软ISA、微软Exchange Server等软件。转换时需要输入PFX文件的加密密码。你也可以将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用SSL通信的独立Java客户端或WebLogic Server使用。
JKS编码
通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式转换为标准的Java Key Store(JKS)文件。JKS文件格式被广泛的应用在基于Java的WEB服务器、应用服务器、中间件。你可以将JKS文件导入到TOMCAT、 WEBLOGIC 等软件。
KDB编码
通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式转换为标准的IBM KDB文件。KDB文件格式被广泛的应用在IBM的WEB服务器、应用服务器、中间件。可以将KDB文件导入到IBM HTTP Server、IBM Websphere 等软件。
CSR编码
证书请求文件(Certificate Signing Request)。生成 X509 数字证书前,一般先由用户提交证书申请文件,然后由 CA 来签发证书。大致过程如下(X509 证书申请的格式标准为 pkcs#10 和 rfc2314):
- 用户生成自己的公私钥对;
- 构造自己的证书申请文件,符合 PKCS#10 标准。该文件主要包括了用户信息、公钥以及一些可选的属性信息,并用自己的私钥给该内容签名;
- 用户将证书申请文件提交给 CA;
- CA 验证签名,提取用户信息,并加上其他信息(比如颁发者等信息),用 CA 的私钥签发数字证书;
【注】数字证书(如x.509)是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509v3 数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
OCSP
在线证书状态协议(OCSP,Online Certificate Status Protocol,rfc2560)用于实时表明证书状态。OCSP 客户端通过查询 OCSP 服务来确定一个证书的状态,可以提供给使用者一个或多个数字证书的有效性资料,它建立一个可实时响应的机制,让用户可以实时确认每一张证书的有效性,解决由CRL引发的安全问题。。OCSP 可以通过 HTTP协议来实现。rfc2560 定义了 OCSP 客户端和服务端的消息格式。
CRT
证书文件。可以是PEM格式。
CRL
证书吊销列表 (Certification Revocation List) 是一种包含撤销的证书列表的签名数据结构。CRL 是证书撤销状态的公布形式,CRL 就像信用卡的黑名单,用于公布某些数字证书不再有效。CRL 是一种离线的证书状态信息。它以一定的周期进行更新。
CRL 可以分为完全 CRL和增量 CRL。在完全 CRL 中包含了所有的被撤销证书信息,增量 CRL 由一系列的 CRL 来表明被撤销的证书信息,它每次发布的 CRL 是对前面发布 CRL 的增量扩充。
基本的 CRL 信息有:被撤销证书序列号、撤销时间、撤销原因、签名者以及 CRL 签名等信息。
基于 CRL 的验证是一种不严格的证书认证。CRL 能证明在 CRL 中被撤销的证书是无效的。但是,它不能给出不在 CRL 中的证书的状态。如果执行严格的认证,需要采用在线方式进行认证,即 OCSP 认证。一般是由CA签名的一组电子文档,包括了被废除证书的唯一标识(证书序列号),CRL用来列出已经过期或废除的数字证书。它每隔一段时间就会更新,因此必须定期下载该清单,才会取得最新信息。
SCEP
简单证书注册协议。基于文件的证书登记方式需要从您的本地计算机将文本文件复制和粘贴到证书发布中心,和从证书发布中心复制和粘贴到您的本地计算机。 SCEP可以自动处理这个过程但是CRLs仍然需要手工的在本地计算机和CA发布中心之间进行复制和粘贴。
PKCS7 (.p7r & .p7b)
加密消息语法(pkcs7),是各种消息存放的格式标准。这些消息包括:数据、签名数据、数字信封、签名数字信封、摘要数据和加密数据。
-
cert request response: .p7r
p7r是CA对证书请求的回复,只用于导入
-
binary message: .p7b
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
PKCS#10 (.p10)
证书请求
PKCS12 (.pfx & .p12)
pkcs12 (个人数字证书标准)用于存放用户证书、crl、用户私钥以及证书链。pkcs12 中的私钥是加密存放的。
参考资料
证书文件编码格式介绍
各种电子证书后缀名