Https更换证书报错:no start line:Expecting: TRUSTED CERTIFICATE解决方法详解

猩猿动力 猩猿动力 2019年08月09日 21:56:28 阅读 31

今天帮忙朋友更换服务器Https证书遇到一个问题,更换证书后启动Nginx报错,报错详情如下:

2019/08/09 21:07:21 [emerg] 334#334: PEM_read_bio_X509_AUX("/var/www/edu-online/keys/apiserver.crt") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)

 

查看了下朋友给过来的证书文件,内容格式如下:

-----BEGIN NEW CERTIFICATE REQUEST-----
...此处省略一堆字母...
-----END NEW CERTIFICATE REQUEST-----

 

原来还只是csr内容,我们需要通过命令行生成crt格式的密文,将文件重命名后,我得到两个文件:apiServer.csr、apiServer.key。于是对这两个文件执行如下命令:

openssl x509 -req -days 365 -in apiserver.csr -signkey apiserver.key -out apiserver.crt

 

得到crt文件格式如下:

-----BEGIN CERTIFICATE-----
...此处省略一堆字母...
-----BEGIN CERTIFICATE-----

 

这时候启动Nginx,遗憾的是仍然提示报错:no start line:Expecting: TRUSTED CERTIFICATE

思考关键字TRUSTED CERTIFICATE应该有特殊含义,并查阅资料:https://www.openssl.org/docs/man1.1.0/man1/x509.html

最终找到了解决办法,我们需要生成crt的命令是:

openssl x509 -trustout  -req -days 365 -in apiserver.csr -signkey apiserver.key -out apiserver.crt

 

注意,这里多了一个命令-trustout非常关键,它帮忙我们生成了如下格式的crt文件:

-----BEGIN TRUSTED CERTIFICATE-----
...此处省略一堆字母...
-----END TRUSTED CERTIFICATE-----

 

相比之前失败的例子,这次生成的文件我们多了一个关键字:TRUSTED。再次启动Nginx,得到了很棒的回应:Nginx 启动成功!

证书配置成功!。

我的Nginx配置代码如下:(仅供参考)

server {
      listen 80;
      listen 443;
      server_name api.ityuan.com;
      ssl on;
      ssl_certificate /var/www/edu-online/keys/apiserver.crt;
      ssl_certificate_key /var/www/edu-online/keys/apiserver.key;
      ssl_session_timeout 5m;   
      ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
      ssl_prefer_server_ciphers on;
    
      location / {
          proxy_pass http://127.0.0.1:8080;
          proxy_set_header        X-Real-IP  $remote_addr;
          proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
          proxy_set_header  Host  api.ityuan.com;
      }
 }

 



用户评论