Appearance
Let's Encrypt证书配置
Let's Encrypt提供免费的SSL证书,自动化申请和续期。
安装Certbot
Ubuntu/Debian
bash
sudo apt update
sudo apt install certbotCentOS/RHEL
bash
sudo yum install epel-release
sudo yum install certbot安装Nginx插件
bash
sudo apt install python3-certbot-nginx申请证书
自动配置Nginx
bash
sudo certbot --nginx -d example.com -d www.example.com仅申请证书
bash
sudo certbot certonly --nginx -d example.com -d www.example.com独立服务器模式
bash
sudo certbot certonly --standalone -d example.comDNS验证
bash
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com"证书配置
基本配置
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/html;
}完整配置
nginx
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name 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:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
# SSL会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/html;
index index.html;
}证书续期
手动续期
bash
sudo certbot renew测试续期
bash
sudo certbot renew --dry-run自动续期
Crontab
bash
sudo crontab -e添加以下内容:
0 0 * * * certbot renew --quietSystemd Timer
bash
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer证书管理
查看证书
bash
sudo certbot certificates撤销证书
bash
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem删除证书
bash
sudo certbot delete --cert-name example.com多域名证书
申请多域名证书
bash
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com通配符证书
bash
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com常见问题
DNS验证失败
原因: DNS记录未正确配置
解决: 检查DNS记录
bash
dig _acme-challenge.example.com TXT端口被占用
原因: 80端口被占用
解决: 停止占用80端口的程序
bash
sudo netstat -tlnp | grep :80续期失败
原因: 证书配置错误
解决: 检查证书路径
bash
ls -l /etc/letsencrypt/live/example.com/总结
Let's Encrypt证书配置的关键点:
- 安装Certbot:使用包管理器安装
- 申请证书:使用certbot命令申请
- 配置证书:在Nginx中配置证书路径
- 自动续期:使用crontab或systemd自动续期
- 多域名:支持多域名和通配符证书
使用Let's Encrypt免费证书,为网站配置HTTPS。