阿里云服务器使用 Let's Encrypt 配置 SSL 证书

2026 年 1 月 27 日 星期二
2

阿里云服务器使用 Let's Encrypt 配置 SSL 证书

阿里云服务器使用 Let's Encrypt 配置 SSL 证书

一、准备工作

1. 确保满足条件

  • 拥有域名(如 example.com)
  • 域名已解析到阿里云服务器 IP
  • 服务器已安装 Nginx/Apache
  • 80/443 端口已开放

2. 检查网络和防火墙

# 阿里云安全组开放端口
# 控制台 → 安全组 → 配置规则 → 添加规则
# 端口:80, 443
# 授权对象:0.0.0.0/0

# 服务器防火墙
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
# 或
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

二、安装 Certbot

1. 方法一:通过 snap 安装(推荐)

# 安装 snap
sudo apt update
sudo apt install snapd -y

# 移除旧版本 certbot(如果有)
sudo apt remove certbot
sudo snap remove certbot

# 安装 snap core
sudo snap install core
sudo snap refresh core

# 安装 certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. 方法二:通过包管理器安装

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y

三、获取 SSL 证书

1. 使用 Nginx 插件自动配置(最简便)

# 自动获取并配置证书
sudo certbot --nginx -d example.com -d www.example.com

# 多个域名
sudo certbot --nginx \
  -d example.com \
  -d www.example.com \
  -d api.example.com \
  -d blog.example.com

交互过程提示:

  1. 输入邮箱(接收续期提醒)
  2. 同意服务条款
  3. 是否分享邮箱(可选)
  4. 选择为哪些虚拟主机配置 HTTPS
  5. 是否自动将所有 HTTP 重定向到 HTTPS(推荐选择 2)

2. 仅获取证书(手动配置)

# 仅获取证书,不修改配置
sudo certbot certonly --nginx \
  -d example.com \
  -d www.example.com

证书位置:

/etc/letsencrypt/live/example.com/
├── cert.pem       # 证书文件
├── chain.pem      # 中间证书
├── fullchain.pem  # 完整证书链
└── privkey.pem    # 私钥文件

四、Nginx 手动配置 SSL

如果选择手动配置,在 Nginx 配置中添加:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;
    
    # SSL 证书路径
    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-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    root /var/www/example.com/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP 重定向到 HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

五、自动续期配置

1. 测试续期

# 测试续期(不实际执行)
sudo certbot renew --dry-run

2. 自动续期配置

Let's Encrypt 证书有效期为 90 天,需要定期续期。

# 查看定时任务
sudo systemctl list-timers

# 手动测试续期
sudo certbot renew

3. 添加自动续期脚本

# 创建续期脚本
sudo nano /etc/cron.daily/certbot-renew

脚本内容:

#!/bin/bash
certbot renew --quiet --post-hook "systemctl reload nginx"

设置权限:

sudo chmod +x /etc/cron.daily/certbot-renew

4. 使用 systemd 定时任务

# 查看现有定时任务
sudo systemctl list-timers | grep certbot

# 手动运行续期
sudo certbot renew

六、证书管理命令

1. 常用命令

# 查看证书信息
sudo certbot certificates

# 删除证书
sudo certbot delete --cert-name example.com

# 修改证书(添加/删除域名)
sudo certbot --nginx -d example.com -d www.example.com -d newsub.example.com

# 强制更新证书
sudo certbot renew --force-renewal

2. 证书文件位置

# 证书文件路径
/etc/letsencrypt/live/example.com/

# 所有存档
/etc/letsencrypt/archive/example.com/

# 配置
/etc/letsencrypt/renewal/example.com.conf

七、高级配置

1. 通配符证书(需要 DNS 验证)

# 安装 DNS 插件
sudo snap set certbot trust-plugin-with-root=ok
sudo snap install certbot-dns-aliyun

# 获取阿里云 DNS API 密钥
# 阿里云控制台 → RAM 访问控制 → 创建用户(授权 AliyunDNSFullAccess)
# 获取 AccessKey ID 和 Secret

# 创建配置文件
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/aliyun.ini

aliyun.ini内容:

dns_aliyun_access_key = YOUR_ACCESS_KEY_ID
dns_aliyun_access_key_secret = YOUR_ACCESS_KEY_SECRET

获取通配符证书:

sudo certbot certonly \
  --authenticator dns-aliyun \
  --dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
  -d "*.example.com" \
  -d example.com

2. 使用 Docker 获取证书

# 拉取 certbot 镜像
docker pull certbot/certbot

# 运行 certbot
docker run -it --rm \
  -v /etc/letsencrypt:/etc/letsencrypt \
  -v /var/lib/letsencrypt:/var/lib/letsencrypt \
  -p 80:80 \
  certbot/certbot certonly --standalone -d example.com

八、Nginx SSL 优化配置

server {
    listen 443 ssl http2;
    
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # 优化配置
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    
    # 现代配置
    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    
    # HSTS (可选,谨慎开启)
    add_header Strict-Transport-Security "max-age=63072000" always;
    
    # 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;
    resolver_timeout 5s;
}

九、常见问题解决

1. 端口 80 被占用

# 检查占用
sudo lsof -i :80
sudo netstat -tulnp | grep :80

# 停止占用程序或修改 Nginx 配置

2. 证书续期失败

# 检查错误日志
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# 手动调试
sudo certbot renew --debug

3. 阿里云安全组配置

确保安全组规则包含:

  • 入方向:80/tcp, 443/tcp
  • 出方向:无限制

4. 验证证书

# 在线验证
curl -I https://example.com

# 查看证书信息
openssl s_client -connect example.com:443 -servername example.com

十、备份和恢复

# 备份证书
sudo tar -czf letsencrypt-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/

# 恢复证书
sudo tar -xzf letsencrypt-backup.tar.gz -C /
sudo systemctl reload nginx

完成以上步骤后,您的网站应该可以通过 HTTPS 访问,并显示安全锁标志。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...