020-29876379

SSL证书

=================================
腾讯云 Ubuntu 22.04 LTS 安装 Let's Encrypt SSL 证书
=================================
# 适用环境:
# - 服务器:腾讯云 Ubuntu 22.04 LTS
# - 域名:阿里云(使用 DNS API 验证)
# - 证书:Let's Encrypt 免费泛域名证书(*.wangzhanzhizuo9.com.cn)
# - 自动续期:到期前 30 天自动续期,完全自动化

# Let's Encrypt 官网:https://letsencrypt.org/
# acme.sh 官网:https://github.com/acmesh-official/acme.sh
=======================================

=======================
前提条件
=======================
1. ✅ 域名已在阿里云注册并完成备案
2. ✅ 域名 DNS 解析已指向腾讯云服务器 IP
3. ✅ Nginx 已安装
4. ✅ Tomcat 已安装并运行在 8080 端口

===============================
步骤一:创建阿里云 RAM 用户(如果已创建可跳过)
===============================
# 用于 DNS API 验证,一个 RAM 用户可管理多个域名

登录阿里云控制台
2. 搜索"访问控制" 或 "RAM"
3. 左侧菜单:身份管理 → 用户
4. 点击"创建用户"
5. 填写信息:
 - 登录名称:ssl-cert-user(自定义)
 - 显示名称:SSL证书管理用户
   - ✅ 勾选:OpenAPI 调用访问
   - ❌ 不勾选:控制台访问
6. 点击"确定"
7. **重要**:页面会显示 AccessKey ID 和 AccessKey Secret
   立即复制保存(关闭后无法再查看 Secret)

### 为 RAM 用户授权 DNS 管理权限:
1. 在用户列表找到刚创建的 ssl-cert-user
2. 点击"添加权限"
3. 选择权限:AliyunDNSFullAccess
4. 点击"确定"
5. 完成授权

### 示例(保密存储)(密码替换为您的真实值):
Ali_Key="wangzhanjiasnshe9.com.cn"
Ali_Secret="wangzhanzhizuo9.com.cn"

=====================
步骤二:在服务器上安装 acme.sh
=====================
# 1. 安装 acme.sh(自动安装到 ~/.acme.sh/)
curl https://get.acme.sh | sh
source ~/.bashrc

# 2. 验证安装
~/.acme.sh/acme.sh --version

# 应该显示类似:
# https://github.com/acmesh-official/acme.sh
# v3.x.x

# 3. 注册 Let's Encrypt 账户(绑定邮箱,接收证书到期提醒)(邮箱替换为您的自己的邮箱):
~/.acme.sh/acme.sh --register-account -m wangzhanzhizuo9@qq.com

# 应该显示:
# [Fri Feb 13 11:00:00 CST 2026] Registered successfully.
# 或
# [Fri Feb 13 11:00:00 CST 2026] Create account key ok.

=====================
步骤三:配置阿里云 DNS API 凭证
=====================
# 设置环境变量(使用步骤一保存的 AccessKey)(密码替换为您的真实值):

export Ali_Key="wangzhanjiasnshe9.com.cn"
export Ali_Secret="wangzhanzhizuo9.com.cn"

# 保存到 ~/.bashrc(永久生效)(密码替换为您的真实值):
echo "export Ali_Key='wangzhanjiasnshe9.com.cn'" >> ~/.bashrc
echo "export Ali_Secret='wangzhanzhizuo9.com.cn'" >> ~/.bashrc
source ~/.bashrc

# 验证环境变量
echo $Ali_Key
echo $Ali_Secret

===============
步骤四:申请泛域名证书
===============
# 申请证书(包含主域名和泛域名)
~/.acme.sh/acme.sh --issue --dns dns_ali \
  -d wangzhanzhizuo9.com.cn \
  -d *.wangzhanzhizuo9.com.cn

# 申请过程说明:
# 1. acme.sh 通过阿里云 DNS API 添加 TXT 记录
# 2. Let's Encrypt 验证 DNS TXT 记录
# 3. 验证通过后颁发证书
# 4. 证书保存到:~/.acme.sh/wangzhanzhizuo9.com.cn_ecc/

# 成功输出示例:
# [Fri Feb 13 11:26:46 CST 2026] Your cert is in: /root/.acme.sh/wangzhanzhizuo9.com.cn_ecc/wangzhanzhizuo9.com.cn.cer
# [Fri Feb 13 11:26:46 CST 2026] Your cert key is in: /root/.acme.sh/wangzhanzhizuo9.com.cn_ecc/wangzhanzhizuo9.com.cn.key
# [Fri Feb 13 11:26:46 CST 2026] The intermediate CA cert is in: /root/.acme.sh/wangzhanzhizuo9.com.cn_ecc/ca.cer
# [Fri Feb 13 11:26:46 CST 2026] And the full-chain cert is in: /root/.acme.sh/wangzhanzhizuo9.com.cn_ecc/fullchain.cer

