SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)

2023-11-03

数字证书是网络世界中的身份证,数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可以在网络世界中为互不见面的用户建立安全可靠的信任关系,这种信任关系的建立则源于 PKI/CA 认证中心,因此,构建安全的 PKI/CA 认证中心是至关重要的。

ppyyJUJ.jpg

所有与数字证书相关的各种概念和技术,统称为 PKI( Public Key Infrastructure 公钥基础设施)。PKI 通过引入 CA,数字证书,LDAP,CRL,OCSP 等技术并制定相应标准,有效地解决了公钥与用户映射关系,集中服务性能瓶颈,脱机状态查询等问题。同时为促进并提高证书应用的规范性,还制定了很多与证书应用相关的各种标准。

PKI 的核心是在客户端、服务器和证书颁发机构 (CA) 之间建立的信任。这种信任是通过证书的生成、交换和验证来建立和传播的。

下图例举出了 Authentication 和 Certification 的差别,(双方和三方的区别)。

pp6WTAK.md.png

概述

SSL 证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为服务器证书。

SSL 证书只有正确安装到 Web 服务器,才能实现客户端与服务器间的 https 通信。由于涉及到不同类型 Web 服务器的配置,需要在证书签发后,根据实际服务器环境来安装证书。

CA 是一种电子商务认证授权机构,也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。其发布的证书就是 CA 证书。

对于 SSL 证书和 CA 证书的关系,可以从下面两个角度来考量。

CA 证书包含 SSL 证书

CA 机构除了可以颁发 SSL 证书之外,还可以颁发其他数字证书,比如:代码签名证书和电子邮件证书等等。从这个角度来说,SSL 证书是一种 CA 证书。

CA 证书等于 SSL 证书

证书颁发机构英文简称为 CA,负责签发、作废和保存证书,CA 签发的证书称为 CA 证书,CA 证书的本质是利用 SSL/TLS 协议保护传输数据的安全,因此又称为 SSL 证书。

什么是 SSL/TSL

SSL(Secure Socket Layer,安全套接字层)

位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL 通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL 记录协议和 SSL 握手协议。

TLS(Transport Layer Security,传输层安全协议)

用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS 记录协议和 TLS 握手协议。

两者的关系

TLS 与 SSL 连接过程无任何差异,可以理解为 SSL 是 TLS 的前世,TLS 是 SSL 的今生。并且 TLS 与 SSL 的两个协议(记录协议和握手协议)协作工作方式是一样的。

但是,SSL 与 TLS 两者所使用的算法是不同的,同时 TLS 增加了许多新的报警代码。由于这些区别的存在,我们可认为 TLS 是 SSL 的不兼容增强版。在认证证书时 TLS 必须与 TLS 之间交换证书, SSL 必须与 SSL 之间交换证书。

证书的签发

证书格式

从分类标准上分,SSL 证书格式主要有

  • 公钥证书格式标准 X.509 中定义的 PEM 和 DER
  • 公钥加密标准 PKCS 中定义的 PKCS#7 和 PKCS#12
  • Java环境专用的 JKS

从文件格式上分,SSL 证书格式主要有:

  1. 一种是 Base64 (ASCII) 编码的文本格式。这种证书文件是可以通过文本编辑器打开,甚至进行编辑,常见有 PEM 证书格式,扩展名包括 PEM、CRT 和 KEY。
  2. 另外一种是 Binary 二进制文件。常见有 DER 证书格式,扩展名包括 DER 和 CER。

Linux 系统使用 CRT,Windows 系统使用 CER。

名词 含义
X.509 一种通用的证书格式,包含证书持有人的公钥,加加密算法等信息
pkcs1 ~pkcs12 公钥加密(非对称加密)的一种标准(Public Key Cryptography Standards),一般存储为 .pN,, .p12 是包含证书和密的封装格式
*.der 证书的二进制存储格式(不常用)
*.pem 证书或密钥的 Base64 文本存储格式,可以单独存放证书或密钥,也可以同时存放证书或密钥
*.key 单独存放的 pem 格式的密钥,一般保存为 *.key
*.cer *.crt 两个指的都是证书,Linux 下叫 crt,Windows 下叫 cer;存储格式可以是 pem,也可以是 der
*.csr 证书签名请求(Certificate signing request),包含证书持有人的信息,如:国家,邮件,域名等信息
*.pfx 微软 IIS 的实现
*.jks Java 的 keytool 实现的证书格式

签发过程

