SSL 证书基础知识

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

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

具体编码规则

  • BER(Basic Encoding Rules)
  • CER(Canonical Encoding Rules)
  • DER(Distinguished Encoding Rules)
  • PER(Packed Encoding Rules)
  • XER(XML Encoding Rules)
SSL 证书基础知识_第1张图片
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
    上面这个命令查看二进制文件中的证书信息.

PEM 和 DER编码差异请查看:(证书文件编码格式介绍)[https://blog.csdn.net/mycoolx/article/details/6730435]

通用类型文件

  • 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.


SSL 证书基础知识_第2张图片
image.png

相关链接:

  • 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...

  • SSL证书格式详解与转换

  • 证书文件编码格式介绍

  • DER、CRT、CER、PEM格式的证书及转换

你可能感兴趣的:(SSL 证书基础知识)