CentOS7 ecs配置https

环境说明

  • CentOS7
  • Nginx 1.10.2
  • Certbot

安装 Certbot

  • 官网地址:https://certbot.eff.org
  • Certbot 是 Let's Encrypt 官方推荐的配置工具,貌似之前叫 letsencrypt。在 CentOS 下安装 Certbot 需要启用 epel。

yum install epel-release -y

yum clean all
yum install certbot -y

获取 SSL 证书

  • 申请过程中要验证绑定的域名是否属于申请人,其原理就是申请人在域名所在的服务器上申请证书,然后 Let’ s Encrypt 会访问绑定的域名与客户端通信成功即可通过。

这个验证的方法有两种:

standalone 模式:需要停止当前的 web server 服务,让出 80 端口,由客户端内置的 web server 启动与 Let’ s Encrypt 通信。

Webroot 模式:不需要停止当前 web server,但需要在域名根目录下创建一个临时目录,并要保证外网通过域名可以访问这个目录。

  • 很显然使用 Webroot 模式,Certbot 在验证服务器域名的时候,会生成一个随机文件,然后 Certbot 的服务器会通过 HTTP 访问你的这个文件,因此要确保你的 Nginx 配置好,以便可以访问到这个文件。

修改你的服务器配置,在 server 模块添加:

    location ^~ /.well-known/acme-challenge/ {
       default_type "text/plain";
       root     /var/www/letsencrypt;
    }

    location = /.well-known/acme-challenge/ {
       return 404;
    }
  • 接着重新加载 Nginx 配置:systemctl reload nginx
  • 获取 Let's Encrypt 颁发的证书:
certbot certonly --webroot --email and.mz.yq@gmail.com -w /usr/share/nginx/html -d mzlion.com -d www.mzlion.com --agree-tos
  -w 表示域名网站根目录 -d 紧接着域名 -d 紧接着域名 [...]
  上面的配置表示多个域名共享同一对SSL证书信息
  --agree-tos 表示自动同意相关协议
如果不使用参数 --agree-tos 则会有如下图的

配置 Nginx SSL 证书

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  mzlion.com;

    #以下配置用于Let's Encrypt服务端和客户端校验目录配置
    location ^~ /.well-known/acme-challenge/ {
       default_type "text/plain";
       root     /var/www/letsencrypt;
    }

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

    #永久重定向到https站点
    return 301 https://$server_name$request_uri;
}


server {
    #启用 https, 使用 http/2 协议
    listen 443 http2;

    #ssl
    ssl=on
    #证书路径
    ssl_certificate /etc/letsencrypt/live/mzlion.com/fullchain.pem;
    #私钥路径
    ssl_certificate_key /etc/letsencrypt/live/mzlion.com/privkey.pem;

    ssl_trusted_certificate /etc/letsencrypt/live/mzlion.com/chain.pem;
    #可选的加密算法,顺序很重要,越靠前的优先级越高
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
    #在 SSLv3 或 TLSv1 握手过程一般使用客户端的首选算法,如果启用下面的配置,则会使用服务器端的首选算法.
    ssl_prefer_server_ciphers on;

    #以下与证书无关了
    location /{
    	#...省略
    }
}
  • 保存配置,重新加载 Nginx 配置或重启:systemctl reload nginx

到这步,Nginx SSL 证书就配置完成了,打开浏览器访问网站就会启用 https,看到绿色安全锁的图标。

自动为证书续期

  • crontab -e

添加配置:

30 0 * /2 /usr/bin/certbot renew && nginx -s reload >> /var/log/le-renew.log
上面的执行时间为:每隔 2 月的零点 30 分执行 renew 任务。