
你给网站加HTTPS,跑去买证书。一年几百块,心疼。不买吧,Chrome地址栏那个“不安全”的红标,看着就别扭。
其实不用花钱。Let’s Encrypt,全球最大的免费CA机构,提供90天有效期的SSL证书。你只需要一个自动化工具Certbot,全程自动申请、自动配置、自动续期。
今天带你配好它。
Let’s Encrypt是什么?——免费、自动化、可信
Let’s Encrypt由Linux基金会、Google、Mozilla等多家组织发起,目标是加密整个互联网。颁发的免费证书被所有主流浏览器和操作系统信任。
原理:证书颁发机构需要验证你对域名的控制权。Let’s Encrypt的做法是,在你服务器上放一个临时文件,或者修改一条DNS记录,CA机构访问验证,通过后才发证。Certbot自动帮你完成这个流程。
90天有效期这么短,就是为了逼你自动化。你配好自动续期后,基本不用再管。
准备工作
需要三样东西:
- 一台有公网IP的服务器(已配置好域名解析)
- 已经安装并运行了Nginx或Apache
- 服务器的80端口能从外网访问(Let’s Encrypt验证域名时需要)
确认域名已指向服务器IP:
bash
ping 你的域名
如果返回的IP是服务器的公网IP,就对了。
安装Certbot
Certbot是Let’s Encrypt官方推荐的自动化客户端,支持Nginx和Apache。
Ubuntu/Debian
bash
sudo apt update sudo apt install certbot python3-certbot-nginx -y
CentOS/RHEL
bash
sudo yum install epel-release -y sudo yum install certbot python3-certbot-nginx -y
验证安装:certbot --version。
申请证书(Nginx版)
Certbot会自动读取Nginx配置、修改配置文件、启用HTTPS。
bash
sudo certbot --nginx -d example.com -d www.example.com
-d后面跟域名,可以多个。
运行后会问几个问题:
- 输入邮箱(用于接收到期通知)
- 同意服务条款
- 是否自动重定向HTTP到HTTPS(选2,自动重定向)
完成之后,Certbot会:
- 自动验证域名所有权
- 申请证书
- 自动修改Nginx配置,启用SSL
- 设置HTTP自动跳转HTTPS
打开浏览器访问https://你的域名,看到锁标志说明成功了。
申请证书(Apache版)
bash
sudo certbot --apache -d example.com -d www.example.com
其他流程和Nginx版一样,Certbot会自动修改Apache配置。
证书存放位置
申请成功后,证书文件在/etc/letsencrypt/live/你的域名/:
| 文件 | 说明 |
|---|---|
fullchain.pem | 服务器证书+中间证书(Nginx用这个) |
privkey.pem | 私钥文件 |
cert.pem | 仅服务器证书 |
chain.pem | 仅中间证书 |
Nginx配置里引用这两个:
nginx
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Certbot已经帮你自动改好了,不需要手动配。
自动续期
Let’s Encrypt证书有效期90天。Certbot自带自动续期功能。
测试续期是否正常:
bash
sudo certbot renew --dry-run
如果输出包含The dry run was successful,说明续期配置正确。
Certbot会自动创建cron定时任务,每天检查两次,证书到期前30天内自动续期。
检查cron任务:
bash
systemctl list-timers | grep certbot
如果存在certbot.timer,说明自动续期已生效。
手动续期:
bash
sudo certbot renew
这个命令会检查所有证书,只续期30天内到期的,不到期的不动。
自定义配置与问题处理
泛域名证书
certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
需要手动添加DNS TXT记录验证域名所有权,适合多子域名场景。
证书不自动重载
续期成功后,Nginx/Apache需要重载才能使用新证书。Certbot默认会尝试重载,如果失败,在续期命令后加--post-hook:
bash
sudo certbot renew --post-hook "systemctl reload nginx"
或者在/etc/letsencrypt/renewal/域名.conf里加上:
ini
[renewalparams] renew_hook = systemctl reload nginx
防火墙没开443端口
证书配好了,但外网访问不了HTTPS。检查防火墙:
bash
sudo ufw allow 443/tcp sudo firewall-cmd --add-service=https --permanent sudo firewall-cmd --reload
证书过期没续期
检查cron日志:grep certbot /var/log/syslog。常见原因是服务器时间不准,或防火墙阻止了Let’s Encrypt的出站连接。
一个真实案例
一个朋友的博客,以前用付费证书,每年续费麻烦。换了Let’s Encrypt,certbot自动续期,已经跑了两年没手动操作过。
他说:“以前经常忘记续费,到期了网站打不开用户骂。现在再也没这回事了。”
最后一句
Let’s Encrypt + Certbot,是目前最省心的免费HTTPS方案。
你有域名、有服务器、会敲几行命令,就能给你的网站加把锁。浏览器地址栏的“不安全”红标会变成一把绿色的锁。用户更信任你,搜索引擎更喜欢你。
今天就去申请一个。免费的,不花钱。




