如何使用OpenSSL创建RSA证书文件?

ops/2024/10/23 23:45:45/

30cc239cc7db2c46b95a117313b04488.gif

正文共:1024 字 7 图,预估阅读时间:1 分钟

我们前面介绍了如何通过Windows Server生成证书Windows Server配置生成认证证书,也介绍了如何通过easy-RSA生成证书文件使用Easy-RSA配置生成SSL证书。其实,easy-RSA挺好用的,为啥突然开始介绍OpenSSL了呢?因为前段时间发现easy-RSA无法自动安装了,导致自动部署openVPN的脚本失效了在Ubuntu系统手撸一个自动搭建openVPN服务端的SHELL脚本,急需找一个替代品。

CentOS系统自带的OpenSSL工具可以用于实现各种加密和认证协议,也可以生成证书。如果嫌自带版本低,我们也可以编译安装CentOS编译安装OpenSSL 3.3.1,相关命令操作可以参考OpenSSL命令手册

回顾一下之前使用EasyRSA签发证书的过程,首先要配置机构识别信息并初始化PKI(Public Key Infrastructure,公钥基础设施)信息;然后生成CA(Certificate Authority,证书颁发机构)根证书,再创建服务器端证书和私钥并签名;接下来,创建秘钥交换使用的Diffie-Hellman文件,再创建客户端证书和私钥并签名。如果有需要的话,可以验证证书文件是否存在错误,如果没有问题,证书签发就算成功了。

那换成OpenSSL应该怎么操作呢?

虽然OpenSSL和EasyRSA使用不同的工具和方法来管理PKI,但使用OpenSSL直接创建和签名证书的过程与EasyRSA类似。

第一步,初始化PKI。

需要手工创建一个目录来存储所有的证书和密钥,然后在这个目录下创建必要的文件盒文件夹:

mkdir /tietoupki
cd /tietoupki
mkdir ./newcerts
touch index.txt serial
echo 01 > serial

f0a18a8708030f40435f235b4107e795.png

第二步,创建CA根证书。

在tietoupki目录下运行以下命令以创建CA的PEM、私钥和证书。

openssl genrsa -out cakey.pem 2048
openssl req -new -x509 -days 3650 -key cakey.pem -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=tietou/CN=tietou.com"

fff43701a3c20a264d14cefa2e419911.png

这里用-days 3650来指定证书的有效期为10年。

第三步,创建服务器证书请求。

需要生成一个服务器私钥,同时生成服务器证书请求CSR(Certificate Signing Request),命令如下。

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=tietou/CN=server.tietou.com"

50b0f35f72a7cc1b158f1b4624715abc.png

为了方便区分证书文件,我们一般通过使用不同的Common Name(CN)来区分,可以配置为服务器的域名或IP地址。