=================
步骤五:安装证书到 Nginx
=================
# 1. 创建证书目录
sudo mkdir -p /etc/nginx/ssl

# 2. 安装证书(从 acme.sh 存储位置复制到 Nginx 目录)
~/.acme.sh/acme.sh --install-cert -d wangzhanzhizuo9.com.cn \
  --key-file /etc/nginx/ssl/key.pem \
  --fullchain-file /etc/nginx/ssl/cert.pem

# 注意:如果 Nginx 未运行,去掉 --reloadcmd 参数,后面手动重载

# 3. 验证证书文件
ls -lh /etc/nginx/ssl/

# 应该看到:
# -rw-r--r-- 1 root root 4.1K Feb 13 11:33 cert.pem
# -rw------- 1 root root  227 Feb 13 11:33 key.pem

# 4. 查看证书有效期
openssl x509 -in /etc/nginx/ssl/cert.pem -noout -dates

# 应该显示:
# notBefore=Feb 13 03:26:46 2026 GMT
# notAfter=May 14 03:26:45 2026 GMT  (90天有效期)

# 5. 验证证书域名
openssl x509 -in /etc/nginx/ssl/cert.pem -noout -text | grep -A1 "Subject:"

# 应该显示:
# Subject: CN=wangzhanzhizuo9.com.cn

=================
步骤六:配置 Nginx HTTPS
=================

# 1. 编辑配置文件
sudo vi /etc/nginx/conf.d/wangzhanzhizuo9.conf

# 2. 写入以下配置:
# ===============
# HTTP 自动跳转到 HTTPS
server {
    listen 80;
    server_name wangzhanzhizuo9.com.cn www.wangzhanzhizuo9.com.cn;
    return 301 https://$host$request_uri;
}

# HTTPS 配置
server {
    listen 443 ssl http2;
    server_name wangzhanzhizuo9.com.cn www.wangzhanzhizuo9.com.cn;
    
    # SSL 证书配置
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    
    # SSL 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
     
    
}


# 4. 测试配置
sudo nginx -t

# 应该显示:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

# 5. 重新加载 Nginx
sudo systemctl reload nginx

# 6. 验证 Nginx 监听 443 端口
sudo ss -lntp | grep ':443'

# 应该显示:
# LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=xxxxx,fd=x))

==================
步骤七:开放防火墙和安全组
==================
### Ubuntu 防火墙(ufw)
# 开放 HTTP 和 HTTPS 端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

# 验证规则
sudo ufw status numbered

# 应该看到:
# [1] 80/tcp         ALLOW IN    Anywhere
# [2] 443/tcp        ALLOW IN    Anywhere

### 腾讯云安全组
1. 登录腾讯云控制台
2. 云服务器 → 安全组 → 选择您的安全组
3. 入站规则 → 添加规则
4. 添加以下规则:
   - 协议端口:TCP:443
   - 来源:0.0.0.0/0
   - 策略:允许
   - 备注:HTTPS
5. 点击"完成"

 


================
步骤八:验证 HTTPS 访问
================
# 1. 在服务器上测试
curl -I https://www.wangzhanzhizuo9.com.cn

# 应该看到:
# HTTP/2 200
# server: nginx
# ...

# 2. 测试 HTTP 跳转
curl -I http:// www.wangzhanzhizuo9.com.cn

# 应该看到:
# HTTP/1.1 301 Moved Permanently
# Location: https://www.wangzhanzhizuo9.com.cn

# 3. 在浏览器访问(最终测试)
https://www.wangzhanzhizuo9.com.cn

# 浏览器应该显示:
# ✅ 地址栏显示锁图标
# ✅ 证书有效(点击锁图标查看)
# ✅ 网站正常加载

=================
自动续期配置(已自动完成)
=================
# acme.sh 安装时已自动设置 cron 任务,无需手动配置

# 验证 cron 任务
crontab -l | grep acme

# 应该看到类似:
# 0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

# 说明:
# - 每天凌晨 00:00 自动检查证书
# - 证书到期前 30 天自动续期
# - 续期后自动重载 Nginx(如果配置了 --reloadcmd)
# - 完全自动化,无需人工干预

# 手动测试续期(不会真的续期,只是测试)
~/.acme.sh/acme.sh --cron --force

====================
定期轮换 AccessKey(安全建议)
====================
# 建议每 30-60 天轮换一次 AccessKey

### 步骤1:在阿里云创建新的 AccessKey
1. 阿里云控制台 → RAM → 用户 → ssl-cert-user
2. 认证管理 → 创建新的 AccessKey
3. 复制保存新的 AccessKey ID 和 Secret

### 步骤2:更新服务器上的环境变量
# 更新环境变量
export Ali_Key="新的AccessKey_ID"
export Ali_Secret="新的AccessKey_Secret"

