OpenSSL之八:文件编码格式

数据编码格式

ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。是定义抽象数据类型形式的标准,是用于描述数据表示、表示、传输、编码的记法。
ASN.1是一种结构化的数字对象描述语言,它包括了两个部分:

  1. 数据描述语言(ISO8824)
  2. 数据编码规则(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-----
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
摘 要 I ABSTRACT II 第1章 绪论 1 1.1 ASN.1概述 1 1.2 ASN.1系列标准 1 1.3 ASN.1编解码的应用与发展前景 2 1.4论文章节结构组织 2 第2章 ASN.1词汇及词法约定 3 2.1 字符集 3 2.2 词项 3 2.3 本章小结 4 第3章 ASN.1数据类型定义 5 3.1 简单数据类型 5 3.1.1 布尔类型 5 3.1.2 空类型 5 3.1.3 整数类型 6 3.1.4 枚举类型 6 3.1.5 实数类型 7 3.1.6 位串类型 7 3.1.7 八位位串类型 8 3.2构造类型 8 3.2.1 序列类型 8 3.2.2 单一序列类型 9 3.2.3 集合类型 10 3.2.4 单一集合类型 10 3.3 本章小结 11 第4章 ASN.1BER编码规则 12 4.1 ASN.1BER数据值的编码结构 12 4.1.1标识符八位位组 12 4.1.2长度八位位组 13 4.1.3内容八位位组 14 4.1.4内容结束八位位组 14 4.2简单数据类型的编码 14 4.2.1 布尔值的编码 14 4.2.2 空值的编码 14 4.2.3 整数值的编码 15 4.2.4 枚举值的编码 16 4.2.5 实数值的编码 16 4.2.6 位串值的编码 18 4.2.7 八位位串值的编码 18 4.3 构造类型的编码 18 4.3.1 序列值的编码 18 4.3.2 集合值的编码 19 4.3.3 单一序列值的编码 19 4.3.4 单一集合值的编码 20 4.4本章小结 20 第5章 基于ASN.1BER规则的解码实现 21 5.1 布尔值的解码 21 5.2 空值的解码 23 5.3 整数值的解码 24 5.4 枚举值的解码 27 5.5 位串值的解码 27 5.6 八位位串值的解码 29 5.7 实数值的解码 30 5.8 构造类型解码 32 5.8.1 序列值的解码 32 5.8.2 单一序列值的解码 35 5.8.3 集合值的解码 35 5.8.4 单一集合的解码 35 5.9 解码系统设计流程图 37 5.10本章小结 38 第6章 基于ASN.1 BER规约的可视化编解码系统及通信 39 6.1 ASN.1BER可视化编解码系统 39 6.2编解码系统通信的实现 40 6.3编解码系统的测试 41 6.4本章小结 43 第7章 总结 44 7.1主要内容回顾 44 7.2本次设计的不足和进一步完善 44 致谢 46 参考文献 47 附录A 外文翻译-原文部分 48 附录B 外文翻译-中文译文 56

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值