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

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手机?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>