Nginx配置SSL安全证书及解决PEM_read_bio:bad end line error错误

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

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

1
2
3
4
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如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下面这段是强制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服务

1
/etc/init.d/nginx restart

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

1
2
3
[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,果然让我们找到了问题所在:

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

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

1
2
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

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

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

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!

请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注