创建自签名证书链

发布于 2023-08-12  217 次阅读


本文主要介绍如何使用OpenSSL对自签证书创建一个证书链,其结构为:

CA-中间CA-证书

主要思路为,使用一个自签名CA,对自签名的中间CA签名,再使用已经被CA签名的中间CA对证书签名,即可得到一条证书链

0. 脚本

使用OpenSSL创建证书链的过程比较繁琐,没有耐心的看官可以使用脚本进行操作~

wget https://raw.githubusercontent.com/LeZi04919/Script/main/CertManger.sh && chmod +x CertManger.sh && bash CertManger.sh

证书默认保存路径为${HOME}/Cert ,CA及中间CA默认路径为${HOME}/Cert/CA

可能会有Bug,还请海涵

1.0 CA证书

请保证你的设备已正确安装OpenSSL!

1.1 证书字段解释

创建证书时,需要填写一些特定字段,其中“CN”与“C”是必填

C:国家代码,若目标所在国家为中国则填写CN
O:组织名,可为空
OU:组织单位,可为空,你也可以写你的网站地址
CN:通用名,一般指颁发对象,若域名所用则CN字段填写域名

1.2 创建CA证书

openssl req -x509 -newkey rsa -outform PEM -out CA.pem -keyform PEM -keyout CA.key -days 36500 -nodes -subj "/C=cn/O=mycomp/OU=mygroup/CN=rootca"

-days参数为指定证书有效期,单位为天,根据自己需要修改即可

2. 中间CA证书

2.1 生成中间CA的CSR(证书请求文件)和key

openssl req -newkey rsa:2048 -outform PEM -out mCA.csr -keyform PEM -keyout mCA.key -nodes -extensions v3_ca -config /usr/lib/ssl/openssl.cnf -subj "/C=cn/O=mycomp/OU=mygroup/CN=intermca"

2.2 使用CA证书对CSR进行签发

openssl x509 -req -days 365 -in mCA.csr -out mCA.pem -CA CA.pem -CAkey CA.key -CAcreateserial -extensions v3_ca -extfile /usr/lib/ssl/openssl.cnf && rm -rf mCA.csr

3. 子证书的签发

3.1 生成子证书的CSR

openssl req -newkey rsa:2048 -outform PEM -out Cert.csr -keyform PEM -keyout Cert.key -nodes -reqexts SAN -extensions v3_req -config <(cat /usr/lib/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server.mycomp.com")) -subj "/C=cn/O=mycomp/OU=mygroup/CN=server"

注意:若你想为你的域名签发一份SSL证书,那么DNS:server.mycomp.com中的server.mycomp.com需修改为你的域名,也就是需要和CN字段保持一致,否则即使是信任了CA证书已经中间CA,浏览器依旧会报证书错误

3.2 使用中间CA进行签发

openssl x509 -req -days 365 -in Cert.csr -out Cert.pem -CA   mCA.pem -CAkey mCA.key -CAcreateserial -extensions SAN -extfile <(cat /usr/lib/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server.mycomp.com")) && rm -rf Cert.csr

这里的DNS:server.mycomp.com也需要根据自己的情况修改

4.0 导入证书

如果想让系统信任整条自签证书链,CA与中间CA均需要导入系统的信任区,这里就不多介绍了

如果自签证书的私钥保管得当,其安全性并不低;如果你在加密上使用自签证书,请务必保管好你的私钥!


世界上本没有博客,直到有了程序员