LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

HTTPS 证书:从平台申请到自助签发

admin
2026年10月30日 12:39 本文热度 64

相关要点

  • 平台申请免费证书的瓶颈不在 CA,而在流程:有效期 90 天、到期只能重新申请、不支持泛域名,且每一步都需要人工介入。
  • 部署 HTTPS 只需两个文件:fullchain.pem(证书 + 中间证书)与 privkey.pem(私钥)。
  • 泛域名 *.example.com 不覆盖 example.com,也不覆盖跨级子域 a.b.example.com。
  • 泛域名只能使用 DNS-01 验证,这是规范要求,无法规避。
  • 自助签发全程在本机完成,私钥不经过任何第三方服务器。

一、问题的实质:90 天一次的重复劳动

以国内云平台的免费证书为例(腾讯云、阿里云等均提供此类产品),免费 DV 证书(域名验证型)有效期 90 天,到期不支持续费,只能重新申请。也就是说,一年至少四次重复同一套操作:

登录控制台 → 进入证书服务 → 申请免费证书 → 填写域名 → 选择验证方式 → 添加 TXT 记录 → 提交验证 → 等待签发 → 下载压缩包 → 解压 → 挑出对应服务器的文件 → 上传到服务器 → 修改配置 → 重载服务。

这套流程没有技术难度,成本在于重复性:每次都要人工介入,每次都不能遗漏。一旦遗漏,站点 HTTPS 即失效,访客会看到安全警告。

平台侧的免费证书还有若干结构性限制:

项目
免费证书
有效期
90 天
续期
不支持,到期后重新申请
泛域名
不支持
绑定 IP
不支持
签发方式
域名验证通过后异步签发
人工支持
无

具体额度与域名后缀限制会随平台政策调整,以控制台当前公示为准。其中两项影响最大:

  • 90 天决定了一年四次的基本频率。
  • 不支持泛域名意味着,站点若有 www、api、admin 三个子域,就需要三张证书、三套流程、三次续期。

平台确实提供自动续期,但前提是域名接入平台的加速或负载均衡体系(修改 NS 或添加 CNAME)。若域名解析与站点都部署在自有服务器,这项能力无法使用。

需要说明的是,CA 本身并不是瓶颈。平台免费证书同样由公共 CA 签发,与自助签发得到的证书在信任级别上完全一致,差异只在流程的组织方式:前者把每一步封装为控制台操作,后者交由程序自动完成。

二、证书为什么是多个文件

申请完成后解压,通常会看到四个名称相近的文件:

cert.pem
chain.pem
fullchain.pem
privkey.pem

它们并不是四份彼此独立的内容,而是一条信任链加一把私钥。

信任链为什么分三层

浏览器信任的是证书颁发机构(CA)。它内置一份根证书清单,随操作系统与浏览器分发。理论上,CA 可以只用根证书直接为站点签发。

但根证书的私钥一旦泄露,整个信任体系即失效。因此实际采用的是三层结构:

根证书        浏览器内置,离线保管
   ↓ 签发
中间证书      CA 日常签发使用
   ↓ 签发
叶证书        你的站点证书,包含域名

验证时由下向上回溯:叶证书的签发者是中间证书,中间证书的签发者是根证书,根证书在本机信任清单内,验证通过。

由此可以推出一条部署要求:服务器必须把叶证书与中间证书一并发送给客户端,否则信任链在中间断开。

四个文件的分工

文件
内容
用途
privkey.pem
私钥
服务器加载,不可公开
cert.pem
叶证书,1 张
仅供组合使用,不建议单独部署
chain.pem
中间证书,通常 1~2 张
用于补全信任链
fullchain.pemcert.pem
 + chain.pem
服务器配置使用此项

结论:部署只需要 fullchain.pem 与 privkey.pem。

只部署 cert.pem 会发生什么

Chrome 能正常打开。它在发现信任链不完整时,会依据证书中的 AIA 字段自行下载中间证书。

但 curl、Java、Node.js、微信内置浏览器、旧版 Android 不会执行这一步,直接报错:

unable to get local issuer certificate

这类故障的典型特征是:开发者在本地验证一切正常,用户端却报告证书错误。使用 fullchain.pem 即可避免。

反向的极端做法也不可取:不要把根证书拼入证书链。客户端本机已有根证书,额外传输只会增加握手开销。

部署后的自查

# 查看证书包含的域名
openssl x509 -in fullchain.pem -noout -text | grep -A1 "Subject Alternative Name"

# 查看线上实际发送的证书链
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -E "^(depth|verify)"

若第二条命令输出 unable to verify the first certificate,说明中间证书缺失,应检查配置中是否只引用了 cert.pem。

三、apex 与泛域名的覆盖边界

常见问题:已申请 *.example.com,访问 example.com 仍然提示证书错误。原因是泛域名不包含它自身。

DNS 是一棵树:

. (根)
└── com
    └── example.com          ← apex,也称裸域名、根域名
        ├── www.example.com
        ├── api.example.com
        └── a.b.example.com

example.com 位于该树形结构的顶点(相对其子域而言),因此称为 apex domain,中文常称裸域名或根域名,对应解析面板中的 @ 记录。

泛域名中的 * 匹配规则严格:只匹配一级,且不能为空。

申请的域名
覆盖范围
不覆盖
*.example.comwww.example.com
、api.example.com
example.com
(apex 本身)、a.b.example.com(跨两级)

