如何自签发HTTPS证书

=Start=

缘由:

在测试给Nginx新增模块的时候想试试HTTPS的配置方式,但是手上又没有多的域名了,原本想着是用IP申请一个免费的Let’s Encrypt的HTTPS证书的,照着「Let’s Encrypt,免费好用的 HTTPS 证书」操作了之后才发现——它已经不支持给IP配置HTTPS证书了;没办法,只好先自签发一个HTTPS证书做测试。

之前做过几次,但没有记录下来,所以现在想配置又需要去网上找,试了几个之后终于找到一个靠谱的文章「为nginx配置https并自签名证书」,照着一步一步执行了一遍,测试OK。所以在此记录一下,方便以后参考。

正文:

参考解答:
1、制作CA证书:

制作CA的私钥(ca.key):

openssl genrsa -des3 -out ca.key 2048

制作一个不需要密码的CA私钥(用处参见「给博客添加STARTSSL的免费SSL证书」):

openssl rsa -in ca.key -out ca_decrypted.key

制作CA的证书(ca.crt):

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
2、制作网站(或IP)的证书并用CA签名认证

在这里,假设网站的域名为 blog.crazyof.me

制作 blog.crazyof.me 的证书私钥:

openssl genrsa -des3 -out blog.crazyof.me.pem 1024

制作一个不需要密码的 blog.crazyof.me 的证书私钥:

openssl rsa -in blog.crazyof.me.pem -out blog.crazyof.me.key

生成签名请求:

openssl req -new -key blog.crazyof.me.pem -out blog.crazyof.me.csr

在common name中填入网站域名,如 blog.crazyof.me 即可生成该站点的证书,同时也可以使用泛域名如 *.crazyof.me 来生成所有二级域名可用的网站证书。

用CA进行签名:

openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile ca.key -in blog.crazyof.me.csr -out blog.crazyof.me.crt

其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。

如果在执行签名命令时,出现「 `unable to open ‘/etc/pki/CA/index.txt’` 」的错误,可以通过修改 /etc/pki/tls/openssl.cnf 中 「`dir = ./CA`」,然后:

mkdir -p CA/newcerts
touch CA/index.txt
touch CA/serial
echo "01" > CA/serial

再重新执行签名命令。

最后,把 ca.crt 的内容粘贴到 blog.crazyof.me.crt 后面。这个比较重要!因为不这样做,可能会有某些浏览器不支持。

好了,现在 HTTPS 需要的网站私钥 blog.crazyof.me.key 和 网站证书 blog.crazyof.me.crt 都准备完毕了。之后就可以开始配置Nginx了。

参考链接:

=END=

《如何自签发HTTPS证书》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注