# 更新 ~/.bashrc
sed -i 's/Ali_Key=.*/Ali_Key="新的AccessKey_ID"/' ~/.bashrc
sed -i 's/Ali_Secret=.*/Ali_Secret="新的AccessKey_Secret"/' ~/.bashrc
source ~/.bashrc

# 验证更新
echo $Ali_Key

### 步骤3:禁用旧的 AccessKey
1. 阿里云控制台 → RAM → 用户 → ssl-cert-user
2. 找到旧的 AccessKey → 禁用或删除

# 注意:acme.sh 自动续期时会使用新的 AccessKey,无需重新申请证书

======
故障排查
======
### 问题1:申请证书失败
# 错误:DNS 验证失败
# 解决:
1. 检查 AccessKey 是否正确:echo $Ali_Key
2. 检查 RAM 用户权限:AliyunDNSFullAccess
3. 检查域名 DNS 是否在阿里云

### 问题2:证书文件不存在
# 错误:/etc/nginx/ssl/cert.pem 不存在
# 解决:
# 手动复制证书
sudo cp ~/.acme.sh/wangzhanzhizuo9.com.cn_ecc/fullchain.cer /etc/nginx/ssl/cert.pem
sudo cp ~/.acme.sh/wangzhanzhizuo9.com.cn_ecc/wangzhanzhizuo9.com.cn.key /etc/nginx/ssl/key.pem
sudo chmod 644 /etc/nginx/ssl/cert.pem
sudo chmod 600 /etc/nginx/ssl/key.pem

### 问题3:浏览器无法访问 HTTPS
# 检查清单:
1. Nginx 是否运行:sudo systemctl status nginx
2. 443 端口是否监听:sudo ss -lntp | grep 443
3. 防火墙是否开放:sudo ufw status
4. 腾讯云安全组是否开放 443 端口
5. 域名 DNS 解析是否正确:ping wangzhanzhizuo9.com.cn

### 问题4:证书过期
# acme.sh 自动续期失败(少见)
# 手动强制续期:
~/.acme.sh/acme.sh --renew -d wangzhanzhizuo9.com.cn --force
~/.acme.sh/acme.sh --install-cert -d wangzhanzhizuo9.com.cn \
  --key-file /etc/nginx/ssl/key.pem \
  --fullchain-file /etc/nginx/ssl/cert.pem
sudo systemctl reload nginx

========
常用命令参考
========
# 查看证书列表
~/.acme.sh/acme.sh --list

# 查看证书详情
~/.acme.sh/acme.sh --info -d wangzhanzhizuo9.com.cn

# 手动续期证书
~/.acme.sh/acme.sh --renew -d wangzhanzhizuo9.com.cn --force

# 查看 acme.sh 日志
cat ~/.acme.sh/acme.sh.log | tail -100

# 测试 Nginx 配置
sudo nginx -t

# 重载 Nginx
sudo systemctl reload nginx

# 查看证书有效期
openssl x509 -in /etc/nginx/ssl/cert.pem -noout -dates

# 查看证书详细信息
openssl x509 -in /etc/nginx/ssl/cert.pem -noout -text

==================
多域名管理(如果有多个站点)
==================
# 老站点和新站点可以共用同一个 RAM 用户和 AccessKey

### 为另一个域名申请证书(wangzhanjianshe9.com.cn)
# 1. 使用相同的环境变量(已配置,无需重复)
echo $Ali_Key  # 确认已配置

# 2. 申请另一个域名的证书
~/.acme.sh/acme.sh --issue --dns dns_ali \
  -d wangzhanjianshe9.com.cn \
  -d *.wangzhanjianshe9.com.cn

# 3. 安装到不同的文件名
~/.acme.sh/acme.sh --install-cert -d wangzhanjianshe9.com.cn \
  --key-file /etc/nginx/ssl/wangzhanjianshe9_key.pem \
  --fullchain-file /etc/nginx/ssl/wangzhanjianshe9_cert.pem

# 4. 在 Nginx 中为不同域名配置不同的 server 块
# 每个 server 块使用对应的证书文件

====
完成!
====
✅ Let's Encrypt 免费 SSL 证书已安装
✅ HTTPS 已启用(443 端口)
✅ HTTP 自动跳转到 HTTPS
✅ 自动续期已配置(到期前30天自动续期)
✅ 证书有效期:90 天
✅ 支持泛域名:*.wangzhanzhizuo9.com.cn

# 浏览器访问测试:
https://www.wangzhanzhizuo9.com.cn

# 参考资料:
- Let's Encrypt 官网:https://letsencrypt.org/
- acme.sh 官方文档:https://github.com/acmesh-official/acme.sh
- Nginx SSL 配置:https://nginx.org/en/docs/http/configuring_https_servers.html