近两年愈来愈多的网站开始使用 https,https 是一个基于 http 协议开发,可是使用了 TLS/SSL 加密了传输数据,因此,简单点说 https 是 http 协议的“安全版”。最近博客从阿里云搬迁到腾讯云,也修改了几个程序上的 bug,顺便也启用了 https,记录一下。html
由于 https 采用 ssl 加密,因此部署 https时须要申请证书,证书的做用就是对浏览器和Web服务器双方的身份验证,推荐文章:图解HTTPS。
1. 申请
这里我使用了Let's Encrypt免费证书。虽然 Let's Encrypt 只有3个月的有效期,可是由于有certbot自动部署工具,自动更新起来也很是简单。进入 certbot 主页,能够看到下图所示。node
选择本身的web服务器类型和操做系统,好比我这里是 nginx+centos6.5,选择完毕以后会自动给出安装命令[如下命令以此为例]。
RedHat系Debian系
nginx
安装完以后执行./certbot-auto certonly
开始申请证书。申请证书有两种验证方式,一种是standalone,这种验证方式虽然也能够部署后,可是之后更新证书的时候须要重启 web 服务器,因此我采用了第二种Webroot,就是在网站根目录下生成一个文件,经过访问该文件来验证,不须要重启 web 服务器。git
若是选择 Webroot 模式,而且web服务器开启请求重定向的话,须要把 certbot 生成的文件的路径开放,让请求能够命中。github
选择验证模式以后,填写网站根目录以及域名,便可开始生成证书文件。以上操做也能够简化为一条命令./certbot-auto certonly --Webroot -d example.com -d www.example.com
,多个域名使用-d
追加。
执行完毕若是产生相似如下代码,即成功生成。web
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert will expire on 20XX-09-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
2. 部署
接下来修改nginx配置,添加 443 端口的监听。shell
listen 443 ssl; server_name hersface.com www.hersface.com; ssl on; set $node_port 8360; ssl_certificate /etc/letsencrypt/live/hersface.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hersface.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/hersface.com/chain.pem; ssl_session_timeout 5m; ssl_protocols TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
重启nginx服务,访问网站,https 已经能够打开了。centos
3.证书更新
certbot 已经有更新命令,咱们只须要部署定时任务就行30 2 15 * * /root/ssl/certbot-auto renew >> /var/log/le-renew.log
每个月15号2:30执行更新,并保存任务日志。事实上90天才过时,彻底能够在80天的时候自动更新,并且 Let’s Encrypt 也限制短时间内不能频繁更新,可是不肯定限制的时间是多少,由于申请完证书30天以后我使用更新命令的时候提示不须要更新。浏览器
4.其余免费证书
腾讯云免费证书
沃通免费证书
阿里云免费证书安全
以前博客的静态资源是托管在七牛的,使用的七牛免费域名。可是只能使用 http 的请求。由于在开启 https 的页面上若是存在 http 资源的话,浏览器会提示
强迫症表示不能忍。可是七牛若是想使用 https 的话,要么使用 cdn,要么自定义域名。cdn 是按流量计费的,感受不必,因此使用自定义域名了(还得充值10块钱)
若是使用https域名的话须要上传证书和私钥的内容,这里的证书推荐使用腾讯云的免费证书,3年有效期,不用频繁续签。上传完配置域名canme解析,若是解析成功,被七牛检测到,就能够开始使用了该域名了。
因为博客一直使用的是多说的评论框,可是多说对 https 处理的很是很差。虽然 js 支持 https,可是用户的第三方头像和评论的表情图片都是引用的 http 地址,百度搜了一下解决方案基本上都是替换 js 里的连接为本地地址,并把原地址当参数传入,由程序处理,或者配置反向代理,获取原图内容,并输出。
参考文章:
让多说评论框完美支持HTTPS
因而我配置了一下反代。
location ~ "^/proxy/(.*)$" { resolver 8.8.8.8; proxy_pass http://$1; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; expires 7d; }
可是以后发现效果并很差,以为加载速度特别慢,不知道由于是配置有问题,仍是浏览器并发限制致使的。
后来在 github 搜出来一个神器:https://github.com/rainwsy/duoshuo-https,做者把第三方 http 地址改成七牛CDN处理。感谢!!!
至此,部署完毕。后面还须要再研究一下http2。
博客连接:启用 https 的一点记录