欢迎转载,请支持原创,保留原文链接:http://blog.ilibrary.me
  1. 去Godaddy续费
  2. 生成新证书
    1. 这一步要生成key pair,可以选择自己生成,也可以选择让godaddy自己生成。我选择godaddy生成,然后下载保存供后面用.
    2. 然后一路按照提示就可以生成新证书了。
  3. 下载证书,这是一个zip包, 里面两个crt一个pem. 有一个crt和pem内容是一样的,属于你网站专属的cert. 另外一个crt是父证书的打包,在后面会要合并到你网站专属的cert后面.
  4. 合并crt文件
    1. 合并原因是某些浏览器需要完整的pub key chain.
    2. godday下载下来的zip文件里面有一个类似e0e44ecf6b5dfab.crt和一个类似gd_bundle-g2-g1.crt, 通过命令cat e0e44ecf6b5dfab.crt gd_bundle-g2-g1.crt > domain.com.crt得到一个新的crt文件
  5. 上传private key和合并后的crt文件到服务器
  6. 修改nginx里面 ssl_certificate 和 ssl_certificate_key, 分别指向合并后的crt和private key.

问题跟踪

  1. 重启nginx出错,抛下面错误
     SSL_CTX_use_PrivateKey_file("/var/www/dg/shared/config/dealglobe.com.key") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: ANY PRIVATE KEY error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
    

    原因是nginx不能正确读取utf8文件,可能是读了UTF-8 BOM文件. 问题参考 stack overflow.

    如果想了解BOM的坑可以看UTF-8 BOM的坑

    解决方法:

    把key文件编码由utf8转换成ANSI就可以了,

    编码变换:

     UTF-8 BOM的文件无法用iconv做转换。
     可以用vim新建一个文件,把key内容贴进去就可以得到ASCII文件.