前言
介绍openssl中的一些名词。
每个名词解释包含三部分:
- 名词含义:对应的官方介绍。
- 该名词对应的openssl 命令行的使用。
- 该名词对应的openssl api。
名词解释
x.509
相关链接: x.509-wiki 、 x.509-官网
-
X.509是密码学里公钥证书的格式标准。 关于公钥证书的基本概念,可以参考《图解密码技术》- 结城浩 - 第10章 证书。 这里,我们简单看下证书的相关内容。 -
首先,我们需要获取一份证书。我们获取下百度的证书。 可以使用openssl-s_client导出证书。也可以直接在浏览器界面导出。 如果文件的后缀名保存为pem ,cer 或者cert ,可以直接双击打开。我倾向于将文件命名为baidu_cert.pem ,表明它是百度的证书,为pem格式的文件。 -
查看证书内容。我们可以像上面这样双击打开查看,也可以使用openssl-x509查看。 ? openssl x509 -in baidu_cert.pem -noout -text
-
上面openssl x509 命令对应的源码位于openssl/apps/x509.c。 相关的头文件定义在/usr/include/openssl/x509.h 中。可以参考:OpenSSL中文手册之X509库详解(未完待续) 证书请求的编码示例:证书请求简介
ASN.1
相关链接:ASN.1-wiki、ASN.1-官网
-
ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达)。标准的ASN.1编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER,Packed Encoding Rules)和XML编码规则(XER,XML Encoding Rules)。为了使ASN.1能够描述一些原先没有使用ASN.1定义,因此不适用上述任一编码规则的数据传输和表示的应用和协议,另外制订了ECN来扩展ASN.1的编码形式。ECN可以提供非常灵活的表明方法,但还没有得到普遍应用。 -
我们也可以使用openssl-asn1parse,查看上面证书内容。 ? file baidu_cert.pem
baidu_cert.pem: PEM certificate
? openssl asn1parse -i -inform PEM -in baidu_cert.pem
0:d=0 hl=4 l=2624 cons: SEQUENCE
4:d=1 hl=4 l=2344 cons: SEQUENCE
8:d=2 hl=2 l= 3 cons: cont [ 0 ]
10:d=3 hl=2 l= 1 prim: INTEGER :02
13:d=2 hl=2 l= 12 prim: INTEGER :1198724F6674A3D621BFBEA2
27:d=2 hl=2 l= 13 cons: SEQUENCE
29:d=3 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
每行都以十进制的偏移量开始。 d=XX 指定当前深度。深度在任何 SET 或 SEQUENCE 的范围内增加。 hl=XX 给出当前类型的标头长度(标记和长度字节)。 l=XX 给出内容字节的长度。 PEM 是一种将二进制数据编码为字符串的方法。上面证书可以在PEM和DER格式之间转换。虽然格式不同,但存储的是相同的信息,而DER是ASN.1的一种编码方式。 -
上面openssl asn1parse 命令对应的源码位于openssl/apps/asn1parse.c。相关的头文件定义在/usr/include/openssl/asn1.h 。
待
还有pfx,pkcs7没有整理。整理思路和上面类似。暂不整理。
参考链接
What are the differences between .pem, .cer and .der?
What is a Pem file and how does it differ from other OpenSSL Generated Key File Formats?
|