如何让nginx支持https
https会导致站点性能下降,但如果安全摆在首位,或者你是土豪,也可以启用https,倍儿有面子。接下来就介绍一下如何在nginx中启用https
-
创建网站证书存放目录
$ mkdir /usr/local/nginx/conf/ssl $ cd /usr/local/nginx/conf/ssl
-
制作CA证书
$ openssl genrsa -des3 -out ca.key 2048 $ openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
-
生成nginx服务器所需证书,并用CA签名
$ openssl genrsa -des3 -out client.key 1024 $ openssl req -new -key client.key -out client.csr $ openssl x509 -req -in client.csr -out client.pem -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
-
查看证书文件
$ pwd /usr/local/nginx/conf/ssl $ ls ca.crt ca.key ca.srl client.csr client.key client.pem
-
修改nginx配置 在配置文件中增加
ssl on; ssl_certificate /usr/local/nginx/conf/ssl/client.pem; ssl_certificate_key /usr/local/nginx/conf/ssl/client.key;
-
重新启动nginx
$nginx -s reload
哦,表面上一切正常,可是如果查看日志的话,你会发现类似下面的错误
2500#0: SSL_CTX_use_PrivateKey_file("/usr/share/nginx/ssl/client.key") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:problems getting password error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
怎么回事?
原来私钥证书的密码问题,解决方法如下:
$openssl rsa -in client.key -out unclient.key
输入俩次私钥的密码:123456。这里假定你刚开始设定的密码是123456。 把unclient.key 文件修改为client.key。 重启nginx 问题解决。
整个过程很简单吧。什么?nginx,我的可是apache. -_-~