因此,若要让主域名与所有一级子域都启用 HTTPS,必须同时申请 *.example.com 与 example.com:

example.com
*.example.com

平台免费证书不支持泛域名,五个子域就需要五张证书,每 90 天续期五次。

四、域名验证为什么不可省略

签发证书前,CA 必须确认申请者确实控制该域名。否则任何人都可以为他人站点申请证书,进而实施中间人攻击。

三种验证方式的本质相同:将一个由 CA 指定的随机值,放置到只有域名控制者才能修改的位置。

方式
操作
适用场景
HTTP-01
在站点根目录放置指定内容的文件,由 CA 访问校验
证书部署机器即当前服务器
DNS-01
在域名下添加一条 _acme-challenge TXT 记录
80 端口不可用、站点经过 CDN,或需要泛域名
手动 HTTP
人工将文件放入站点目录
已有 Web 服务运行,不便停机

泛域名只能使用 DNS-01 验证。 泛域名可能指向任意一台服务器,只有 DNS 记录能够统一证明域名归属,这是规范层面的约束。

五、自助签发的流程

工具的职责即把上述步骤自动化,对应关系如下:

  1. 以本机账号向 Let's Encrypt 创建订单;
  2. 依据订单生成验证所需的 TXT 记录;
  3. 记录生效后提交验证,向 CA 查询结果;
  4. 验证通过后生成本地密钥、提交 CSR、下载证书并拆分文件。

工具使用 Python 编写,除 cryptography 与 certifi 外无其他依赖,界面运行在本地浏览器中。全部操作在本机完成,私钥不离开本机。

第一步:启动

Windows 双击 run.bat,macOS / Linux 执行 ./run.sh。首次运行会自动创建虚拟环境并安装依赖,随后自动打开 http://127.0.0.1:8899。

第二步:填写域名

唯一需要注意的环节:

  • 域名一行一个,或以逗号分隔;
  • 需要泛域名时填写 *.example.com;
  • 同时填写 apex 域名 example.com。
example.com
*.example.com

首次使用建议勾选「高级选项 → 使用测试环境」。测试环境签发的证书不被浏览器信任,但流程与正式环境完全一致,可先跑通全流程再切换,避免消耗正式环境的签发配额。

第三步:完成验证

选择 DNS 验证后,界面会给出待添加的记录:

主机记录
记录类型
记录值
_acme-challenge
TXT
由工具生成的一串随机字符

在域名解析控制台添加该记录,通常 1~10 分钟生效。工具提供「检测解析是否生效」功能,直接查询公共 DNS,避免反复提交验证。记录生效后点击「开始验证」,数秒内返回结果。

验证通过后的环节自动完成:生成密钥、提交 CSR、CA 签发、下载并拆分证书,通常在两三秒内结束。

六、部署与续期

证书存放于 certs/<域名>-<时间戳>/ 目录:

privkey.pem      私钥,不可外传
cert.pem         叶证书
chain.pem        中间证书
fullchain.pem    叶证书与中间证书拼接
cert-info.json   到期时间、域名清单等摘要

部署使用 fullchain.pem 与 privkey.pem。Nginx 配置示例:

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
}
nginx -t && nginx -s reload

IIS 需要 .pfx 格式,工具界面提供了对应命令:

openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem

关于续期:90 天有效期由 CA 策略决定,与工具无关,Let's Encrypt 自推出起即为 90 天。并且这个期限在持续缩短——CA/Browser Forum 已通过分阶段缩减方案,公共证书最长有效期将由 398 天依次降至 200 天、100 天,最终降至 47 天。具体时间表会随规范修订调整,但方向明确:证书短期化不可逆,手工续期在若干年后将不再可行,自动化是必要条件而非效率优化。

工具无法取消续期这件事,但把一次续期的操作成本从一个完整的手工流程,压缩为重新运行一次、等待数十秒。

七、与平台申请的对比

证书本身没有区别:平台免费证书与自助签发的证书同为公共 CA 签发的 DV 证书,浏览器信任级别一致。差别在流程:

项目
平台控制台
自助签发
泛域名
不支持
支持
签发耗时
验证通过后异步签发
数秒
apex 与子域
需分别申请多张
一张证书覆盖
续期
重新申请、下载、部署
重跑一次,覆盖文件
文件组织
按服务器类型分多个目录
固定文件集,两个即够用
适用范围
与平台体系绑定
任意服务器
自动化
依赖平台产品能力
可接入计划任务

需要补充的是:若域名已接入平台的加速或负载均衡,平台的自动续期与自动部署更为省事,此时并无必要改用本工具。自助签发的价值在于,站点与解析均在自有环境、无法使用平台托管能力时,仍能获得同等的自动化水平。

八、获取方式

代码以 MIT 协议开源:

github.com/triplestudio/letsencrypt-tool

运行环境要求 Python 3.9 及以上。仓库内附有 证书基础文档,对 CSR、SAN、信任链、文件分工及 openssl 自查方法有更完整的说明。

最后一点与安全相关:私钥是站点凭证中价值最高的部分。 该工具全程在本机运行,私钥仅写入本地磁盘,不经过任何第三方服务器。使用其他在线工具生成证书时,需先确认其是否会留存或上传私钥。


阅读原文:点击这里​


该文章在 2026/10/30 12:39:25 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号