pp64iOs.png

生成 CA 的私钥(后缀名可以用 .pem 也可以用 .key)

openssl genrsa -out ca.key 2048

生成 CA 证书请求文件,会车后会询问一系列基本信息

openssl req -new -key ca.key -out ca.csr

生成证书(公钥包含在证书中),正常情况下,要拿私钥和请求文件去被认可的 CA 机构进行证书申请和签发。这里选择使用 openssl 模拟 CA 机构来签发一个证书。

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

上面三步完成后,在文件夹下会得到三个文件:

ca.key
ca.csr
ca.crt

可以将生成的证书文件当作 root 证书,以辅助后续的证书信任链的讨论。

生成的证书格式一般是通用的 X509 格式的,其包含证书持有人的公钥,加加密算法等信息。

X.509 证书

基于 X.509 V3 标准的证书通过将身份与一对可用于对数字信息进行加密、签名和解密的电子密钥绑定,以实现认证和数据安全(一致性、保密性)的保障。

每一个 X.509 证书都是根据公钥和私钥组成的密钥对来构建的,它们能够用于加解密、身份验证、信息安全性确认。证书的格式和验证方法普遍遵循 X.509 国际标准。

X.509 标准使用了一种抽象语法表示法 One (ASN.1)的接口描述语言,来定义、和编解码客户端与证书颁发机构之间传输的证书请求和证书。

以下便是使用 ASN.1 的证书表示语法。

SignedContent ::= SEQUENCE 
{certificate         CertificateToBeSigned,algorithm           Object Identifier,signature           BITSTRING
}CertificateToBeSigned ::= SEQUENCE 
{version                 [0] CertificateVersion DEFAULT v1,serialNumber            CertificateSerialNumber,signature               AlgorithmIdentifier,issuer                  Namevalidity                Validity,subject                 NamesubjectPublicKeyInfo    SubjectPublicKeyInfo,issuerUniqueIdentifier  [1] IMPLICIT UniqueIdentifier OPTIONAL,subjectUniqueIdentifier [2] IMPLICIT UniqueIdentifier OPTIONAL,extensions              [3] Extensions OPTIONAL
}

公钥和私钥都是由一长串随机数组成的。公钥是公开的,由长度来决定保护强度,但是信息会通过公钥来加密。私钥只在接受者处秘密存储,接受者通过使用公钥关联的私钥才能解密读取信息。

使用 openssl 以文本模式查看公钥证书:openssl x509 -in ca.crt -noout -text ,下图是其主要内容的组成。

ppcbLN9.md.png

证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;

下面是证书操作的常见操作:

# 查看证书序列号
openssl x509 -in ca.crt -noout -serial
# 打印证书名称以 RFC2253 规定的格式打印出证书的拥有者名字
openssl x509 -in ca.crt -noout -subject
# 打印出证书的 MD5 特征参数
openssl x509 -in ca.crt -noout -fingerprint
# 打印出证书的 SHA 特征参数
openssl x509 -sha1 -in ca.crt -noout -fingerprint

格式转换

证书格式的转换其实本质上是编码格式的转换,比如 der 和 pem 的转换。

PEM 转 DER 格式:

openssl x509 -inform pem -in certificate.pem -outform der -out certificate.der

DER 转 PEM 格式:

openssl x509 -inform der -in certificate.der -outform pem -out certificate.pem

重要说明

说明一:证书 = 公钥 + 申请者与颁发者信息 + 签名。

说明二:证书文件的后缀并不能作为证书是哪一种编码的判断依据。对于私钥/公钥的文件后缀有时候用 key/crt,有时候用 pem,其实这不重要,重要的是文件中的内容格式。

颁发及信任链

信任链(Trust Chain)

CA 体系是一个树形结构,每一个 CA 可以有一到多个子 CA ,顶层 CA 被称为根 CA 。除了根 CA 以外,其他的 CA 证书的颁发者是它的上一级 CA 。这种层级关系组成了信任链(Trust Chain)。

pp6W2p4.png

以一个实际的例子来看,比如 baidu,在查看证书的时候,就可以看到它的根是 GlobalSign,中间证书是 Validation CA - SHA256 -G2,最后则是 baidu.com。

pp6WfXR.jpg

证书分为两种类型(没有本质区别):

  • CA证书(CA Certificate)
  • 终端实体证书(End Entity Certificate) 接受CA证书的最终实体。

认证实例

把在上面已经生成 ca.crt 作为根证书,来签发一个新的证书。