接下来,需要使用根CA签署服务器CSR证书。在这里,我们需要一个OpenSSL配置规范文件,常用名为openssl.cnf,可以参考官方文档创建一个(https://www.openssl.org/docs/manmaster/man5/config.html),我这里贴一个供大家参考。

[ ca ]
default_ca = my_ca
[ my_ca ]
dir =.
certificate =./cacert.pem
private_key =./cakey.pem
new_certs_dir =./newcerts
database =./index.txt
serial =./serial
default_md = sha256
policy = policy_anything
email_in_dn = no
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
organizationalUnitName = optional
commonName = optional
emailAddress = optional
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
countryName = JP
countryName_default = CN
stateOrProvinceName = Beijing1
stateOrProvinceName_default = Beijing
localityName = Beijing1
localityName_default = Beijing
organizationName = tietou1
organizationName_default = tietou
commonName = tietou.com
commonName_max = 64
emailAddress = tt@tietou.com
emailAddress_max = 64
[ v3_req ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = tt.com

22deec3a60c057a3940bb28b6dc531a0.png

使用根CA和openssl.cnf签署服务器证书的命令如下:

openssl ca -in server.csr -out server.crt -days 3650 -config openssl.cnf

56bf7da631c7592fc06027c2bce82e7b.png

第四步,创建客户端证书请求。

其实证书可以不区分服务器跟客户端,只是人为加了身份的区别。所以,跟创建服务器证书一样,也是先生成一个客户端私钥,再生成客户端证书请求CSR,最后再使用根CA和openssl.cnf签署客户端证书的命令如下:

命令如下。

openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=tietou/CN=client.tietou.com"
openssl ca -in client.csr -out client.crt -days 3650 -config openssl.cnf

aa55015fd47b2f96256aef27b0ca64ec.png

到这里,我们就完成了根CA证书、服务器证书和私钥、客户端证书和私钥的创建。最后,我们放到openVPN里面试试能不能用。

185776d62da7f8385105ad9fcea53a4b.png

OK,没问题,可以用。

e2edde45b64268ce431a29cd147cbd56.gif

长按二维码
关注我们吧

d1ab5de833a2eec4539b96b5604b9f14.jpeg

966f4e728f36ca73158ff9c9a338b51d.png

IPsec over GRE over IPv6配置案例

使用ddns-go实现自动配置IPv6的DDNS

Android手机安装Kali系统并配置ddns-go

IANA为共享地址空间保留的IPv4前缀

IPv4链路本地地址的动态配置

IP层安全(IPsec)文件路线图

IP网络地址转换器(NAT)的协议复杂性

配置IPv6 over IPv4的手动隧道和自动隧道

使用IKE建立保护IPv6报文的IPsec隧道

pptpd配置文件/etc/pptpd.conf详解

Ubuntu配置PPTP服务端和客户端

使用IKE数字签名RSA认证建立IPsec隧道的配置案例

使用6条命令完成Windows和H3C VSR的IPsec对接

Windows和H3C VSR对接隧道模式的IPsec隧道

使用命令配置Windows和H3C VSR对接隧道模式的IPsec

配置Windows系统对接天翼云VPN连接

太卷了,能配置ADVPN的云主机一年只要37块钱!

如何通过Windows电脑操控Android手机?

不使用USB,Windows电脑如何通过网络操控Android手机?


http://www.ppmy.cn/ops/127946.html

相关文章

pdf文件怎样一张纸打印四页

在日常工作和学习中,我们经常会遇到需要将PDF文件中的多页内容合并打印到一张纸上的情况,比如将四页内容打印到一张A4纸上,以节省纸张和成本。同时,在打开pdf文件的方式,一般都是通过电脑浏览器打印,因此对…

【Redis】数据结构(下)

文章目录 QuickList概念QuickList结构QuickList的特点控制ZipList的大小对节点的ZipList进行压缩 总结 SkipList概念源码中结构分析总结 QuickList 概念 问题1:ZipList虽然节省内存,但是申请的内存必须是连续空间,如果内存占用过多,申请内存效率低,怎么办? 为了缓解这个问题,…

基于SSM+微信小程序的家庭记账本管理系统(家庭1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员端功能有首页、个人中心、用户管理,消费详情管理、收入详情管理、系统管理等。 2、用户端功能有首页、消费详情、收入详情、论坛信息、我的等功能。 2、项目技术 …

将图片转换为视频

方案一:使用Python和imageio库 介绍 Python是一种强大的编程语言,提供了多种库来处理图像和视频。imageio库是一个简单易用的库,可以轻松将图片序列转换为视频。 实现代码 import imageio import osdef images_to_video(image_folder, ou…

鸿蒙应用的Tabs 组件怎么使用

鸿蒙应用中的Tabs组件是一个用于通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。以下是Tabs组件的使用方法: 一、基本结构 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabB…

StarTowerChain:开启去中心化创新篇章

官网: www.startower.fr 在当今创新驱动的时代,StarTowerChain 以其独特的去中心化创新模式,为我们带来了新的希望和机遇。去中心化,这个充满活力与创造力的理念,正引领着我们走向未来的创新之路。 StarTowerChain …

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…

概率论基本知识

随机变量及其分布 1.定义 随机变量是定义在样本空间上的实值函数&#xff0c;它将样本空间中的每一个样本点映射到一个实数上。通常用大写字母&#xff08;如X、Y&#xff09;表示随机变量&#xff0c;而小写字母&#xff08;如x、y&#xff09;表示随机变量的取值。他有两个…