给站点开启https
安装snapd
在 CentOS 7 上,默认情况下,snapd 并未包含在官方的 Yum 仓库中。
CentOS 7 的 EPEL(Extra Packages for Enterprise Linux)仓库提供了许多额外的软件包,其中包括 snapd。
# 1. 启用 EPEL 仓库 , 如果安装epel-release之后依然不行, 卸载再次安装
sudo yum install epel-release -y
# 2. 更新包索引
sudo yum update -y
# 3. 安装 snapd
sudo yum install snapd -y
# 4. 启用并启动 snapd 服务
sudo systemctl enable --now snapd.socket
# 5. 创建符号链接(可选)
sudo ln -s /var/lib/snapd/snap /snap
安装 Certbot
在机器上的命令行上运行此命令来安装 Certbot。
# 安装 Certbot
sudo snap install--classic certbot
# 准备 Certbot 命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot
生成证书
sudo certbot certonly --nginx --email xxx@email.com -d aaaa.com -d www.bbbb.com -d cccc.com
正常情况会得到 如下:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/aaaa.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for aaaa.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/bbbb.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for aaaa.com and bbbb.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/aaaa.com/fullchain.pem (success)
/etc/letsencrypt/live/bbbb.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
配置证书
编辑 Nginx 的站点配置文件(通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 中):
server {
listen 80;
server_name aaaa.com www.aaaa.com;
# 自动将 HTTP 重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name aaaa.com www.aaaa.com;
# SSL 证书配置
ssl_certificate /etc/letsencrypt/live/aaaa.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aaaa.com/privkey.pem;
# 推荐的 SSL 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 网站根目录和其他配置
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
最后重启Nginx服务:
使用Cron定时更新证书
# 1 . 确保 Certbot 安装正确
sudo certbot renew --dry-run
# 2. 编辑定时器
sudo crontab -e
# 3.在文件末尾添加以下行:
0 3 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx
# 0 3 * * * 表示每天凌晨 3 点执行
# /usr/bin/certbot renew --quiet 是 Certbot 的自动续期命令,--quiet 禁止输出非必要信息。
# systemctl reload nginx 在续期后重新加载 Nginx 配置。
使用 Systemd 定时服务更新证书
创建定时任务文件
vi /etc/systemd/system/certbot-renew.service
内容如下:
[Unit]
Description=Certbot Renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet
ExecStartPost=/bin/systemctl reload nginx
创建定时器文件
vi /etc/systemd/system/certbot-renew.timer
内容如下:
[Unit]
Description=Run Certbot Renewal Daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
启用定时器
sudo systemctl enable --now certbot-renew.timer
检查定时器状态:
systemctl list-timers | grep certbot-renew
Certbot 默认会在证书有效期小于 30 天 时尝试续期。