Let's Encrypt 证书申请全攻略:从零到一的免费HTTPS部署指南
为什么选择Let's Encrypt?
在当今互联网环境中,HTTPS加密已成为网站安全与用户体验的标配。Let's Encrypt作为一家非营利性证书颁发机构(CA),自2015年推出以来彻底改变了SSL/TLS证书的获取方式。其核心优势在于:完全免费、自动化部署、支持泛域名证书,并且被所有主流浏览器信任。对于个人站长、中小企业和开发者而言,使用Let's Encrypt是实现网站HTTPS化的最经济高效的选择。
申请前的准备工作
在开始申请之前,请确保您已满足以下基本条件:
- 域名所有权:您必须拥有要申请证书的域名控制权
- 服务器访问权限:能够通过SSH登录到托管网站的服务器
- 开放端口:确保服务器的80或443端口可从公网访问(用于域名验证)
- 基础命令行操作能力:熟悉基本的Linux命令
值得注意的是,Let's Encrypt证书的有效期为90天,但官方鼓励自动化续期,因此实际使用中可以做到"一次设置,长期有效"。
四种主流申请方法详解
方法一:使用Certbot客户端(官方推荐)
Certbot是Let's Encrypt官方推荐的自动化客户端,支持大多数Web服务器和操作系统。
# 安装Certbot(以Ubuntu + Nginx为例)
sudo apt update
sudo apt install certbot python3-certbot-nginx
# 申请并自动配置证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 仅申请证书不修改配置
sudo certbot certonly --nginx -d yourdomain.com
Certbot会引导您完成整个流程,包括邮箱注册、域名验证等。申请成功后,证书通常保存在/etc/letsencrypt/live/yourdomain.com/目录下。
方法二:使用acme.sh脚本(轻量级方案)
acme.sh是一个纯Shell脚本,依赖少,功能强大,特别适合资源有限的环境。
# 安装acme.sh
curl https://get.acme.sh | sh
# 设置别名或重新加载shell配置
source ~/.bashrc
# 使用DNS API申请证书(以Cloudflare为例)
export CF_Key="your_cloudflare_api_key"
export CF_Email="your_email@example.com"
acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com
acme.sh支持80多种DNS提供商API,对于需要泛域名证书的用户特别友好。
方法三:Web服务器插件自动申请
如果您使用cPanel、Plesk等控制面板,或WordPress等CMS,可能有集成的申请方式:
- cPanel:在SSL/TLS功能中找到"Let's Encrypt™ SSL"选项
- WordPress:使用"Really Simple SSL"等插件一键部署
- 宝塔面板:在网站设置中直接点击SSL证书申请
方法四:手动申请(适合高级用户)
手动申请虽然步骤繁琐,但有助于理解证书申请的工作原理:
- 生成私钥和证书签名请求(CSR)
- 使用ACME客户端与Let's Encrypt服务器通信
- 完成域名所有权验证(HTTP或DNS验证)
- 下载并安装颁发的证书
域名验证方式对比
| 验证方式 | 工作原理 | 适用场景 | 优缺点 |
|---|---|---|---|
| HTTP验证 | 在网站根目录创建特定验证文件 | 可直接访问Web服务器的情况 | 简单直接,但需要开放80端口 |
| DNS验证 | 添加特定的TXT记录到域名DNS | 无法直接访问服务器或需要泛域名证书 | 支持泛域名,但需要API权限或手动操作 |
| TLS-ALPN验证 | 通过443端口进行验证 | 80端口被占用的情况 | 要求开放443端口,相对较少使用 |
证书安装与配置
获得证书文件后,需要正确配置Web服务器:
Nginx配置示例:
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:...
ssl_prefer_server_ciphers off;
}
Apache配置示例:
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
自动化续期设置
Let's Encrypt证书90天有效期的设计初衷是鼓励自动化。以下是设置自动续期的方法:
Certbot自动续期:
# 测试续期命令是否正常工作
sudo certbot renew --dry-run
# 添加定时任务(每天检查两次)
sudo crontab -e
# 添加以下行:
0 */12 * * * /usr/bin/certbot renew --quiet
acme.sh自动续期:
acme.sh安装时会自动创建续期任务,无需额外配置。您可以通过以下命令查看:
crontab -l | grep acme.sh
常见问题与解决方案
1. 申请失败:Too many certificates already issued
原因:Let's Encrypt对每个域名有申请频率限制(每周最多50张证书)
解决方案:等待限制重置或使用已有的证书
2. 验证失败:Connection refused
原因:Let's Encrypt验证服务器无法访问您的网站
解决方案:检查防火墙设置,确保80或443端口可被外部访问
3. 续期失败:Certificate not yet due for renewal
原因:证书距离到期时间超过30天时不会续期
解决方案:这是正常现象,到期前30天内会自动续期
4. 混合内容警告
原因:网站页面中仍包含HTTP资源链接
解决方案:使用相对协议或强制HTTPS,更新所有资源链接
高级技巧与最佳实践
- 使用OCSP Stapling:减少证书验证时间,提升性能
- 配置HSTS:强制浏览器使用HTTPS连接
- 备份私钥:定期备份/etc/letsencrypt目录
- 监控证书状态:使用监控工具检查证书到期时间
- 多域名证书:一张证书包含多个域名,简化管理
结语
Let's Encrypt的出现极大降低了HTTPS部署的门槛,使每个网站都能轻松获得安全加密。虽然初始设置可能需要一些技术操作,但一旦完成自动化配置,后续维护成本极低。随着HTTP/2和未来HTTP/3的普及,HTTPS不再是可选项而是必选项。现在就开始行动,为您的网站部署Let's Encrypt证书,迈向更安全、更快速的网络新时代。
无论您是技术新手还是资深运维,本文提供的多种方法和详细步骤都能帮助您成功申请并管理Let's Encrypt证书。如果在实际操作中遇到问题,Let's Encrypt社区和各大技术论坛都有丰富的资源可供参考。
