深入浅出 SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)
互联网是虚拟的,通过互联网我们无法正确获取对方真实身份。数字证书是网络世界中的身份证,数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可以在网络世界中为互不见面的用户建立安全可靠的信任关系,这种信任关系的建立则源于 PKI/CA 认证中心,因此,构建安全的 PKI/CA 认证中心是至关重要的。
所有与数字证书相关的各种概念和技术,统称为 PKI( Public Key Infrastructure 公钥基础设施)。PKI 通过引入 CA,数字证书,LDAP,CRL,OCSP 等技术并制定相应标准,有效地解决了公钥与用户映射关系,集中服务性能瓶颈,脱机状态查询等问题。同时为促进并提高证书应用的规范性,还制定了很多与证书应用相关的各种标准。
PKI 的核心是在客户端、服务器和证书颁发机构 (CA) 之间建立的信任。这种信任是通过证书的生成、交换和验证来建立和传播的。
下图例举出了 Authentication 和 Certification 的差别,(双方和三方的区别)。
概述
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 证书格式主要有:
-
一种是 Base64 (ASCII) 编码的文本格式。这种证书文件是可以通过文本编辑器打开,甚至进行编辑,常见有 PEM 证书格式,扩展名包括 PEM、CRT 和 KEY。
-
另外一种是 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 实现的证书格式 |
签发过程
生成 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
,下图是其主要内容的组成。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 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)。
以一个实际的例子来看,比如 baidu,在查看证书的时候,就可以看到它的根是 GlobalSign,中间证书是 Validation CA - SHA256 -G2,最后则是 baidu.com。
证书分为两种类型(没有本质区别):
-
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
相关文章:

深入浅出 SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)
互联网是虚拟的,通过互联网我们无法正确获取对方真实身份。数字证书是网络世界中的身份证,数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可…...

Compose(1/N) - 概念 基本使用
一、概念 1.1 解决的问题 APP展示的数据绝大多数不是静态数据而是会实时更新,传统的命令式UI写法更新界面繁琐且容易同步错误。1.2 Compose优势 由一个个可组合的Composable函数(可看作是一个Layout布局)拼成界面,方便维护和复用…...

2023高质量Java面试题集锦:高级Java工程师面试八股汇总
人人都想进大厂,当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败。突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡&a…...

MySQL多表查询 子查询效率(DQL语句)
多表关系 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多…...

