背景知识

1、http 和 https 是什么?

简单的来说,http是一个传输网页内容的协议,比如当你看到http开头的网站
http://www.google.com,其网页上的文字、图片、css、js、html等资源都是通过http协议传输给浏览器,才能看到访问的页面。

而https可以理解为'http over SSL/TLS',好端端的http为什么需要“over SSL/TLS”呢,因为http是明文传输的,通过http协议传输的内容很容易被偷看和篡改,为了安全,所以在http协议上加了一层SSL/TLS安全协议,也就是https。

2、SSL/TLS 是什么?

SSL/TLS字面量的意思就是带有安全套接层的http协议,其中SSL是secure sockets layer的缩写,是安全套阶层的意思,而TLS是transport layer security的缩写,是传输层安全协议的意思,SSL和TLS是同一个东西的不同阶段,理解为同一个东西也行,都是安全协议就对了。

3、为什么要部署https呢?

为了安全,看起来也更靠谱一点,并且chrome浏览器现在对http已经提示了不安全性,其实在为站长来看,也是为了seo,chrome浏览器对https的网站排名要优先于http的

Let’s Encrypt 与 Certbot简介

Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。Certbot为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。这真是非常容易、方便呀,所以我们就可以直接使用官方客户端,不需要再使用第三方的工具了。

目前本人的服务器环境是centos7,并且已经部署了nginx了

  1. 获取 Certbot 客户端
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help
  1. 配置 nginx 、验证域名所有权
    在配置域名的nginx conf文件下,添加如下内容,是为了通过 Let’s Encrypt 的验证,让它知道所配置的域名是本人管理的
location ^~ /.well-known/acme-challenge/ {
   default_type "text/plain";
   root     /var/www/html/pianke/api;
}
 
location = /.well-known/acme-challenge/ {
   return 404;
}
  1. 重载 nginx
   nginx -s reload
  1. 生成证书
./certbot-auto certonly --webroot -w /var/www/html/pianke/api -d  pianke.api.51xtwo.com

等待生成中,当出现如下操作就证明签发成功

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/pianke.api.51xtwo.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/pianke.api.51xtwo.com/privkey.pem
   Your cert will expire on 2019-03-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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
  1. 配置nginx
server {
    listen 443 ssl http2;
    server_name pianke.api.51xtwo.com;
    root /var/www/html/pianke/api;
    ssl_certificate      /etc/letsencrypt/live/pianke.api.51xtwo.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/pianke.api.51xtwo.com/privkey.pem;
    ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #加密算法(CloudFlare 推荐的加密套件组)
    ssl_prefer_server_ciphers on; #优化 SSL 加密套件
    ssl_session_timeout 10m; #客户端会话缓存时间
    ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 会话缓存类型和大小
    ssl_buffer_size 1400; # 1400 bytes to fit in one MTU
    ssl_protocols  TLSv1.1 TLSv1.2 TLSv1.3;
    location / {
        index index.html;
    }
    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/html/pianke/api;
    }

    location = /.well-known/acme-challenge/ {
        return 404;
    }
}

server {
    listen  80;
    server_name  pianke.api.51xtwo.com;
    rewrite ^(.*)$  https://$server_name$1 permanent;
}
  1. 重载nginx 刷新一下浏览器,大功告成
nginx -t //检查有没有错误 习惯问题
nginx -s reload
后续工作

出于安全策略, Let’s Encrypt 签发的证书有效期只有 90 天,所以需要每隔三个月就要更新一次安全证书,虽然有点麻烦,但是为了网络安全,这是值得的也是应该的。好在 Certbot 也提供了很方便的更新方法。

  1. 手动更新的方法
./certbot-auto renew -v
  1. 自动更新的方法
./certbot-auto renew --quiet --no-self-upgrade