




















如下阐述为在CentOS系统中申请并配置Let's Encrypt免费HTTPS证书的具体方法和完整步骤,适配Nginx服务器。
# CentOS 7(firewalld)
sudo firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
sudo firewall-cmd --reload
# CentOS 8/9(firewalld)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Certbot是Let's Encrypt官方推荐的客户端,不同CentOS版本安装方式略有差异:
# 安装EPEL源(CentOS 7必须)
sudo yum install -y epel-release
# 安装Certbot及对应Web服务器插件
# Nginx用户
sudo yum install -y certbot python2-certbot-nginx
# 安装EPEL源
sudo dnf install -y epel-release
# 启用PowerTools仓库(CentOS 8)/ CRB仓库(CentOS 9)
sudo dnf config-manager --set-enabled powertools # CentOS 8
sudo dnf config-manager --set-enabled crb # CentOS 9
# 安装Certbot及插件
# Nginx用户
sudo dnf install -y certbot python3-certbot-nginx
使用泛域名的好处是可以针对不同的子系统配置相应的域名,如:wiki.example.com,blog.example.com。
Let's Encrypt 完全支持免费的泛域名证书(Wildcard Certificate,如*.example.com),但有两个关键限制:必须通过DNS-01 验证方式申请,且需使用ACME v2 协议(目前所有主流客户端如 Certbot 均已支持)。
一张泛域名证书可保护主域名下所有一级子域名(如*.example.com可保护blog.example.com、shop.example.com等),但不包含主域名本身(需单独添加-d example.com)。
如下采用自动 DNS 验证的方式,使用Certbot完成证书申请 + Web服务器配置 + 自动续期配置。
步骤 1:安装 DNS 插件(以阿里云为例,域名在阿里云万网解析)
# 1. 安装Python pip(CentOS)
sudo yum install -y python3-pip
# 2. 安装阿里云DNS插件
sudo pip3 install certbot-dns-aliyun
# 若安装失败,可升级pip后重试
sudo pip3 install --upgrade pip
sudo pip3 install certbot-dns-aliyun
步骤 2:创建阿里云 API 密钥配置文件
Certbot 需要通过阿里云 API 自动管理 DNS 记录,需先创建 API 密钥(AccessKey):
# 创建安全目录(仅root可访问)
mkdir -p ~/.secrets/certbot
chmod 700 ~/.secrets/certbot
# 编辑配置文件
vim ~/.secrets/certbot/aliyun.ini
# aliyun.ini
dns_aliyun_access_key = 你的阿里云AccessKey ID
dns_aliyun_access_key_secret = 你的阿里云AccessKey Secret
sudo chmod 600 ~/.secrets/certbot/aliyun.ini
sudo chown root:root ~/.secrets/certbot/aliyun.ini
步骤 3:用自动 DNS 插件申请证书
# 申请证书(包含主域名+泛域名)
sudo certbot certonly --dns-aliyun --dns-aliyun-credentials ~/.secrets/certbot/aliyun.ini -d example.com -d *.example.com
执行后,Certbot 会:
证书默认路径:
/etc/letsencrypt/live/example.com/
├── fullchain.pem # 证书链(包含服务器证书和中间证书)
├── privkey.pem # 私钥文件
├── cert.pem # 服务器证书
└── chain.pem # 中间证书
编辑站点配置文件(如/etc/nginx/conf.d/example.conf):
server {
listen 443 ssl http2;
server_name example.com *.example.com;
# 证书配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
# 网站根目录(替换为实际路径)
root /usr/share/nginx/html;
index index.html;
}
# 强制HTTP跳转HTTPS
server {
listen 80;
server_name example.com *.example.com;
return 301 https://$host$request_uri;
}
步骤 4:测试自动续期
# 模拟续期(无实际操作,仅测试)
sudo certbot renew --dry-run
如果输出All renewal attempts succeeded.,说明自动续期配置成功。
注: 务必用certbot renew --dry-run测试续期逻辑,确保无报错,避免证书过期。
步骤 5:配置证书自动续期
使用Linux 系统通用的定时任务工具cron配置证书自动续期:
# 打开root用户的crontab编辑界面
sudo crontab -e
# 每天凌晨3点自动执行Certbot续期,静默模式(仅出错时输出日志)
0 3 * * * /usr/bin/certbot renew --quiet --no-self-upgrade
0 3 * * *:表示每天凌晨 3 点执行(可自定义时间,如0 2 * * *是凌晨 2 点);/usr/bin/certbot:Certbot 的默认路径,若找不到可执行which certbot查看实际路径;--quiet:静默执行,避免无关输出;--no-self-upgrade:禁止 Certbot 自动升级,避免升级导致兼容性问题。【参考】
个人网站申请免费HTTPS证书指南
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。