2023-09-01
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 任务。