提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

StartSSL 上申请了免费一年的证书,本来想配置到nginx里的,把申请到的key和crt文件放到/etc/nginx/certs/目录下,并命名为server.key和server.crt,对于申请的StartCOM Class1证书还需要以下命令,合并证书链:

wget http://cert.startssl.com/certs/ca.pem
wget http://cert.startssl.com/certs/sub.class1.server.ca.pem
cat ca.pem sub.class1.server.ca.pem >> ca-certs.crt
cat ca-certs.crt >> server.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;
  server_name www.example.com; # 你自己的域名
  root /home/www;
  ssl on;
  ssl_certificate /etc/nginx/certs/server.crt;
  ssl_certificate_key /etc/nginx/certs/server.key;
}

使用下面的命令重启nginx服务

/etc/init.d/nginx restart

一般情况下nginx能正常重启,并且SSL证书可以正确配置,但是有时会出现下面的错误提示:

[emerg]: SSL_CTX_use_certificate_chain_file("/etc/nginx/certs/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 /etc/nginx/conf/nginx.conf test failed

这个的意思就是server.crt读取到意外错误行,回忆一下刚才的操作,这个是StartSSL提供的crt证书,然后我们使用cat将证书链合并到这个证书里的,那么问题可能就出在合并这个环节,使用vi或者nano命令打开并编辑server.crt,果然让我们找到了问题所在:

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

可以看到原先占用一行的标记证书的分隔符,现在连到一起了,我们需要用换行将他们分开,注意问题左右的短横线最好一样多:

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

好,做好后,保存这个crt文件,再次重启Nginx服务,输入申请证书时私钥的密码,SSL启用成功!

下面还有一些设置请参考文章 《Nginx配置SSL安全证书并解决HTTPS的400 Bad Request问题》