在StartSSL上申请了免费一年的证书,把申请到的key和crt文件放到/usr/local/nginx/conf/ssl/目录下,并命名为ssl.key和ssl.crt,对于申请的StartCOM Class1证书还需要以下命令,合并证书链:
wget http://cert.startssl.com/certs/ca.pem
wget http://cert.startssl.com/certs/sub.class1.server.ca.pem
mv ca.pem startssl.ca.crt
mv sub.class1.server.ca.pem startssl.sub.class1.server.ca.crt
cat startssl.sub.class1.server.ca.crt startssl.ca.crt > startssl.chain.class1.server.crt
cat ssl.crt startssl.chain.class1.server.crt > yourdomain.chained.crt
然后修改Nginx的配置文件nginx.conf如下:
# 下面这段是强制80端口非SSL客户端转向至https安全连接
# 如果希望保留http非安全连接,请去掉这里
server {
listen 80;
server_name www.example.com; # 你自己的域名
rewrite ^(.*) https://$server_name$1 permanent;
}
# 这里是SSL的相关配置
server {
listen 443 ssl;
server_name www.example.com; # 你自己的域名
root /home/www; # 你的网站目录
ssl on;
ssl_certificate /usr/local/nginx/conf/ssl/yourdomain.chained.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/ssl.key;
}
nginx官方SSL相关资料:http://nginx.org/en/docs/http/configuring_https_servers.html#chains
使用下面的命令重启nginx服务
/etc/init.d/nginx restart
一般情况下nginx能正常重启,并且SSL证书可以正确配置,但是有时会出现下面的错误提示:
[emerg]: SSL_CTX_use_certificate_chain_file("/usr/local/nginx/conf/ssl/server.crt")
failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib)
configuration file /usr/local/nginx/conf/nginx.conf test failed
这个的意思就是ssl.crt读取到意外错误行,回忆一下刚才的操作,这个是StartSSL提供的crt证书,然后我们使用cat将证书链合并到这个证书里的,那么问题可能就出在合并这个环节,使用vi或者nano命令打开并编辑ssl.crt,果然让我们找到了问题所在:
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
可以看到原先占用一行的标记证书的分隔符,现在连到一起了,我们需要用换行将他们分开,注意问题左右的短横线最好一样多:
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
好,做好后,保存这个crt文件,再次重启Nginx服务,输入申请证书时私钥的密码,SSL启用成功!