为nginx配置https并自签名证书

为了使网站可以使用加密的方式访问, 我们有时需要配置https, 此文章简单介绍一下方法.
##把证书准备好。

###制作CA证书:

ca.key CA私钥:

openssl genrsa -des3 -out ca.key 2048

制作解密后的CA私钥(一般无此必要):

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

ca.crt CA根证书(公钥):

openssl req -new -x509 -days 7305 -key ca.key -out ca.crt

###制作生成网站的证书并用CA签名认证
在这里,假设网站域名为blog.archean.me

生成blog.archean.me证书私钥:

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

制作解密后的blog.archean.me证书私钥:

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

生成签名请求:

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

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

用CA进行签名:

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

其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。
如果在执行签名命令时,出现I am unable to access the ../../CA/newcerts directory

修改/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.archean.me.crt后面。这个比较重要!因为不这样做,可能会有某些浏览器不支持。
好了,现在https需要到的网站私钥blog.archean.me.key和网站证书blog.archean.me.crt都准备完毕。接下来开始配置服务端。

##配置nginx
新开一个虚拟主机,并在server{}段中设置:

listen 443;
ssl on;
ssl_certificate /path/to/blog.archean.me.crt;
ssl_certificate_key /path/to/blog.archean.me.key;

其中的路径是刚刚生成的网站证书的路径。

然后使用一下命令检测配置和重新加载nginx:

检测配置:

nginx -t

重新加载:

nginx -s reload

这里是nginx官方的关于https的文档,可以作为参考。

为nginx配置https并自签名证书

https://archeanz.com/2013/10/16/enable-nginx-ssl/

Author

Archean Zhang

Posted on

2013-10-16

Updated on

2022-07-11

Licensed under

Comments