CentOS下自动申请、部署Let's Encrypt免费SSL证书教程(Nginx服务器)
作者:hangge | 2021-01-19 08:10
网站使用 HTTPS 协议已是大势所趋,而要在 web 上使用 HTTPS 的话,我们首先需要获得一个 SSL 证书文件。我之前写过文章介绍如何在 Windows + IIS 环境下,自动申请、部署 Let's Encrypt 的免费 SSL 证书(点击查看)。本文介绍如何在 CentOS7 + Nginx 环境下,安装使用 Let's Encrypt 免费 SSL 证书。
1,准备工作
(1)首先安装 Nginx 服务器,并确保正常运行。具体可以参考我之前写的文章:
(2)服务器要开放 80 口及 443 端口:
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
(3)在域名服务器创建一条 A 记录,指向服务器的公网 IP 地址。比如我这里使用 demo.hangge.com 这个域名。等域名解析生效后,访问 http://demo.hangge.com 可以看到如下页面则说明域名解析成功:
2,安装 certbot 工具
我们采用 certbot 脚本方式申请 let's encript 证书,依次执行如下命令安装该工具:
(3)申请成功后,证书会保存在 /etc/letsencrypt/live/demo.hangge.com/ 下面:
yum install -y epel-release yum install -y certbot
3,申请证书
(1)接下来我们要使用 certbot 命令初次申请证书,命令格式如下:
(2)这里我执行如下命令申请,大家根据实际情况修改:
注意:联系人 email 地址最好填写真实有效的地址,Let's Encrypt 会在证书在过期以前发送通知提醒邮件。
certbot certonly --webroot -w [Web站点目录] -d [站点域名] -m [联系人email地址] --agree-tos
(2)这里我执行如下命令申请,大家根据实际情况修改:
certbot certonly --webroot -w /usr/local/nginx/html -d demo.hangge.com -m service@hangge.com --agree-tos
(3)申请成功后,证书会保存在 /etc/letsencrypt/live/demo.hangge.com/ 下面:
(5)使用如下命令可以查看证书的有效期:
openssl x509 -noout -dates -in /etc/letsencrypt/live/demo.hangge.com/cert.pem
4,更新证书
(1)Let's Encrypt 证书的有效期是 90 天,需要长期使用的话,需要在失效前进行延长申请。我们可以执行如下命令去更新:
//更新证书 certbot renew --dry-run //如果不需要返回的信息,可以用静默方式 certbot renew --quiet
(2)我们也可以将更新证书的脚本写到定时任务来自动完成,免得我们手动操作。首先执行如下命令开始编辑定时任务:
crontab -e
(3)此时会进入 vi 的编辑界面让你编辑工作(每项工作都是一行)。我们在末尾添加如下一行内容,表示每月 1 号 5 时会执行执行一次更新,并重启 nginx 服务器:
(4)保存后退出,执行 crontab -l 命令可以查看 crontab 服务是否创建成功:
00 05 01 * * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx
(4)保存后退出,执行 crontab -l 命令可以查看 crontab 服务是否创建成功:
5,配置 Nginx
(1)首先执行如下命令生成 Perfect Forward Security(PFS)键值:
(2)接着编辑 nginx 配置文件:
(3)首先修改默认的 server 配置:
(4)接着将 HTTPS server 配置前面的注释(#)去掉,把内容改成如下:
(5)保存退出后,重启 nginx 服务:
(6)再次使用浏览器访问 http://demo.hangge.com,如果正常跳转到 https://demo.hangge.com,并且地址栏有个小锁图标则说明 https 配置成功了:
mkdir /etc/ssl/private/ -p cd /etc/ssl/private/ openssl dhparam 2048 -out dhparam.pem
(2)接着编辑 nginx 配置文件:
vi /usr/local/nginx/conf/nginx.conf
(3)首先修改默认的 server 配置:
server { listen 80; server_name demo.hangge.com; rewrite ^ https://$server_name$request_uri? permanent;
(4)接着将 HTTPS server 配置前面的注释(#)去掉,把内容改成如下:
# HTTPS server # server { listen 443 ssl; server_name demo.hangge.com; ssl_certificate /etc/letsencrypt/live/demo.hangge.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/demo.hangge.com/privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_dhparam /etc/ssl/private/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK'; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
(5)保存退出后,重启 nginx 服务:
nginx -s reload
(6)再次使用浏览器访问 http://demo.hangge.com,如果正常跳转到 https://demo.hangge.com,并且地址栏有个小锁图标则说明 https 配置成功了:
全部评论(0)