免费ssl证书申请
浏览次数:37作者:千旭网络
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