nginx配置HTTPS

PS:设置HTTPS nginx需要添加ssl模块 –with-http_ssl_module
在nginx的conf目录下新增ssl目录,并进入。
生成服务器端的私钥(key文件):
1
openssl genrsa -des3 -out server.key 2048

nginx配置HTTPS

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!

去除key文件口令的命令:

1
openssl rsa -in server.key -out server.key

用刚生成的服务器私钥,生成证书请求文件。
1
openssl req -new -key server.key -out server.csr

nginx配置HTTPS

生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.

同样的命令生成生成客户端的私钥(key 文件)和证书请求文件Certificate Signing Request(CSR)
1
openssl genrsa -des3 -out client.key 2048

nginx配置HTTPS

1
openssl req -new -key client.key -out client.csr

nginx配置HTTPS

生成的CSR证书文件必须有CA的签名才可形成证书。这里制作自己的CA, 这时生成一个KEY文件ca.key 和根证书ca.crt。默认生成CA证书有效期是一个月,可以添加-days 365,设置有效期即为365天。
1
openssl req -new -x509 -keyout ca.key -out ca.crt -days 365

nginx配置HTTPS

签署证书准备工作:

nginx配置HTTPS

1
2
3
4
5
6
[root@centos65 ssl]# vim /etc/pki/tls/openssl.cnf
#修改如下
dir = /etc/pki/CA
#根据openssl.cnf生成配置文件
[root@centos65 ssl]# touch /etc/pki/CA/{index.txt,serial}
[root@centos65 ssl]#echo 01 > /etc/pki/CA/serial
用生成的CA的证书(ca.crt)为刚才生成的服务器请求文件server.csr生成对应CA签名后的crt文件。默认有效期是365天,命令后增加-days 3650,即设置有效期为3650天。
1
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

nginx配置HTTPS

用生成的CA的证书(ca.crt)为刚才生成的客户端请求文件client.csr生成对应CA签名后的crt文件。注意:可能直接运行会报以下错误,修改对应index.txt.attr文件unique_subject = no,重新运行即可。默认有效期是365天,命令后增加-days 1,即设置有效期为1天。
1
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

nginx配置HTTPS

如果有错误修改

1
2
3
vim /etc/pki/CA/index.txt.attr
#unique_subject = yes
unique_subject = no

然后再重新运行一次
nginx配置HTTPS

这个certificate是BASE64形式的,要转成PKCS12才能装到IE,/NETSCAPE上.转换如下:
1
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

nginx配置HTTPS

最后生成这些文件
nginx配置HTTPS

配置nginx如下:
1
2
3
4
5
6
7
8
9
listen	443 ssl;
server_name alpha.sherp.xyz;
root /opt/project/erp_old_version/Shanghai_erp/public;
index index.php;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_client_certificate ssl/ca.crt;
ssl_session_timeout 5m;
ssl_verify_client on;
最后把client.pfx安装到客户端就可以了