为了给全站加上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,这样就可以了。