计划完成的任务
- 了解 ASN.1 语法规范
- 学习 X509 证书(证书格式,内容等)
- 学习并使用 openssl 工具
了解 ASN.1 语法规范
概览
ASN.1 描述了一种对数据进行表示、编码、传输和解码的数据格式,个人感觉和json
,xml
意义差不多。
ASN1含有一套编码规则,包括了:
- BER basic encoding rules
- DER distinguished encoding rules
- CER canonical encoding rules
- PER packed encoding rules
- XER XML encoding rules
我们来看看这些编码标准和证书的对应关系
-
linux 下常用的
.crt
证书,可以采用der
编码(但更多情况下使用pem
编码) -
windows 下的
.cer
证书,采用cer
编码 -
上述的证书不包含密钥。
.key
文件存储一个公钥或私钥,使用der
或pem
编码 -
ber
是最初的编码标准,der
等都是在其基础上发展而来的。ber
用的较少 -
per
感觉用的较少,没找到多少资料
数据类型
NULL:只包含一个值NULL,用于传送一个报告或者作为CHOICE类型中某些值
INTEGER:全部整数(包括正数和负数)
REAL:实数,表示浮点数
ENUMERATED:标识符的枚举(实例状态机的状态)
BITSTRING:比特串
OCTETSTRING:字节串
OBJECT IDENTIFIER,RELATIVE-OID:一个实体的标识符,它在一个全世界范围树状结构中注册
EXTERNAL,EMBEDDED PDV:表示层上下文交换类型
…String(除了BITSTRING、OCTETSTRING外):各种字符串
CHARACTERSTRING:允许为字符串协商一个明确的字符表
UTCTime,GeneralizedTime:日期
我还没有深入研究,先跳过
观察 X509 证书(证书格式,内容等)
生成证书
- 我是自签名证书,所以先要生成 CA 私钥,
openssl genrsa -des3 -out ca.key 2048
如图
使用genrsa生成一个RSA的私钥文件,并使用DES3对称算法来加密该私钥文件,Enter pass phrase for ca.key
是让我们输入 DES3 加密算法的密钥
- 自签名证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
req
是创建一个请求,-key
后接证书的私钥,-out
后接输出,days
指定证书有效期,如图:
查看证书内容
- 打印证书的内容
openssl x509 -in ca.crt -noout -text
-text
是输出对象
- 查看证书所有者信息
openssl x509 -in ca.crt -noout -subject
- 查看证书序列号
openssl x509 -in ca.crt -noout -serial
- 查看证书的
SHA
特征值(就是用SHA
算法得到的哈希值)openssl x509 -sha1 -in ca.crt -noout -fingerprint
- 查看证书公钥
openssl x509 -in ca.crt -pubkey -noout
学习并使用 openssl 工具
上文观察证书内容已经对openssl
有介绍了,现在看看 openssl asn1parse
命令。
用法如下:
openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-offset number] [-length number] [-i][ -dump ] [dlimit number] [-oid filename] [-strparse offset] [-genstr string ] [-genconf file]
选几个重要的参数看
-inform PEM|DER 指定输入内容的格式
-in filename 指定输入文件
-i 缩进
试一试
输入openssl asn1parse -i -in ca.crt
,结果如下:
选一行37:d=3 hl=2 l= 9 prim: OBJECT
- 37 表示节点在整个文件中的偏移长度
- d=3 表示节点深度
- hl=2 表示节点头字节长度
- l=9 表示节点数据字节长度
- prim 表示该节点为原始节点,包含数据 ( cons 表示该节点为结构节点,表示包含子节点或者子结构数据 )
- OBJECT 是ASN.1 定义的数据类型
总结
本周任务完成。偏重于概念的理解和工具的使用。还需仔细研究 ASN.1 编码标准。