Linux中 ps命令详解
一、基础概念 指令: ps 作用:查看系统进程,比如正在运行的进程有哪些,什么时候开始运行的,哪个用户运行的,占用了多少资源。 参数: -e 显示所有进程-f 显示所有字段(UID&…...

【Python语言基础】——Python 关键字
Python语言基础——Python 关键字 文章目录Python语言基础——Python 关键字一、Python 关键字一、Python 关键字 Python 有一组关键字,这些关键字是保留字,不能用作变量名、函数名或任何其他标识符: 关键字 描述 and 逻辑运算符。 as 创建别…...

Java SE 基础(8)关键字和保留字
关键字 定义:被Java 语言赋予了特殊含义,用做专门用途的字符串(单词) 特点: 关键字中所有字母都为小写 用于定义数据类型的关键字 class、interface、 enum 、byte 、short、 int 、long、 float、 double、 char 、…...

Thinkphp 6.0响应输出和重定向
本节课我们来学习一下响应操作,响应输出和重定向。 一.响应操作 1. 响应输出,有好几种:包括 return、json()和 view()等等; 2. 默认输出方式是以 html 格式输出,如果你发起 json 请求,则输出 js…...

Centos html 中文 显示为乱码
0 : CentOS发布静态网页 之 httpd开启 https://blog.csdn.net/weixin_39689870/article/details/118146160 #yum install -y httpd #systemctl start httpd.service/etc/httpd/conf:该目录存放Apache服务器的配置文件 /var/www/html:该目录是…...

Helm学习笔记
文章目录概念定义helm组件helm的工作流程helm安装helm仓库helm部署应用helm应用的更新或回退或卸载概念 定义 学习helm首先得了解helm是什么,我们先来看一下helm的定义:helm是将kubernetes的各种资源对象打包,类似于Linux中的yum工具&#…...

深入学习JavaScript系列(二)——作用域和作用域链
本篇为第二篇,本系列文章会在后续学习后持续更新。 第一篇:#深入学习JavaScript系列(一)—— ES6中的JS执行上下文 第二篇:# 深入学习JavaScript系列(二)——作用域和作用域链 第三篇&#x…...

【计算机视觉 | 目标检测】DETR风格的目标检测框架解读
文章目录一、前言二、理解2.1 DETR的理解2.2 DETR的细致理解2.2.1 Backbone2.2.2 Transformer encoder2.2.3 Transformer decoder2.2.4 Prediction feed-forward networks (FFNs)2.2.5 Auxiliary decoding losses2.3 更具体的结构2.4 编码器的原理和作用2.5 解码器的原理和作用…...

【LeetCode】剑指 Offer 41. 数据流中的中位数 p214 -- Java Version
题目链接:https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof 1. 题目介绍(41. 数据流中的中位数) 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位…...

CSS3 知识总结
1,什么是CSS 用于定义网页的样式,包括不同设备和屏幕尺寸的设计、布局和显示变化。 2,CSS的作用优点 CSS 描述 HTML 元素如何在屏幕、纸张或其他媒体上显示 CSS 节省了大量工作。它可以一次控制多个网页的布局 3,css构成 CSS 规…...

回溯算法37:解数独
主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:37. 解数独 题目: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则…...

【蓝桥杯-筑基篇】动态规划
🍓系列专栏:蓝桥杯 🍉个人主页:个人主页 目录 1.最大连续子段和 2.LCS 最大公共子序列 3.LIS 最长上升子序列 4.数塔 5.最大子矩阵和 6.背包问题 ①01背包问题 ②完全背包 1.最大连续子段和 这段代码是一个求最大子数组和的算法,使用…...

Unity利用Photon PUN2框架快速实现多人在线游戏实例分享
简介 Photon 是一个泛用性的 ScoketServer 套装软件,可用于多人在线游戏、聊天室、大厅游戏,并同时支持 Windows、Unity3D、iOS、Android、Flash 等平台。Photon 包含两个部分,一部分是 Socket 服务器,另一部分是其针对各个平台编写的 SDK,Unity3D 平台对应的 SDK 为 Pho…...

ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现
文章目录ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现一、绪论1.1 研究背景与意义1.2 国内外研究现状分析1.3 研究内容与目标1.4 研究方向和思路二、物联网技术与智能家居概述2.1 物联网技术原理与应用2.2 智能家居的概念与发展历程2.3 智能…...

特斯拉的操作系统是用什么语言编写的?
总目录链接>> AutoSAR入门和实战系列总目录 文章目录特斯拉车辆操作系统特斯拉GitHub中使用的语言Ruby和GoPythonSwift 和 Objective CQt我们知道操作系统至少需要一些非常低级的代码,这些代码在系统首次启动时运行,必须使用接近硬件的语言编写。…...

C++学习8-C++提高编程
文章目录前言一、模板1.1 模板的概念1.2 函数模板1.2.1 函数模板语法1.2.2 函数模板注意事项1.2.3 函数模板案例复习:计算数组长度1.2.4 普通函数与函数模板的区别1.2.5 普通函数与函数模板的调用规则1.2.6 模板的局限性1.3 类模板1.3.1 类模板语法1.3.2 类模板与函…...

ubuntu安装git server
一安装 要在Ubuntu上安装Git服务器,需要按照以下步骤进行操作: 安装Git: sudo apt-get update sudo apt-get install git 创建一个Git用户和一个Git仓库目录: sudo adduser git sudo mkdir /home/git/repo.git sudo chown git:git /home/git/repo.git 初始化Git仓库: c…...

物流云数据分析平台
物流云数据分析服务平台 http://project.webcats.cn/bx/36569/2455/index.html 本次系统模拟的是湖南省数据,解释权归杭氏集团所有! 1、系统简介: 物流大数据集成展示系统旨在通过大屏幕全面显示指定地区的物流运营车辆、物流公司和货主的相关信息和…...

配置OBS存储功能、新搭建obs
通过应用开发环境与OBS(Object-based Storage Service)对接,实现对象或者Widget资产存储功能。 背景信息 对象存储服务(Object-based Storage Service,OBS)是一个基于对象的海量存储服务,为客…...

基于DPDK收包的suricata的安装和运行
操作系统版本:Ubuntu 20.04.5 suricata版本: suricata-7.0.0-rc1 suricata是一个基于规则的入侵检测和防御引擎,功能强大,但性能可能 差强人意,不过目前最新的7版本已经支持DPDK收包了,DPDK是Intel提供的高…...

浅谈23种设计模式
创建型模式 有5种设计模式 抽象工厂(Abstract Factory):多套方案 抽象工厂模式是对创建不同的产品类型的抽象。对应到工作中,我们的确应该具备提供多套方案的能力,这也是我们常说的,要提供选择题。当你有这…...

JetBrains Rider 2022.3.3 Crack
具有 ReSharper 强大功能的令人难以置信的 .NET IDE!Rider 在我们使用 Windows 和 macOS 的整个开发团队中使用。 什么是骑士? JetBrains Rider 是一个基于 IntelliJ 平台和 ReSharper 的跨平台 .NET IDE。 支持许多 .NET 项目类型 JetBrains Rider 支持…...

浅理解扁平数据结构转Tree(树形结构)
文章目录📋前言🎯扁平数据结构🎯树形数据结构🎯使用递归将扁平数据转换为树形数据📝最后📋前言 在前端开发中,我们经常需要将扁平数据结构转换为树形结构(Tree)。比如在…...

前端开发——JavaScript的条件语句
世界不仅有黑,又或者白 世界而是一道精致的灰 ——Lungcen 目录 条件判断语句 if 语句 if else 语句 if else if else 语句 switch语句 break 关键字 case 子句 default语句 while循环语句 do while循环语句 for循环语句 for 循环中的三个表达式 for 循环嵌套 for …...

2.11 循环赛日程表
博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 目录 书本内容: 我的理解: 更优化的算法: 总结 1.注意实现问题 2.当用C语言和C实现循环赛日程表算法时ÿ…...

SpringBoot——SB整合mybatis案例(残缺版本)第三集
了解完使用阿里云存储的操作后,现在需要在案例里面集成阿里云进行开发。云服务——阿里云OSS的入门使用_北岭山脚鼠鼠的博客-CSDN博客 阿里云OSS——集成 对于前端传过来的图片要先上传到OSS,然后获取图片在云端的访问地址,存储到数据库里面…...