正文共: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
第二步,创建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"
这里用-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"
为了方便区分证书文件,我们一般通过使用不同的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
使用根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 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
到这里,我们就完成了根CA证书、服务器证书和私钥、客户端证书和私钥的创建。最后,我们放到openVPN里面试试能不能用。
OK,没问题,可以用。
长按二维码
关注我们吧