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

文化   2024-10-20 22:26   北京  


正文共: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 /tietoupkicd /tietoupkimkdir ./newcertstouch index.txt serialecho 01 > serial

第二步,创建CA根证书。

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

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

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

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

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

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

为了方便区分证书文件,我们一般通过使用不同的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.pemprivate_key =./cakey.pemnew_certs_dir =./newcertsdatabase =./index.txtserial =./serialdefault_md = sha256policy = policy_anythingemail_in_dn = no[ policy_anything ]countryName = optionalstateOrProvinceName = optionalorganizationName = optionalorganizationalUnitName = optionalcommonName = optionalemailAddress = optional[ req ]distinguished_name = req_distinguished_namereq_extensions = v3_req[ req_distinguished_name ]countryName = JPcountryName_default = CNstateOrProvinceName = Beijing1stateOrProvinceName_default = BeijinglocalityName = Beijing1localityName_default = BeijingorganizationName = tietou1organizationName_default = tietoucommonName = tietou.comcommonName_max = 64emailAddress = tt@tietou.comemailAddress_max = 64[ v3_req ]subjectAltName = @alt_names[alt_names]DNS.1 = tt.com

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

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

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

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

命令如下。

openssl genrsa -out client.key 2048openssl 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

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

OK,没问题,可以用。

长按二维码
关注我们吧

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

铁军哥
高级网络规划设计师,原中国电信高级技术规划工程师,天翼云认证高级解决方案架构师,H3C认证网络工程师。 继续加油,努力传播知识,影响更多人!
 最新文章