SSL 自定义证书创建过程
1、生成自签名根证书和私钥
1.1 生成根证书
1.1.1生成根证书私钥
首先,生成一个自签名的根证书和私钥。这个根证书将作为信任锚(Trust Anchor),客户端会信任由这个根证书签署的所有证书。
openssl genrsa -out rootCA.key 2048
参数解释:
openssl: OpenSSL工具的主命令。genrsa: 生成RSA密钥对的命令。-out rootCA.key: 指定输出文件名为rootCA.key,这是生成的私钥文件。2048: 指定密钥的长度为2048位。
1.2 生成根证书
创建openssl.cnf 文件,文件内容如下:
[ req ]
default_bits = 2048
default_keyfile = rootCA.key
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
C = CN
ST = Shanghai
L = Shanghai
O = CodeProject
OU = Development
CN = CodeProject Root CA
1.2.1生成根证书rootCA.crt
命令如下:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 36500 -out rootCA.crt -config openssl.cnf
解释
-x509:表示生成自签名证书(而不是证书签名请求)。-new:表示生成新证书。-nodes:表示不加密私钥文件(即不需要密码保护)。-key rootCA.key:指定私钥文件为rootCA.key。-sha256:使用SHA-256哈希算法。-days 36500:指定证书的有效期为36500天(约100年)。-out rootCA.crt:指定输出的证书文件名为rootCA.crt。-config openssl.cnf:指定使用openssl.cnf配置文件中的信息。
1.3为什么根证书不要CSR 文件
在生成根证书(Root CA 证书)时,不需要 CSR(证书签名请求)文件,这是因为根证书是自签名的。具体来说,根证书的生成过程和普通证书不同,以下是详细解释:
什么是根证书?
根证书是公钥基础设施(PKI)中的顶级证书,它用来签署其他证书,包括中间证书和最终用户证书。根证书通常由证书颁发机构(CA)生成和自签名。
自签名证书和CSR的区别
1. 自签名证书
自签名证书是由自身私钥签名的证书。因为它是信任链的起点,所以不需要外部的证书颁发机构(CA)来签署。这就是为什么在生成根证书时不需要 CSR 文件的原因。
生成自签名根证书的过程如下:
- 生成一对密钥(公钥和私钥)。
- 使用私钥签署生成的证书。
2. 生成服务端证书
2.1生成服务端私钥
openssl genrsa -out server.key 2048
创建OpenSSL配置文件
创建一个名为openssl.cnf的文件,并添加以下内容:
[ req ]
default_bits = 2048
default_keyfile = server.key
distinguished_name = req_distinguished_name
prompt = no[ req_distinguished_name ]
C = CN
ST = Shanghai
L = Shanghai
O = CodeProject
OU = Development
CN = example.com
生成CSR
确保server.key文件和openssl.cnf文件在同一个目录下,然后运行以下命令:
openssl req -new -config openssl.cnf -key server.key -out server.csr
使用根证书签署服务端证书
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256
参数解释:
x509: 用于处理X.509证书的命令。-req: 表示输入是一个证书签名请求(CSR)。-in server.csr: 指定输入文件名为server.csr,这是前面生成的CSR文件。-CA rootCA.crt: 指定用作CA的根证书文件rootCA.crt。-CAkey rootCA.key: 指定用于签署的根证书私钥文件rootCA.key。-CAcreateserial: 如果没有rootCA.srl文件,创建一个新的序列号文件。-out server.crt: 指定输出文件名为server.crt,这是生成的服务端证书。-days 365: 证书的有效期为365天(1年)。-sha256: 使用SHA-256哈希算法。
类比解释:信任关系
假设有一个大公司(根证书),公司里有一个高管(服务端证书),还有许多员工(客户端)。公司决定了一套信任规则来管理所有员工的工作和身份验证。
-
大公司发布了自己的信任凭证(根证书):
- 大公司自己发布了一个“公司章”(自签名证书),所有员工都认可这个公司章。
- 这个公司章表示大公司本身是可信的,不需要别人来验证它,因为所有人都知道它并信任它。
-
高管获得了公司的信任凭证(服务端证书):
- 高管需要一个身份验证(服务端证书),于是公司用自己的公司章给高管发布了一个高管身份验证文件。
- 这个文件上盖有公司章(根证书签名),所以所有员工都可以验证这个文件的真实性。
-
员工信任公司的信任凭证(客户端信任根证书):
- 公司在入职培训时告诉所有员工,任何带有公司章的文件都是可信的。
- 因此,员工会把公司章(根证书)存储在他们的记忆中,并用它来验证任何带有公司章的文件。
更新服务端证书
现在,高管的身份验证文件(服务端证书)即将过期,需要更新:
-
高管申请新文件:
- 高管向公司申请一个新的身份验证文件(新的服务端证书)。
- 公司用自己的公司章(根证书)再次签署并发布新的身份验证文件。
-
员工验证新的高管文件:
- 新的身份验证文件依然带有公司章(根证书签名)。
- 员工使用存储在他们记忆中的公司章(客户端信任的根证书)来验证新的文件。
关键点
- 根证书(公司章)始终是相同的:根证书是公司自己签发并受信任的,所以它在信任链的最顶端。
- 签名链的完整性:无论高管的身份验证文件(服务端证书)更新多少次,只要它是由根证书(公司章)签署的,员工(客户端)就能验证其真实性。
- 客户端只需要信任根证书:客户端(员工)只需要一次性信任根证书(公司章)。之后,任何由这个根证书签署的证书(身份验证文件)都能被验证成功。
总结
由根证书签发的服务端证书,即使更新了,客户端依然能验证成功的原因在于:
- 客户端只需要信任一次根证书。
- 任何由根证书签署的证书,都能被客户端验证。
- 更新后的服务端证书依然由同一个根证书签署,确保了信任链的完整性。
通过这个类比,您可以更直观地理解根证书和服务端证书之间的信任关系,以及为什么客户端在根证书不变的情况下可以持续信任更新后的服务端证书。
相关文章:
SSL 自定义证书创建过程
1、生成自签名根证书和私钥 1.1 生成根证书 1.1.1生成根证书私钥 首先,生成一个自签名的根证书和私钥。这个根证书将作为信任锚(Trust Anchor),客户端会信任由这个根证书签署的所有证书。 openssl genrsa -out rootCA.key 204…...
javaSwing飞机订票系统
摘要 Java swing实现的飞机票预定系统,系统数据库原本采用的是Oracle,我又改了一个mysql版本的,所以这套系统有两个版本,一个是mysql数据库版的,一个是Oracle数据库版 一. 已经完成的功能 : …...
赶紧收藏!2024 年最常见 20道 Redis面试题(四)
上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(三)-CSDN博客 七、Pipeline有什么好处,为什么要用pipeline? Redis Pipeline 是一种批量执行命令的技术,它允许客户端一次性发送多个命令…...
虚拟列表 vue-virtual-scroller 的使用
npm 详情:vue-virtual-scroller - npm (npmjs.com) 这里我使用的是RecycleScroller。 App.vue <template><RecycleScrollerclass"scroller":items"items":item-size"54"v-slot"{ item }"><list-item :it…...
前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练
前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练 HTML渲染基础回顾重绘与重排的概念重绘(Repaint)重排(Reflow) 区别与影响实战示例:优化策略与代码演示示例1:避免…...
【C/C++笔试练习】TCP、IP广播、ARP协议、IP路由器、MAC协议、三次握手、TCP/IP、子网划分年、会抽奖、抄送列表
文章目录 C/C笔试练习选择部分(1)TCP(2)IP广播(3)ARP协议(4)IP路由器(5)MAC协议(6)三次握手(7)TCP/IP…...
线程的概念和控制
文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一…...
PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力
PHS树脂(聚对羟基苯乙烯)为KrF光刻胶专用树脂 本土企业具备百公斤级别量产能力 PHS树脂又称聚对羟基苯乙烯树脂、聚羟基苯乙烯树脂,指以对羟基苯乙烯作为基材制成的光刻胶树脂。与其他光刻胶树脂相比,PHS树脂具有极佳热稳定性、化…...
Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明
Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 一、简单介绍 二、单变量非线性变换 三、自…...
uniapp-自定义navigationBar
封装导航栏自定义组件 创建 nav-bar.vue <script setup>import {onReady} from dcloudio/uni-appimport {ref} from vue;const propsdefineProps([navBackgroundColor])const statusBarHeight ref()const navHeight ref()onReady(() > {uni.getSystemInfo({success…...
多式联运奇迹:探索 GPT-4o 的尖端功能
取得的显着进展的DigiOps与人工智能已经标志着重要的里程碑,随着时间的推移塑造了人工智能系统的能力。从早期基于规则系统的出现机器学习和深入学习,人工智能已经发展得更加先进和通用。 生成式预训练 Transformer (GPT) by OpenAI 已特别值得注意。每…...
前端 CSS 经典:好看的标题动画
前言:好看的标题动画实现。 效果: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…...
Vue项目打包优化(element+echarts+vue使用cdn)
如何打包查看所有资源大小? 使用插件:webpack-bundle-analyzer 效果图: 安装webpack-bundle-analyzer 第一步,终端执行 npm instatll webpack-bundle-analyzer --save-dev第二步,vue.config.js配置 module.export…...
【ARM 嵌入式 C 入门及渐进 6.1 -- ARMv8 C 内嵌汇编写系统寄存器的函数实现】
请阅读【嵌入式开发学习必备专栏】 文章目录 ARMv8 C 内嵌汇编写系统寄存器 ARMv8 C 内嵌汇编写系统寄存器 在ARMv8架构下,使用C语言结合内嵌汇编实现将一个值写入特定系统寄存器的函数可以按照下面的方法进行。 下面这个示例展示了如何将一个uint64_t类型的值写入…...
ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信
文章目录 1 准备2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事项 3 验证 1 准备 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_started\softAP softAP工程演示将ESP32作为AP,即热点,使手机等终端可以连接参考工程 Esp…...
【课后练习分享】Java用户注册界面设计和求三角形面积的图形界面程序
目录 java编程题(每日一练): 问题一的答案代码如下: 问题一的运行截图如下: 问题二的答案代码如下: 问题二的运行截图如下: java编程题(每日一练): 1.…...
三维空间坐标系变换(旋转平移)
在探究三维空间下的变换前,首先研究二位空间,因为比较直观,再推广到三维空间。 首先应该清楚的一点是:旋转、平移对于坐标系下的点以及坐标系本身而言都是相对的(运动的相对性)。 例如: X O Y …...
OC笔记之foundation框架
OC学习笔记(三) 文章目录 OC学习笔记(三)常用Foundation框架结构体NSRangeNSRange结构体的定义定义 NSRange 的方法打印Range的相关信息NSRange的实际运用查找子字符串返回NSRange结构体 NSPointNSRect NSStringNSString的创建NSS…...
Docker部署springboot包并联通MySQL
Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信(如MySQL访问、Redis访问)多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置 这里使用多yaml配置文件&…...
多帧激光点云基于标定参数进行融合拼接
1、前言 在三维视觉技术蓬勃发展的今天,点云作为捕获和表示三维环境的基础数据形式,扮演着至关重要的角色。点云融合拼接技术,作为连接孤立点云片段、构建连续、全面三维场景的核心过程,对于自动驾驶、机器人导航、三维建模以及地…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
