拾忆🍂拾忆🍂
  • Ollama
  • clawhub-cli
  • dsh
  • OpenClaw
  • OpenClaw-钉钉
  • OpenClaw-飞书
  • Skills
  • MySQL
  • Oracle
  • PostgreSQL
  • MyBatis
  • API升级
  • HMOS
  • HMOS 官方示例项目集
  • HDC
  • 百变小组件
  • 元服务
  • Java
  • MinIO
  • Stream
  • JSP & Struts2
  • Spring
  • FFmpeg
  • SSL证书
  • Linux
  • docker
  • Git
  • Nginx
  • 终端快捷键
  • Adobe Audition
  • Aseprite
  • cpp
  • Excel
  • K
  • Markdown基本用法
  • MuseScore 4.x
  • UVR
  • Windows
  • emoji-cheat-sheet
  • IDE快捷键
  • macOS
  • obs-studio
  • YOLO
  • Python
  • VuePress 2.x
  • 内置组件
  • markdown-container
  • markdown-ext
  • markdown-hint
  • markdown-preview
  • markdown-tab
  • Markdown扩展语法
  • 插件配置
  • prismjs
  • 样式
  • CSS
  • JS
  • TS
  • Vue3
主页
梦的开始🌅
  • Ollama
  • clawhub-cli
  • dsh
  • OpenClaw
  • OpenClaw-钉钉
  • OpenClaw-飞书
  • Skills
  • MySQL
  • Oracle
  • PostgreSQL
  • MyBatis
  • API升级
  • HMOS
  • HMOS 官方示例项目集
  • HDC
  • 百变小组件
  • 元服务
  • Java
  • MinIO
  • Stream
  • JSP & Struts2
  • Spring
  • FFmpeg
  • SSL证书
  • Linux
  • docker
  • Git
  • Nginx
  • 终端快捷键
  • Adobe Audition
  • Aseprite
  • cpp
  • Excel
  • K
  • Markdown基本用法
  • MuseScore 4.x
  • UVR
  • Windows
  • emoji-cheat-sheet
  • IDE快捷键
  • macOS
  • obs-studio
  • YOLO
  • Python
  • VuePress 2.x
  • 内置组件
  • markdown-container
  • markdown-ext
  • markdown-hint
  • markdown-preview
  • markdown-tab
  • Markdown扩展语法
  • 插件配置
  • prismjs
  • 样式
  • CSS
  • JS
  • TS
  • Vue3
主页
梦的开始🌅
  • 「从开始,到永久」
  • AI

    • Ollama
    • clawhub-cli
    • dsh
    • OpenClaw
    • OpenClaw-钉钉
    • OpenClaw-飞书
    • Skills
  • Database

    • MySQL
    • Oracle
    • PostgreSQL
    • MyBatis
  • HarmonyOS

    • API升级
    • HMOS
    • HMOS 官方示例项目集
    • HDC
    • 百变小组件
    • 元服务
  • Java

    • Java
    • MinIO
    • Stream
    • JSP & Struts2
    • Spring
  • Linux

    • FFmpeg
    • SSL证书
    • Linux
    • docker
    • Git
    • Nginx
    • 终端快捷键
  • Others

    • Adobe Audition
    • Aseprite
    • cpp
    • Excel
    • K
    • Markdown基本用法
    • MuseScore 4.x
    • UVR
    • Windows
    • emoji-cheat-sheet
    • IDE快捷键
    • macOS
    • obs-studio
    • YOLO
  • Python

    • Python
  • VuePress

    • VuePress 2.x
    • 内置组件
    • markdown-container
    • markdown-ext
    • markdown-hint
    • markdown-preview
    • markdown-tab
    • Markdown扩展语法
    • 插件配置
    • prismjs
    • 样式
  • Web

    • CSS
    • JS
    • TS
    • Vue3
  • 主页

Let's Encrypt

提示

大致步骤就是:

  • 单个 证书,需要使用80端口自动验证服务器所有权,选 default options
  • 80端口不通 或 通配符 证书(不支持多级子域名),需要DNS TXT记录或者需要生成通配符域名证书,选 full options 选项

然后输入Host(在这里指你的域名或者子域名),选择自动还是DNS手动。以下都已通配符证书为例。

Linux

1. 安装 Certbot

# Ubuntu/Debian
sudo apt update
sudo apt install certbot

# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot

# 或使用 snap 安装(推荐)
sudo snap install --classic certbot

2. 申请通配符证书

方法一:手动 DNS 验证

# Certbot(< 1.0)
sudo certbot certonly --manual --preferred-challenges dns -d "example.com" -d "*.example.com" --server https://acme-v02.api.letsencrypt.org/directory

# Certbot(>= 1.0)默认使用 ACME v2,不需要指定 `--server`
sudo certbot certonly --manual --preferred-challenges dns -d "example.com" -d "*.example.com"

执行后会提示:

  1. 添加 TXT 记录 _acme-challenge.example.com
  2. 记录值为系统生成的一串字符
  3. 添加后等待 DNS 生效,按回车继续

方法二:使用 DNS 插件(自动验证)

Cloudflare

# 安装插件
sudo apt install python3-certbot-dns-cloudflare

# 创建 API token 文件
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini

# 内容如下:
# dns_cloudflare_api_token = 你的API_TOKEN

# 设置权限
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# 申请证书
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d "example.com" \
  -d "*.example.com"

阿里云 DNS

# 安装插件
pip install certbot-dns-aliyun

# 创建配置文件
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/aliyun.ini
# 内容:
# dns_aliyun_access_key = 你的AccessKey
# dns_aliyun_access_key_secret = 你的AccessKeySecret

