如何通过OpenSSL来创建自签名的CA证书?

news2024/11/24 15:16:40

通过创建自签名CA证书可以让我们在没有商业支持的情况下学习与研究PKI(公钥基础设施)和SSL/TLS技术,本文将详细介绍如何通过OpenSSL来创建自签名的CA证书。

1. 初衷:为什么需要创建自签名CA证书?

除了开篇引言中提到的学习研究用途外,自签名证书也常见于以下三种场景:

  • 开发和测试环境:这类环境通常不需要使用全球公认的第三方CA证书,创建自签名CA证书就可以避免依赖外部CA,简化证书管理流程,并且可以快速生成和测试证书。

  • 企业内部网络:自签名CA证书可以用于验证内部设备的身份,确保数据传输的安全性。例如,在VPN网关、服务器和客户端之间建立安全连接时,使用自签名CA证书可以有效防止中间人攻击。

  • 小型企业/个人项目:对于一些小型企业或个人项目,购买第三方CA证书可能成本较高。在这种情况下,创建自签名CA证书可以节省费用,同时满足基本的安全需求。

2. 准备工作

首先确保系统上已安装了 OpenSSL。大多数现代 Linux 发行版都已经预装了 OpenSSL。可以通过命令openssl version来确认是否已经安装了OpenSSL。

查看版本

如果没有安装,可以通过包管理器进行安装。

  • Debian/Ubuntu: sudo apt-get install openssl
  • CentOS/RHEL: sudo yum install openssl

3. 具体步骤

使用OpenSSL创建自签名证书的可分为两大步,具体如下。

3.1. 生成CA私钥

使用openssl genpkey命令生成RSA算法的私钥文件。例如,可以使用以下命令生成一个密钥长度为2048 位的RSA私钥,并将其保存为ca_private.key文件。

openssl genpkey -algorithm RSA -out ca_private.key

这个私钥会用于后续的证书签名。当然以上命令中也可以使用ECC算法。实现相同的安全级别所需的RSA和ECC密钥长度如下表所示,可见ECC密钥更短。然而,ECC主要用于密钥交换和数字签名的管理,而不是加密。

RSA VS ECC

3.2. 使用生成的CA私钥创建CA证书

使用openssl req -x509命令来生成证书,并设置有效期为3650天,同时指定主题信息(如CN、O等)。命令如下:

openssl req -new -x509 -key ca_private.key -out ca_certificate.crt -days 3650 -subj "/C=CN/CN=FullStackSecurity/O=FSS/L=HZ/ST=ZheJiang"

这个命令会生成一个有效期为十年的自签名证书ca_certificate.crt,证书为PEM格式。

生成CA证书ca_certificate.crt

具体命令参数说明如下:

  • openssl req: OpenSSL用于处理证书签名请求(CSR,certificate signing request)的命令。
  • new: 表示创建新的CSR。
  • x509: 表示生成X.509格式的证书。
  • days 3650: 表示证书的有效期为10年。
  • key ca_private.key: 设置生成证书的私钥文件为 ca_private.key。
  • **subj “/C=CN/CN=FullStackSecurity/O=FSS/L=HZ/ST=ZheJiang” **: 用于设置证书主题信息,主要字段含义‌如下:
    • Country ©‌:个体所在地的国家代码。
    • Common Name (CN)‌:通常是个体的名称或主机名。
    • Organization (O)‌:个体所属的组织。
    • Locality (L)‌:个体所在地的城市或地理位置。
    • State (ST)‌:个体所在地的州或省份。

执行命令openssl x509 -in ca_certificate.crt -text -noout查看证书详情。

CA证书详情

从上图我们可以看出X509v3 Subject Key IdentifierX509v3 Authority Key Identifier的值是相同的,前者是此证书的唯一编号,后者是签发此证书的证书的唯一编号,再结合 X509v3 Basic Constraints 的 CA:TRUE 字样,可以判定出当前证书是一个自签名的CA根证书。

现在,由此证书签名的任何证书都将具有相同的颁发者详细信息。

Issuer: C=CN, CN=FullStackSecurity, O=FSS, L=HZ, ST=ZheJiang

4. 安装CA证书

计算机将根据其内部的信任存储(通常是操作系统或浏览器内置的受信任证书列表)来判断证书是否来自一个可信赖的来源。只有当证书链中的所有证书都被认为是可信的,并且最终指向了一个本地信任存储中的根证书时,整个证书链才会被认为可信。

系统预置的根证书

如果想让上面创建的CA证书以及后续用此证书颁发其他数字证书都被计算机信任,我们需要将此CA根证书安装到信任列表中。比如在MAC电脑上直接双击即可完成安装。

添加系统信任

从上图中可以看到,上面生成的CA根证书已经安装到了系统中。此后由该CA根证书颁发的其他证书均会被系统信任。

5. 写在最后

本文主要介绍了如何利用OpenSSL生成自签名的CA根证书,接下来博主会继续发文介绍:

  • 如何利用该根证书签署其他证书(即子证书),包括服务器证书和其他类型的证书;
  • 介绍客户端验证整个证书链的详细过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac安装Pytest、Allure、brew

安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令:brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…

Python中“暂停”(time.sleep?input?)

