asn1 pem pfx格式证书_SSL 证书基础知识

SSL 证书基础知识

前言

SSL 证书存在多种不同的格式,例如: cer, crt, der等, 那么不同格式之间具体有什么差异呢,其背后又是什么原理,不同证书怎么转换呢, 本文将重点探讨这些, 不同于其他文章追本溯源, 本文将使用从源头开始描述的方式书写,需要一些耐心。

ASN.1

简介

ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。

简单的说ASN.1 , 与语言无关, 与平台无关, 仅仅是对数据结构的描述,而没有数据结构的实现

例子

Report ::= SEQUENCE {

author OCTET STRING,

title OCTET STRING,

body OCTET STRING,

biblio Bibliography

}

Bibliography ::= SEQUENCE {

author OCTET STRING

title OCTET STRING

publisher OCTET STRING

year OCTET STRING

}

在这个例子中,"Report"是由名字类型的信息组成的,而SEQUENCE表示消息是许多数据单元构成的,前三个数据单元的类型是OCTET STRING,而最后一个数据类型是Bibliography 类型。

可见ASN.1 可以嵌套各种自定义类型, 这样就很灵活。并没有描述具体细节,比如: 虽然规定要描述: OCTET 字节长度,但并没有具体规定使用 32位还是64位存储 数据类型长度,也没有描述STRING 具体的编码类型。

这些最终由具体的编码规则制定

具体编码规则

BER(Basic Encoding Rules)

CER(Canonical Encoding Rules)

DER(Distinguished Encoding Rules)

PER(Packed Encoding Rules)

XER(XML Encoding Rules)

ASN1.png

X.509

X.509证书,其核心是根据RFC 5280制定。

证书组成结构标准用ASN.1进行描述. X.509 v3数字证书结构如下:

证书

- ...

- 公钥算法

- 主题公钥

- 此日期前无效

- 此日期后无效

- 版本号

- 序列号

- 签名算法

- 颁发者

- 证书有效期

- 主题

- 主题公钥信息

- 颁发者唯一身份信息(可选项)

- 主题唯一身份信息(可选项)

- 扩展信息(可选项)

- 证书签名算法

- 数字签名

编码方式

PEM编码(Privacy Enhanced Mail)

特点:纯文本文件, 以-----BEGIN 某某某-----开头, 以-----END 某某某-----结尾, 内容是 base64 编码. 但使用文本编辑器只能查看表面的结构, 需要输入命令例如openssl x509 -in 某个PEM格式数字证书.pem -text -noout才能看到原始的数字证书信息

ps:

如果存在——BEGIN CERTIFICATE——,则说明这是一个证书文件。

如果存在—–BEGIN RSA PRIVATE KEY—–,则说明这是一个私钥文件。

DER编码(Distinguished Encoding Rules)

特点:二进制文件格式, 一般应使用 Windows/Java 开发工具打开, 也可以使用openssl命令行工具提取其中信息或进行编码转换.

openssl x509 -in 某个DER格式的数字证书.der -inform der -text -noout

上面这个命令查看二进制文件中的证书信息.

通用类型文件

DER: 使用DER 编码的文件, 但并不一定是SSL 证书

PEM: 使用PEM 编码的文件, 但并不一定是SSL 证书

SSL 证书类型

CRT - PEM or DER, 大多数是PEM编码

CER - PEM or DER, 大多数是DER

PFX/P12 - CRT or CER 和 KEY 组合体, 采用DER 编码, 即证书和私钥的结合体。 PFX用于linux/windows , P12 用于 MacOS, 使用PKCS#12加密标准

KEY - 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER.

查看KEY的办法:

openssl rsa -in mykey.key -text -noout

如果是DER格式的话,同理应该这样了:

openssl rsa -in mykey.key -text -noout -inform der

JKS - 即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS. 注: keytool也能直接生成JKS.

文件查看和转换

查看

查看PEM编码文件

openssl x509 -in pemEncodeFile -text -noout

查看DER编码文件

openssl x509 -in derEncodeFile -inform der -text -noout

转换

PEM转为DER:

openssl x509 -in pemEncodeFile -outform der -out cert.der

DER转为PEM:

openssl x509 -in derEncodeFile -inform der -outform pem -out cert.pem

总结

der 文件仅仅是使用DER编码的文件, 不一定是证书,只有符合x.509规范的der文件才能被称为证书, crt 和 der 可以互相转换,也可以转为der文件, 只不过通常crt文件采用pem格式,der文件采用der格式罢了。

值得注意的是苹果官方Security API 只支持Der Encode.

image.png

相关链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值