数据编码格式
ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。是定义抽象数据类型形式的标准,是用于描述数据表示、表示、传输、编码的记法。
ASN.1是一种结构化的数字对象描述语言,它包括了两个部分:
- 数据描述语言(ISO8824)
- 数据编码规则(ISO8825)
ASN.1的数据描述语言标准允许用户自定义基本数据类型,并可以通过简单的数据类型组成更复杂的数据类型。
ASN.1提供了多种数据编码方法:
- BER(Basic Encode Rules),基本编码规则
- CER(Canonical Encoding Rules),规范编码规则
- DER(Distinguished Encoding Rules),唯一编码规则
- PER(PackedEncoding Rules),压缩编码规则
- XML(XER,XML Encoding Rules),XML编码规则
目前经常被采用的是BER编码,但是BER编码具有编码不唯一的性质,也就是说,一个相同的对象通过BER编码可能会产生几种不同的编码数据。所以,在 OpenSSL和其他密码学相关软件中经常使用BER的一个子集DER。对于每一个ASN.1对象,使用DER编码得出的二进制编码数据是唯一的。
PEM编码全称是Privacy Enhanced Mail,是一种保密邮件的编码标准。通常来说,对信息的编码过程基本如下:
(1)信息转换为ASCII码或其他编码方式,比如采用DER编码。
(2)使用对称加密算法加密经过编码的信息。
(3)使用BASE64对加密后的信息进行编码。
(4)使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息,头定义的格式如下:
Proc-Type,4:ENCRYPTED
DEK-Info:cipher-name,ivec
第一个头信息标注了该文件是否进行加密,该头信息的值包括ENCRYPTED(信息已经加密和签名),MIC-ONLY(信息经过数字签名但没有加密),MIC-CLEAR(信息已经经过数字签名但是没有加密,也没有进行编码,可使用非PEM格式阅读),以及CLEAR;第二个头信息标准了加密的算法及对称加密块算法使用的初始向量。
(5)在这些信息的前面加上如下形式头标注信息:
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
在这些信息的后面加上如下形式尾标注信息
-----END PRIVACY-ENHANCED MESSAGE-----
OpenSSL的PEM编码基本上是基于DER编码之上的,也就是说,它在上述第一步采用的是DER编码,所以,从本质上来说,OpenSSL的PEM编码就是在DER编码基础上进行BASE64编码,然后添加一些头尾信息组成的。
证书编码
数据编码格式提供了封装数据的基本方法,但对于具体的数据对象,比如证书,根据内容不同,需要更加具体的表达方式。
X.509证书
X.509证书仅包含公钥信息而没有私钥信息,可以公开发布,一般不需要加密。X.509证书常用后缀由der、cer、crt。
......(此处省略证书可读信息)......
-----BEGIN CERTICICATE-----
......(此处省略BASE64编码的证书数据)......
-----END CERTICICATE-----
X.509头尾格式还可以是:
-----BEGIN X.509 CERTICICATE-----
-----END X.509 CERTICICATE-----
或
-----BEGIN TRUSTED CERTICICATE-----
-----END TRUSTED CERTICICATE-----
X.509指令:
x509
PKCS#12证书
PKCS#12可以包含一个或者多个证书,并且还可以包含证书对应的私钥。
一般情况下,PKCS#12证书私钥需要经过加密,密钥需要用户输入口令产生,证书后缀一般为p12或pfx。
PKCS#12证书可以转换为X.509证书和私钥。
PKCS#12指令:
pkcs12
PKCS#7证书
PKCS#7可以封装一个或多个X.509证书或者PKCS#6证书,并且可以包含CRL信息。
PKCS#7证书只包含公钥信息,但它可以包含多个证书,X.509证书和PKCS#7证书之间可以进行转换,证书后缀一般为p7b。
PKCS#7指令:
pkcs7
crl2pkcs7
密钥编码
OpenSSL提供了PEM和DER两种编码方式来对密钥进行编码。DER编码存储的密钥不可读,PEM经过BASE64编码。公开密钥的私钥PEM编码时需要加密,生成的PEM文件会增加一些头信息,包括密钥加密状态、使用的加密算法以及初始向量等。
其他编码
证书吊销列表(CRL)主要包含了无效的证书列表,告诉用户哪些证书已经吊销或无效的。
在线证书服务协议(OCSP),也可以达到CRL的的作用,但它需要独立的服务,并不能总是可以使用。
DER格式保存的CRL不可读,PEM格式编码的CRL一般包含如下的一对符号:
-----BEGIN X.509 CRL-----
-----END X.509 CRL-----