生成一个证书的私钥

openssl genrsa -out server.key 1024

生成证书的请求文件

openssl req -new -key server.key -out server.csr

还是将 openssl 模拟为 CA 机构,用上述生成的 ca.crt 根证书来签发新的证书。

openssl x509 -req -days 3000 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt
  • -CA:指定CA证书的路径
  • -CAkey:指定 CA 证书的私钥路径
  • -CAserial:指定证书序列号文件的路径
  • -CAcreateserial:表示创建证书序列号文件(即上方提到的 serial 文件),创建的序列号文件默认名称为 -CA,指定的证书名称后加上 .srl 后缀

证书校验,用下面命令来校验是否签发成功

openssl verify -CAfile ca.crt server.crt
# server.crt: OK

参考文档

[1] SSL证书与CA证书的区别 https://baijiahao.baidu.com/s?id=1653402538679672349&wfr=spider&for=pc
[2] SSL和TSL的区别和联系,以及HTTPS是如何加密解密的 https://www.cnblogs.com/hanzhengjie/p/13920581.html
[3] ssl和tsl区别 https://blog.csdn.net/M_0307/article/details/73543591
[4] CA证书扫盲,https讲解 https://www.cnblogs.com/handsomeBoys/p/6556336.html
[5] PKI/CA与数字证书 https://blog.csdn.net/u013066292/article/details/79538069
[6] SSL证书格式有什么区别? https://www.gworg.com/problems/1194.html
[7] 如何将.pem转换为.crt和.key? https://vimsky.com/article/3608.html
[8] 工具:openssl查看pem格式证书细节 https://blog.csdn.net/du_lijun/article/details/115367633
[9] http系列—OpenSSL生成根证书CA及签发子证书 https://blog.csdn.net/lipviolet/article/details/109456104
[10] CA证书详解 https://zhuanlan.zhihu.com/p/267047441
[11] Let’s Encrypt介绍 https://www.jianshu.com/p/449047437697
[12] Kubernetes 证书管理系列(一)https://mp.weixin.qq.com/s?__biz=MzI2ODAwMzUwNA==&mid=2649298078&idx=1&sn=24d17a25ccf1c97337e0ed7bc951a8a2&chksm=f2eb8541c59c0c576b3dbbc0fc32bbb0874955a6a83d852b8aa6f35685220d1eb8a135253b47&token=972017317&lang=zh_CN&scene=21#wechat_redirect
[13] CA数字证书简介 https://zhuanlan.zhihu.com/p/413401722
[14] SSL中,公钥、私钥、证书(pem、crt、cer、key、csr)的后缀名都是些啥? https://blog.csdn.net/HD243608836/article/details/127441701

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr) 的相关文章

