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

news/2024/11/25 0:57:19/

通过创建自签名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.ppmy.cn/news/1549678.html

相关文章

【杂记】vLLM如何指定GPU单卡/多卡离线推理

写在前面 仅作个人学习与记录用。主要记录vLLM指定GPU单卡/多卡离线推理的方法。 vLLM官方文档中Environment Variables页面有对指定GPU方法的唯一描述: # used to control the visible devices in the distributed setting "CUDA_VISIBLE_DEVICES": la…

微软在Ignite 2024发布Copilot+新功能

🦉 AI新闻 🚀 微软在Ignite 2024发布Copilot新功能 摘要:微软在Ignite 2024大会上宣布,Microsoft 365 Copilot将利用Copilot PC中的NPU本地运行AI模型,减少网络依赖。此功能将提升用户在Outlook和Word中的AI写作辅助…

Dockerfile复制目录进入镜像里

使用 ADD 复制目录进入镜像里 FROM ubuntu:22.04WORKDIR /rootRUN mkdir -p ./custom_nodes/ComfyUI-FluxTrainerADD ComfyUI-FluxTrainer ./custom_nodes/ComfyUI-FluxTrainerComfyUI-FluxTrainer 是一个目录,需要先 mkdir 创建这个目录,然后ADD 复制进…

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点,就是php可以识别的协议。 类似于我们访问网站的http协议,我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…

C语言——break、continue、goto

目录 一、break 二、continue 1、在while循环中 2、在for循环中 三、go to 一、break 作用是终止循环&#xff0c;在循环内遇到break直接就跳出循环。 注&#xff1a; 一个break语句只能跳出一层循环。 代码演示&#xff1a; #include<stdio.h>void test01() {for (…

Elasticsearch 分词器

一、分词器的作用 分词器&#xff08;Analyzer&#xff09;是Elasticsearch中用于文本分析与处理的组件。它的主要作用是将用户输入的一段文本&#xff0c;按照一定逻辑分析成多个词语。这个过程也叫做文本分析或文本切分。 二、分词器的构成 分词器由三部分组成&#xff1a…

【计算机网络】解决bind error

服务器有时可以立即重启&#xff0c;有时候无法立即重启 — bind error 首先要知道&#xff1a;四次挥手动作完成之后&#xff0c;主动断开连接的一方要维持一段时间的TIME_WAIT bind error原因&#xff1a;因为是服务器主动断开的&#xff0c;所以服务器要去维持TIME_WAIT状…

【element-tiptap】Tiptap编辑器核心概念----内容、扩展与词汇

前言&#xff1a;本篇文章继续来讲Tiptap编辑器的核心概念&#xff0c;主要是内容、扩展、词汇相关的概念 &#xff08;一&#xff09;内容 文档内容被存储在编辑器实例的 state 属性中。所有的修改都会以事务 transaction 的形式应用于 state。state 详细介绍了当前的内容、…