程序员程序园

SSL 证书基础知识

2019-04-26  本文已影响8人  狼性刀锋

SSL 证书基础知识

前言

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

ASN.1

简介

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

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

详情请见: ISO/IEC 8824

例子


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 具体的编码类型。

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

具体编码规则

ASN1.png

X.509

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

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

证书
    - ...
    - 公钥算法
    - 主题公钥
    - 此日期前无效
    - 此日期后无效
    - 版本号
    - 序列号
    - 签名算法
    - 颁发者
    - 证书有效期
    - 主题
    - 主题公钥信息
    - 颁发者唯一身份信息(可选项)
    - 主题唯一身份信息(可选项)
    - 扩展信息(可选项)
    - 证书签名算法
    - 数字签名

编码方式

ps:


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

PEM 和 DER编码差异请查看: 证书文件编码格式介绍

通用类型文件

SSL 证书类型

文件查看和转换

查看

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

转换

openssl x509 -in pemEncodeFile -outform der -out cert.der
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

相关链接:

上一篇 下一篇

猜你喜欢

热点阅读