随机推荐

  • 第六部分、JEECG-BOOT 通过archetype创建module模块

    文章目录 第六部分 通过archetype创建module模块 通过Archetype创建模块代码 代码结构如下 如何使用 第六部分 通过archetype创建module模块 通过Archetype创建模块代码 包名规则 org jeec
  • 面向对象设计原则 选自《敏捷软件开发原则,模式与实践》

    单一职责原则 就一个类而言 应该仅有一个引起他变化的原因 最简单也是最难掌握的一个原则 其中单一职责 内聚 职责 变化的原因 不同职责并非绝对不能共处 关键是发现类中变化特征不同的职责减少耦合 这个是横向的 开放 封闭原则 软件实体 类 模
  • 每日一道Python编程题目练习,不定期更新

    自学python中 此文章目的为记录练习过程 同时督促自己每天练习一道python题目 题目来源于网络 代码由自己书写 初学者 仅为记录 大佬不喜勿喷 尽量书写注释 如有错误 欢迎指正 如果有推荐的题目可以评论 目前感觉对python的基础
  • python-Django_根据数据库表反向生成Model

    Django 根据数据库表反向生成 Model 简介 Django 根据数据库表反向生成 Model 使用 inspectdb 反向生成 model 实体类 可以指定表名转换 python manage py inspectdb 命令参数解
  • html css js 一些记录.

    webstorm 的基本使用 webstorm 格式化 html 代码 Ctrl Alt L js html css 基本使用 注意 dom 的 innerHTML会刷新dom 所以里面包含的事件绑定可能无效 需要重新绑定 document
  • 存储过程分表

    DROP PROCEDURE IF EXISTS test sql create procedure test sql in start num int in end num int begin declare i int set i st
  • SpringBoot使用Jackson,全局反序列化去除字符串前后空格

    方法一 继承SimpleModule Component public class StringTrimModule extends SimpleModule private static final long serialVersionU
  • 字节流 FileInputStream和FileOutputStream类 三种读写方法对比概述

    文件操作 FileInputStream和FileOutputStream类 三种read方法对比概述 流 字节流 FileInputStream及FileOutputStream类的构造方法 代码测试read 以及write 三个方法各自
  • 【牛客SQL】SQL22 统计各个部门的工资记录数

    题目描述 描述 有一个部门表departments简况如下 有一个 部门员工关系表dept emp简况如下 有一个薪水表salaries简况如下 请你统计各个部门的工资记录数 给出部门编码dept no 部门名称dept name以及部门在
  • TensorFlow猫狗大战完整代码实现和详细注释

    运行环境 Windows10 TensorFlow1 10 GPU版本 python3 6 编译器pycharm 文件说明 1 data文件夹下包含test和train两个子文件夹 分别用于存放测试数据和训练数据 从官网上下载的数据直接解压
  • dod刷服务器文件,如何建立一个DOD服务器

    如何建立一个服务器 建立一个服务器让玩家来玩其实很简单 首先你要决定是否要从这台服务器机子本身玩DoD 或者建立一个纯服务器 你将不能用这台机子玩DoD 事实上一个纯服务器效率更高 服务器管理员并没有在服务器里玩 目前我们先讨论如何建立一个
  • 基于随机森林实现特征选择降维及回归预测(Matlab代码实现)

    目录 摘要 1 随机森林 2 随机森林的特征选取 3 基于Matlab自带的随机森林函数进行特征选取具体步骤 1 加载数据 2 首先建立随机森林并使用全部特征进行车辆经济性预测 3 使用随机森林进行特征选择 4 评价各个特征之间的相关性 5
  • 朴实无华地解决h5移动端开发软键盘输入时导致页面出现白块

    项目场景 项目场景 h5移动端开发 问题描述 登录页面在输入账密的时候 软键盘弹起的时候带出了白块在收起软键盘之前不会消失 原因分析 在页面中使用了相对定位 绝对定位属性以及margin属性 导致软键盘弹起时页面内容长度增加但不会自动收回
  • linux自启动程序

    嵌入式linux下有软件需要自启动 只需要在 etc init d rcS末尾添加所要启动的程序即可 开机就会自动运行 vi etc init d rcS在文件末尾添加 例
  • ubuntu16.10 lenovo拯救者笔记本无线网络开关修复方法(联想拯救者 + ubuntu16.04 + WIFI设置)

    问题一1 1 问题描述笔记本型号 Lenovo r720笔记本 i5 7300hq gtx1060 maxq 6g 默认装入Win10系统 然而当装入Ubuntu16 04双系统时 会出现无线网卡 型号 RTL8821AE 被hard bl
  • Composer中的curl引入

    Composer是php的主要扩展库 类似于npm pip等 可以安装很多优秀的php扩展 在使用短信验证码接入功能的时候 必须要引入这个扩展 1 从官网上引入composer地址 composer require curl curl 2
  • 问题:overflow 和 justify-content 同时使用出现内容被裁减的问题

    文章目录 开发的时候遇到如下问题 原因 解决 开发的时候遇到如下问题 当给一个容器的样式同时添加 justify content center 和 overflow x auto 属性 当内容长度超过容器的长度的时候会出现左侧内容被裁剪的问
  • springMVC 国际化 多语言

    springMVC 国际化 多语言 配置 系统有时需要考虑多国人员使用 比如中国人 美国人 日本人 韩国人 面向不同国家的使用者应该能方便地在不同语言之间进行切换 比如中文 英文 日文 韩文 常用的有两种方式 1 根据浏览器默认语言设置系统
  • ClickHouse中文官方文档

    什么是 ClickHouse ClickHouse 是一个面向列的数据库管理系统 DBMS 用于查询的在线分析处理 OLAP 在 正常 的面向行的 DBMS 中 数据按以下顺序存储 排 手表ID Java启用 标题 好活动 事件时间 0 8
  • SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)

    数字证书是网络世界中的身份证 数字证书为实现双方安全通信提供了电子认证 数字证书中含有密钥对所有者的识别信息 通过验证识别信息的真伪实现对证书持有者身份的认证 数字证书可以在网络世界中为互不见面的用户建立安全可靠的信任关系 这种信任关系的建