成长,总在点滴之间

使用 Lets Encrypt免费为我的博客启用HTTPS

刚才花了两个小时(其中半个小时找解决方案,半个小时解决pip源的问题)把博客变成https的安全访问了,使用的是 Let’s Encrypt这个免费的解决方案。具体这个认证机构和https好处就不说了,Google一下。

开始安装https

我的服务器运行环境为Centos7.0 + Nginx1.12.1,当前工作目录为 /root

  1. 获取certbot客户端
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
  1. 停止Nginx
service nginx stop
  1. 生成证书
./certbot-auto certonly --standalone --email `你的邮箱地址` -d `你的域名1` -d `你的域名2`

例如我的配置如下:

./certbot-auto certonly --standalone --email mail@hi-boys.com -d hi-boys.com -d www.hi-boys.com

这里遇到类似这个问题,解决方案:

  • 当前目录 /root下,手动创建 .pip文件夹和新建pip.conf文件;
  • vim ~/.pip/pip.conf:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

保存;

  • 重复上一步,继续下一步;
  1. 查看生产的证书
tree /etc/letsencrypt/live/

目录

  1. 将证书用于nginx

在nginx网站 nginx.conf文件server配置中增加

  # TLS 基本设置
  listen 443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/www.hi-boys.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.hi-boys.com/privkey.pem;

  # Redirect non-https traffic to https
  if ($scheme != "https") {
    return 301 https://$host$request_uri;
  } # managed by Certbot

以上代码说明:这里按照coolshell说的配置了http2(Nginx版本要求大于1.9.5),HTTP2 具有更快的 HTTPS 传输性能,非常值得开启

  1. 启动nginx
service nginx start

至此https配置完成。

证书续签

Let’s Encrypt 生成的免费证书为3个月时间,但是我们可以无限次续签证书,设置crontab自动化的更新脚本;
使用 crontab -e 命令加入如下的定时作业(每个月都强制更新一下):

#letsencrypt.org https证书 每月1号自动更新
0 3 1 * * /sbin/service nginx stop
3 3 1 * * /root/certbot-auto renew --force-renewal
10 3 1 * * /sbin/service nginx start

静态文件修改

启用HTTPS后,你的网页中的所有的使用 http:// 的方式的地方都要改成 https:// 不然你的图片,js, css等非https的连接都会导致浏览器抱怨不安全而被block掉。所以,你还需要修改你的网页中那些 hard code http:// 的地方。

2018-11-23更新

  • 由于web 服务器已经在运行了,不能关闭端口和服务器,可使用 --webroot 模式
./certbot-auto certonly --webroot -w /data/wwwroot/app.com/public -d app.com  --agree-tos --email m@xxx.com
  • 设置 crontab续签脚本
certbot-auto renew --force-renewal --renew-hook "service nginx reload"
  • 方向代理域名可在nginx配置文件中增加
 location /.well-known {
   alias /var/www/domain.com/.well-known;
 }

Let’s Encrypt服务器为尝试访问http://domain.com/.well-known来验证服务器。

注:Delete Certbot Certificate by Domain Name

./certbot-auto delete --cert-name www.hi-boys.com

本文仅做安装备忘教程,参考来源:

  1. 快马加鞭使用 certbot 为你的网站免费上 https
  2. 如何免费的让网站启用HTTPS
  3. Correct Way to Delete a Certbot SSL Certificate