input函数最是经典,在多种实现中简单粗暴单纯而经济。 (笔记模板由python脚本于2024年11月22日 10:58:38创建,本篇笔记适合比较熟悉python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大…

刷题——【模板】二维前缀和

前缀和 题目题目链接题解方法一方法二 题目 描述 给你一个 n 行 m 列的矩阵 A ,下标从1开始。 接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2 请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和, 输入描述&#x…

10 - Clickhouse集群部署以及副本和分片

目 一、副本 1、简介 2、副本写入流程 3、副本配置步骤 3.1、启动zookeeper集群 3.2、在 hallo100 的/etc/clickhouse-server/config.d 目录下创建一个名为metrika.xml 的配置文件,内容如下: 3.3、在 hallo100 的/etc/clickhouse-server/config.xml 中增加如…

Ubuntu24.04LTS设置root用户可远程登录

Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…

DMA理论篇

DMA理论篇 简介 传统的数据传输都是需要CPU来实现,从一个地方拷贝到另一个地方;而DMA(Direct Memory Access)则不完全依赖CPU,DMA更新芯片SOC的一个控制器,他可以控制数据从内存中传输到另一个地方(外设、soc其它模块)&#xff…

理解原子变量之三:原子性与memory_order_relaxed

目录 CPU与内存的关系 原子性 典型使用场景 在本系列的第一篇文章理解原子变量之一:从互斥锁到原子变量,最粗浅的认识_原子互斥-CSDN博客,我通过几个实例从感性认识的角度介绍了原子性。本文在第一篇文章的基础上,从理性认识的…

医院信息化与智能化系统(22)

医院信息化与智能化系统(22) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

青少年编程等级考试C++一级,硬币反转问题

代码 #include<iostream>using namespace std;bool a[300];int main(){ int n,m; cin >> n >> m; for(int i 1;i < m;i) { for (int j 1;j < n;j) { if( j % i 0) { a[j] !a[j];…

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

动态规划子数组系列一>最长湍流子数组

1.题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxTurbulenceSize(int[] arr) {int n arr.length;int[] f new int[n];int[] g new int[n];for(int i 0; i < n; i)f[i] g[i] 1;int ret 1;for(int i 1; i < n-1; i,m. l.kmddsfsdafsd){int…

(十一)Python字符串常用操作

一、访问字符串值 Python访问子字符串变量&#xff0c;可以使用方括号来截取字符串。与列表的索引一样&#xff0c;字符串索引从0开始。 hh"LaoTie 666" hh[2] mm"床前明月光" mm[3] 字符串的索引值可以为负值。若索引值为负数&#xff0c;则表示由字符…

Sigrity SPEED2000 DDR simulation模式如何生成和解读DDR仿真报告-SODIMM-Write模式

Sigrity SPEED2000 DDR simulation模式如何生成和解读DDR仿真报告-SODIMM-Write模式 Sigrity SPEED2000 DDR simulation模式如何进行DDR仿真分析操作指导-SODIMM-Write模式详细介绍了如何进行DDR Write模式的仿真分析,下面基于此仿真结果进行DDR报告的输出和解读分析 在workfl…

【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)

识别逻辑 深度学习 使用了端到端的学习策略&#xff0c;直接学习从图像到检测结果的映射关系&#xff0c;自动提取特征&#xff0c;并且根据特征与特征之间的关系&#xff0c;计算出检测结果。 传统算法 则是人工提取特征&#xff0c;比如边缘特征&#xff0c;直线特征&#x…

TypeScript 系统学习 章节3

想学习 TypeScript 的小伙伴看过来&#xff0c;本文将带你一步步学习 TypeScript 入门相关的十四个知识点&#xff0c;详细的内容大纲请看下图&#xff1a; 一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c…

opencv undefined reference to `cv::noarray()‘ 。window系统配置opencv,找到opencv库,但连接不了

之前都是在ubuntu里用opencv&#xff0c;今天为了方便在平时用Window10系统也用下c版的cv&#xff0c;就想配置一下vscode的cv环境&#xff0c;直接下载了一个编译好的opencv库&#xff08;带build文件夹的&#xff09;&#xff0c;刚开始用的是visual studio的编译器&#xff…

利用FileZilla搭建ftp服务器

一 利用windows自带的ftp服务搭建服务器&#xff0c;要复杂一些&#xff0c;好处是无需借用外部软件。 也有一些好的工具&#xff0c;如FileZilla的Server版&#xff0c;构建过程简单&#xff0c;好用。 下面看看。 二 安装FileZilla Server 当前下载版本是0.9.43&#xf…

【刷题21】BFS解决FloodFill算法专题

目录 一、图像渲染二、岛屿数量三、岛屿的最大面积四、被环绕的区域 一、图像渲染 题目&#xff1a; 思路&#xff1a; 如果起始位置的颜色(数值)与color相同&#xff0c;直接返回该数组上下左右一层一层的找与当前位置颜色相同的&#xff0c;并且该位置不越界&#xff0c;然…

DICOM核心概念:显式 VR(Explicit VR)与隐式 VR(Implicit VR)在DICOM中的定义与区别

在DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;标准中&#xff0c;VR&#xff08;Value Representation&#xff09; 表示数据元素的值的类型和格式。理解显式 VR&#xff08;Explicit VR&#xff09;与隐式 VR&#xff08;Implicit VR&#…

【Isaac Sim】加载自带模型或示例时报 Isaac Sim is not responding

Isaac Sim对电脑配置要求很高&#xff0c;开机第一次打开 Isaac Sim 时&#xff0c;直接就报 Isaac Sim is not responding 卡死了&#xff0c;这是由于第一次需要加载一些资源&#xff0c;耗时会导致 Isaac Sim 无响应&#xff0c;这里等一会会自动给回复。 加载自带模型或示…