godaddy ssl证书续费, nginx配置
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me
- 去Godaddy续费
- 生成新证书
- 这一步要生成key pair,可以选择自己生成,也可以选择让godaddy自己生成。我选择godaddy生成,然后下载保存供后面用.
- 然后一路按照提示就可以生成新证书了。
- 如果已经有证书,那就不需要生成新证书了,直接下载证书(下载的时候会自动生成当天签名的新证书,有效期一年。至于为何只签一年,不清楚。)。key文件可以去生产服务器上找。
- 下载证书,这是一个zip包, 里面两个crt一个pem. 有一个crt和pem内容是一样的,属于你网站专属的cert. 另外一个crt是父证书的打包,在后面会要合并到你网站专属的cert后面.
- 合并crt文件
- 合并原因是某些浏览器需要完整的pub key chain.
- godday下载下来的zip文件里面有一个类似
e0e44ecf6b5dfab.crt
和一个类似gd_bundle-g2-g1.crt
, 通过命令cat e0e44ecf6b5dfab.crt gd_bundle-g2-g1.crt > domain.com.crt
得到一个新的crt文件
- 上传private key和合并后的crt文件到服务器。如果有用cdn,cdn上传证书的时候也要上传合并后的crt,保证证书链路完整。
- 修改nginx里面 ssl_certificate 和 ssl_certificate_key, 分别指向合并后的crt和private key.
server { listen 443; ssl on; ssl_certificate /etc/ssl/your_domain_name.pem; (or bundle.crt) ssl_certificate_key /etc/ssl/your_domain_name.key; server_name your.domain.com; access_log /var/log/nginx/nginx.vhost.access.log; error_log /var/log/nginx/nginx.vhost.error.log; location / { root /home/www/public_html/your.domain.com/public/; index index.html; } }
- 重启nginx:
sudo service nginx restart
, 如果没有sudo
, 有时候这个命令会不抛错,但是也不重启nginx. - 如果有使用CDN,更新CDN上的证书信息。cdn上传证书的时候也要上传合并后的crt,保证证书链路完整。就有遇到上传未合并的crt,后来chrome不认的情况。
cloudflare 免费证书
- 在SSL/TLS -> Origin Server下面 ‘Create Certificate’, 生成一个Origin Certificates, 也就是self-signed certificate
- 把pub key 和 private key分别保存为 domain.pem, domain.key
- 在nginx下面配置ssl
- 这个是自签名的证书,浏览器是不认的。需要走cloudflare的代理才能正常工作。方法就是在cloudflare -> DNS 下面 A记录或者C记录最后的’Proxy status’栏的’DNS only’点击一下,变成 ‘proxied’. 具体见stackoverflow
问题跟踪
- 重启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文件.
- 又拍云CDN证书无效的问题。
- 上传完整拼装好的私有证书:
cat e0e44ecf6b5dfab.crt gd_bundle-g2-g1.crt > domain.com.crt
- 上传完整拼装好的私有证书: