2015 年底,多家公司就联合声明:呼吁运营商严格打击流量劫持。但是,能够实施这一攻击行为的目前也就是各地的宽带运营商了,让贼捉贼怎么可能?!况且, 在某些地区,这种劫持文件并插入广告的方式已经成为他们轻松来钱的“优质”渠道了,怎能轻易放手!所以,从 15 年起,很多大型网站开启了 HTTPS ,包括 淘宝、百度等。

众所周知从某些公司购买HTTPS证书,一个域名每年都要几千个大洋(不是一般的黑)。那么有没有免费,答案是有。现隆重推荐(Let’s Encrypt 免费证书
EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRGInternet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署 https 了。
Let’s Encrypt 证书除了免费,还支持域名通配符或泛域名。好东西必须分享,走起。

鉴于国内网络环境复杂,建议大家也尽快支持 HTTPS。尤其是国内云厂商基本都支持 Let’s encrypt 免费证书了,无论申请还是开启 Let’s encrypt 证书都很方便了。

准备工作

  • 一台服务器

这里我本人的是centos 7系统,以centos 7为例(本文)

Certbot 的官方网站是 https://certbot.eff.org/ ,打开这个链接选择自己使用的 web server 和操作系统,EFF 官方会给出详细的使用方法。

开始

下载certbot

wget https://dl.eff.org/certbot-auto

chmod a+x certbot-auto

注意: 也可采用certbot官方 yum安装方式

sudo yum install python2-certbot-nginx

申请泛域名*.example.com https

./certbot-auto certonly  -d *.example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

说个小技巧,如果你想申请多个泛域名的https,完全可以放到一个证书里

./certbot-auto certonly  -d *.example.com  -d *.a.com  --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

这里我只需要申请一个泛域名,如下操作:

一路Y,终于快要结束了

上图红框框的地方需要特别注意哈:

第一个是需要输入邮箱,然后同意A,yes Y,就到了下面这幅图片

到了这一步就离成功不远了,就是不要激动,不然一路yes你就需要重新来了

到了这里,你需要记录下第一个红框框,因为这个是你*.example.com https 对应解析的dns,为什么需要这一步呢,是需要验证域名的所有权

第二个红色框框,需要在你把对应域名的dns解析生效了,再点击

配置DNS

要求配置 DNS TXT 记录,从而校验域名所有权,也就是判断证书申请者是否有域名的所有权。
_acme-challenge.example.com 配置一条 TXT 记录.

确认生效后,回车执行,输出如下:

恭喜您,证书申请成功,证书和密钥保存在本地,我们去目录看下:

然后校验证书信息,输入如下命令:

openssl x509 -in  /etc/letsencrypt/archive/example.com/cert1.pem -noout -text 

如果输出中有

X509v3 Subject Alternative Name: 
    DNS:*.example.com
    

证明成功

配置nginx

server {  
           server_name  www.example.com;
           listen 443 http2 ssl;
           ssl on;
           ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
           ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        #access_log  logs/host.access.log  main;
        root   /var/www/demo;
        location / {
            index  index.html index.htm index.php l.php;
           autoindex  off;

        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php(.*)$  {
              fastcgi_pass 127.0.0.1:9000;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
        }
    }

证书续期

一般Let’s Encrypt 证书有效期为3个月,如果想续期执行如下命令

./certbot-auto renew

如果嫌麻烦,可以写到定时任务里,每天执行一次。

crontab -e

0 0 * * * /root/tar/certbot-auto renew --renew-hook "systemctl reload nginx"

续期说明:只用renew的话,会先检查证书是否需要更新,大概是距离到期还有三天或者十几天之内才会执行更新,否则会提示不需要更新。(昨天更新了证书,今天直接用renew,提示不允许更新)

感谢下列


扫描二维码,在手机上阅读!