Skip to content

Let's Encrypt证书配置

Let's Encrypt提供免费的SSL证书,自动化申请和续期。

安装Certbot

Ubuntu/Debian

bash
sudo apt update
sudo apt install certbot

CentOS/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.com

DNS验证

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 --quiet

Systemd 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。