# 设置权限
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# 申请证书
sudo certbot certonly \
  --authenticator dns-aliyun \
  --dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
  -d "example.com" \
  -d "*.example.com"

华为云 DNS

# 安装插件
pip install certbot-dns-huaweicloud

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

# 文件内容如下:
# dns_huaweicloud_access_key_id = 你的AccessKeyId
# dns_huaweicloud_secret_access_key = 你的SecretAccessKey
# dns_huaweicloud_region = cn-north-4

# 设置权限
sudo chmod 600 /etc/letsencrypt/huaweicloud.ini

# 申请证书
sudo certbot certonly \
  -a dns-huaweicloud \
  --dns-huaweicloud-credentials /etc/letsencrypt/huaweicloud.ini \
  -d "example.com" \
  -d "*.example.com" \
  --dns-huaweicloud-propagation-seconds 60
  • cn-north-1 # 华北-北京一
  • cn-north-4 # 华北-北京四
  • cn-east-3 # 华东-上海一
  • cn-south-1 # 华南-广州
  • ap-southeast-1 # 亚太-新加坡

3. 证书位置

申请成功后,证书文件位于:

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

4. 自动续期

# 测试续期
sudo certbot renew --dry-run

# 自动续期已配置在 crontab 或 systemd timer
# 查看定时任务
sudo systemctl list-timers | grep certbot

注意事项

  1. DNS 验证:通配符证书必须使用 DNS-01 验证方式
  2. 记录生效:DNS 记录可能需要几分钟到几小时生效
  3. 权限要求:需要域名的 DNS 管理权限
  4. 证书有效期:Let's Encrypt 证书有效期为 90 天
  5. 速率限制:注意 Let's Encrypt 的申请频率限制

常见问题

Q: 通配符证书能覆盖多级子域名吗?
A: 不能。*.example.com 只覆盖一级子域名,如 www.example.com,不包括 a.b.example.com。

Q: 如何同时申请多个域名?

sudo certbot certonly --manual --preferred-challenges dns \
  -d "example.com" -d "*.example.com" \
  -d "example.org" -d "*.example.org"

需要为每个域名添加对应的 TXT 记录。

win-acme

1. 下载工具

win-acme.xxx.x64.pluggable

2. 申请通配符证书

# 以通配符证书为例,需要使用DNS验证。使用80端口自动验证的没有尝试过。
cmd> wacs.exe

# 下面的选项依次选择
> M: Create certificate (full options)
> 2: Manual input
## Host输入(逗号分割)
> forforio.cn,*.forforio.cn
> 回车
> 1: Separate certificate for each domain (e.g. *.example.com)
> 6: [dns] Create verification records manually (auto-renew not possible)

## 选2 使用为 RSA 现在是现代浏览器兼容性最好的证书秘钥类型
> 2: RSA key
## 2和3都可以,这里以2为例(nginx可以直接使用)
> 	2: PEM encoded files (Apache, nginx, etc.)
> 	3: PFX archive
## 输入证书要生成到哪个文件夹
> D:\Program Files\nginx-1.28.0\ssl
## 选择 1.None 不加密私钥,选择 2. console** 在控制台输入私钥加密密码
> Save to vault for future reuse? (y/n*) n不保存
## 接下来会询问是否还要其他格式的证书。需要的话会填写和上面一样的信息。接下来下一步
> 3: No (additional) installation steps
## 这里之后过一会会让你以 Record 创建一个子域名,DNS解析选择TXT,value为Content。现在去你的DNS服务商上进行新建解析。
## 新建完成,回到CMD敲击回车,提示 Preliminary validation succeeded 即为成功,然后会让你删除这条记录再次敲击回车。
> Do you want to specify the user the task will run as? (y/n*) - n

## 完成
> Q: Quit

## nginx配置这两个 证书链和私钥
ssl_certificate     "D:/Program Files/nginx-1.28.0/ssl/forforio.cn-chain.pem";
ssl_certificate_key "D:/Program Files/nginx-1.28.0/ssl/forforio.cn-key.pem";

解密私钥

重要

如果上方选择了私钥加密证书,那么nginx配置之后,每次 nginx -t, nginx -s reload 都要输入密码,可以使用以下 powershell 命令生成无密码的私钥文件:

 openssl rsa -in forforio.cn-key.pem -out forforio.cn-key-nopass.pem

nginx使用无密码的私钥:

 ssl_certificate     "D:/Program Files/nginx-1.28.0/ssl/forforio.cn-chain.pem";
 ssl_certificate_key "D:/Program Files/nginx-1.28.0/ssl/forforio.cn-key-nopass.pem";

转换格式

fpx 转为 nginx 能用的格式:

# 提取证书
openssl pkcs12 -in "D:\Program Files\nginx-1.28.0\ssl\yu.forforio.cn.pfx" -clcerts -nokeys -out "D:\Program Files\nginx-1.28.0\ssl\yu.forforio.cn.crt"

# 提取私钥
openssl pkcs12 -in "D:\Program Files\nginx-1.28.0\ssl\yu.forforio.cn.pfx" -nocerts -nodes -out "D:\Program Files\nginx-1.28.0\ssl\yu.forforio.cn.key"

警告

-legacy: 当报错的时候,可能是因为 OpenSSL 3.0 默认禁用了旧的 RC2 加密算法,而 win-acme 生成的 PFX 文件使用了 RC2-40-CBC 加密。添加这个选项以启用旧算法支持。

DNS-TXT验证

nslookup -q=TXT <你的域名>
最近更新: 2026/8/19 12:08
Contributors: Enlin
Prev
FFmpeg
Next
Linux