Knight000's Blog

随缘写写,不定时更新

0%

生成包含多域名的自签名证书

一切的开始

为什么会写下这篇blog呢?才不是因为好久没写blog想写点什么呢

因为我想给我的Nginx小工具加点功能,至于为什么要用到证书呢…这个就不深入说了。

需要准备的东西

首先,你需要一个openssl,下载安装后如果输入指令没反应请尝试重启电脑/添加环境变量这样的基本操作,当然直接使用OpenSSL Command Prompt也是不错的选择。

然后,你需要一个趁手的文本编辑器,这里推荐的是VSCodeNotepad++

一切就绪后,弄一个空文件夹,然后找到openssl安装目录,把bin\cnf里面的样板cnf拷贝出来,也就是openssl.cnf

那么开始吧

修改.cnf

首先,你需要修改刚刚拷贝过来的openssl.cnf

[ req ]里增加req_extensions = v3_req

[ req_distinguished_name ]下所有代有0.开头的0.去掉

[ v3_req ]里新增subjectAltName = @alt_names

[ CA_default ][ tsa_config1 ]里的dir一栏,把里面的示例路径换成你新建文件夹的路径

虽然不知道有没有影响但是非常不建议用中文路径

然后就是重点了,要生成包含多域名的证书,在cnf底部加上[ alt_names ]

1
2
3
4
[ alt_names ]
DNS.1=第一个域名
DNS.2=第二个域名
DNS.N=第N个域名

这样就设置好了,注意,域名可以跟Nginx里一样像*. example.com写。

进入证书生成步骤

注意,本节的指令均在新建的文件夹里运行

生成必须文件

在文件夹里新建一个名为index的文本文档index.txt

在文件夹里新建一个名为serial的文件serial,并且里面要有ANSI编码的00

注意:

  • 如果是在windows10环境下使用echo 00 > serial来创建serial文件的,默认编码不是ANSI所以会导致后面报错

生成ca证书和密钥

1
2
openssl genrsa 2048 > ca.key
openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cnf

注意:

  • 这一步会要求设置密码,如果密码过短会报错。

使用ca证书生成server证书和签名请求

1
2
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config openssl.cnf

注意:

  • 这一步的Common Name 请写上[ alt_names ]里的其中一个域名,(server)的名字不重要,这里也可以改成你想要的其他名字

签署server.crt

1
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

这里会要求输入你生成ca的时候设置的密码。一路y下去之后就完成了。

Nginx的一些设置

把你生成好的证书和密钥放进nginxconf/文件夹里,当然这里建议单独建立一个文件夹来存放证书,然后就可以通过修改nginx.conf来愉快的使用https了。

1
2
3
ssl on;
ssl_certificate ca/server.crt;
ssl_certificate_key ca/server.key;

结束了

为了方便,也可以把签署的指令写在批处理文件里,比如这样

1
2
3
4
@echo off
@echo password:不记得密码的话可以写在这里提醒自己
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf
pause

这样修改完openssl.cnf后,就可以很方便的签署证书了。

参考资料

https://blog.51cto.com/colinzhouyj/1566438

https://blog.csdn.net/shasharoman/article/details/79577975

https://blog.51cto.com/colinzhouyj/1564916