为 nginx 配置 https

2016/7/20 posted in  坏笔记不如好记性

为了给全站加上https,需要先获得一个经过CA签名的证书,恰好startssl提供免费的证书,所以我就有了折腾https的机会。

首先,要在本地生成一个证书:

openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr

一定要记好生成key的密码,在启动nginx的时候需要用到,执行完之后就获得了一个csr文件,把这个csr文件上传到startssl,就可以获得被startssl签名的证书:

然后把自己生成的key和在startssl,把这两个文件copy服务器上

cp 1_api.updev.cn_bundle.crt /usr/local/nginx/conf/server.crt
cp api.key /usr/local/nginx/conf/server.key

在nginx的server里配置:

ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;

并把之前监听80端口改为监听443端口,之后重启nginx,这时会提示输入Enter PEM pass phrase,需要输入之前生成key文件时设置的密码,完成后,nginx重启成功。

这时便完成了https的配置。

然而,在重启nginx的时候却需要输入两次密码,比较蛋疼,而且使用daocloud或七牛的https时,带密码的key是不被支持的,所以我们可以生成一个不带密码的key,这样可以避免每次重启nginx都需要输入密码。而且也可以使用daocloud和七牛的https功能。

我们可以使用 openssl rsa -in server.key -out server.key.unsecure命令来生成一个不带密码的key,然后把server.key.unsecure按照之前的配置就可以了。

而使用daocloud的https时,需要提供startssl签名的crt文件(nginx版)和不带密码的key,这样就可以了。