证书间的道道油
😄 @auther sizaif
📆 2021-05-20 17:29:05
[TOC]
什么是PEM文件格式
( Privacy-Enhanced Mail)
是一种事实上的文件格式,用于存储和发送加密密钥、证书和其他数据,基于一组定义“增强隐私的邮件”的1993 IETF标准
许多密码学标准使用ASN.1来定义它们的数据结构,并使用区分编码规则**(Distinguished Encoding Rules, DER)
**来序列化这些结构,因为DER
产生二进制输出,所以通过只支持ASCII的系统(如电子邮件)传输结果文件可能很困难。
PEM格式通过使用base64
对二进制数据进行编码解决了这个问题。PEM还定义了一行页眉,包括“-----BEGIN”、一个标签和“-----”;一行页脚,包括“-----END”、一个标签和“-----”。标签决定了编码的消息类型。常用标签有“CERTIFICATE”、“CERTIFICATE REQUEST”、“PRIVATE KEY”、“X509 CRL”等。
PEM数据通常存储在后缀为“ .pem”,后缀为“ .cer”或“ .crt”(用于证书)或后缀“ .key”(用于公钥或私钥)的文件中。[3] PEM文件中的标签比文件后缀更准确地表示数据类型,因为可以将许多不同类型的数据保存在“ .pem”文件中。
什么是X.690
X.690是一个ITU-T标准,指定了几种ASN.1编码格式:
- Basic Encoding Rules (BER)
- Canonical Encoding Rules (CER)
- Distinguished Encoding Rules (DER)
参考链接:
https://en.wikipedia.org/wiki/X.690#DER_encoding
BER encoding
基本编码规则的格式指定编码ASN.1数据结构的自描述和自定界格式。每个数据元素都被编码为类型标识符、长度描述、实际数据元素以及必要时的内容结束标记。这些编码类型通常称为类型-长度-值或TLV编码。这种格式允许接收方从不完整的流中解码ASN.1信息,而不需要任何关于数据的大小、内容或语义的预先知识
DER encoding
DER (Distinguished Encoding Rules) 是BER的一个受限变体,用于为ASN.1描述的数据结构产生明确的传输语法。像CER, DER编码是有效的BER编码。除一个发送者的选项外,DER与BER是一样的。
DER是BER的子集,提供了一种对ASN.1值进行编码的方法。DER适用于需要唯一编码的情况,例如在密码学中,并确保需要进行数字签名的数据结构产生唯一的序列化表示。DER可以被认为是误码率的标准形式。例如,在BER中,一个布尔值true可以被编码为255个非零字节值中的任何一个,而在DER中,有一种方法可以将布尔值true编码。
最重要的DER编码约束是:
-
长度编码必须使用确定的形式
此外,必须使用尽可能短的长度编码
-
位字符串、八字节字符串和受限字符串必须使用原始编码
-
Set中的元素根据标记值按排序顺序进行编码
DER广泛用于X.509等数字证书。
CER encoding
CER(规范编码规则)是BER的一种受限变体,用于为ASN.1描述的数据结构生成明确的传输语法。BER提供了对数据值如何编码的选择,而CER(连同DER)只从基本编码规则允许的编码中选择一种编码,消除了其他选项。当必须保留编码时,CER是有用的;例如,在证券交易中
BER、CER、DER比较
BER格式
和CER
或DER
格式之间的关键区别是基本编码规则提供的灵活性
BER
,如上所述,是ITU-T X.690给出的用于ASN.1数据结构传输的编码规则的基本集合。它为发送方想要发送的数据结构提供了明确的编码规则,但也给发送方留下了一些编码选择.正如X.690标准中所述,“作为发送方的选项,基本编码规则允许替代编码。”声称符合基本编码规则的接收方应支持所有替代方案”
接收方必须准备好接受所有合法编码,才能合法声明BER-compliance
,相比之下,CER
和DER
都将可用长度规范限制为单个选项。因此,CER
和DER
是误码率的限制形式,用于消除误码率标准的歧义。
CER
和DER
的不同之处在于它们对发送方施加的限制。CER
和DER
的基本区别是,在某些精确定义的情况下,DER
采用定长形式,CER
采用不定长形式。也就是说,DER
总是具有前导长度信息,而CER
使用内容结束八位元,而不是提供编码数据的长度。因此,对于大的编码值,CER
需要较少的元数据,而对于小的编码值,DER
需要较少的元数据。
为了便于编码规则之间的选择,X.690标准文档提供了以下指导:
如果编码的值足够小,能够适应可用内存,并且需要快速跳过一些嵌套的值,那么区分编码规则比规范编码规则更合适。规范化编码规则比杰出的编码规则更合适的如果有需要编码值太大了,他们不能轻易适应可用内存或需要编码和传输的一部分价值在整个价值是可用的。基本编码规则比规范的或专有的编码规则i更合适
公钥,私钥,数字证书
公钥私钥
Bob有两把钥匙,一把叫公钥(public key),一把叫私钥(private key)
Bob的公钥可以公开供其他人使用,他只保留自己的私钥。公钥和私钥用来加解密数据,如果使用任意一把来加密数据,那么只有使用另外一把才能解密数据。
Susan想给Bob写信,她可以使用Bob的公钥将内容加密以后发送给Bob,Bob收到以后,使用私钥解密以便阅读内容。Bob的的其他同事即使截获了Susan发送给Bob的信件,由于没有Bob的私钥,也无法解密,从而确保数据安全。以上就是使用公钥和私钥加解密的过程演示。
如果Bob给Susan回信,如何保证数据安全呢?他可以使用Susan的公钥加密消息后发给Susan,Susan使用自己的私钥解密后阅读。所以保护好自己的私钥是多么重要的事情啊。
数字签名
现在Bob决定给Pat写一份信,信件的内容不用加密,但是要保证Pat收到信件后,能够确认信件的确是Bob发出的,而不是别人冒充Bob发给Pat的,应该如果做呢?
Bob将信件通过hash软件计算一下,得到一串消息摘要(有的文章也称之为“hash值”)。这一过程能够保证2点:
1、过程不可逆。即不能通过消息摘计算出信件的内容。
2、消息摘要不会重复。即如果信件有任何改动,再次hash计算出的消息摘要一定不会和改动前的消息摘要一致。
然后,Bob使用自己的私钥,将消息摘要加密。加密后的结果,我们称之为“数字签名”。现在,Bob就可以将信件连同数字签名一起发给Pat。
Pat收到信件以后,会做2件事:
1、使用Bob的公钥将数字签名解密,如果顺利解密,说明的确是Bob签发的数字签名,不是别人签发的,因为Bob的私钥没有公开。 2、Pat使用hash软件对信件再次进行hash计算,和解密数字签名得到的消息摘要对比,如果一致,说明信件没有篡改,确实是Bob发出的。这就是数字签名的过程。它能够确保签名人发出的消息不被篡改,也能证明的确是签名人发出的消息。
数字证书
使用数字证书可以确保公钥不被冒充。数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:
1、由专门的机构签发的数字证书才安全有效。
2、签发数字证书是收费的。
3、不会被冒充,安全可信。
4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。
公钥私钥证书生成
参考: 生成OpenSSL && GntTLS && WolfSSL keys 文档