☰
HTTPS免费证书在线申请攻略:从原理到自动化部署
2026/9/28 5:22:03 网站建设 项目流程

做 HTTPS 免费证书在线申请这件事,我已经帮不少朋友和项目搭过流程。说句实在话,在证书各种收费、续费、审核折腾人的今天,免费证书的“在线申请”通道基本是中小站点和个人的救命稻草。很多人一听到 HTTPS 证书就觉得特别专业、特别麻烦,其实整套流程捋顺了,比想象中简单得多,而且完全有免费且稳定的解法。

这篇内容我打算把免费证书在线申请的完整路线、步骤、容易踩的坑、以及我推荐的工具方案一次讲清楚。不管你是刚接触网站搭建的初学者,还是已经在用付费证书想省钱的老手,按照这套思路走下来,都能找到适合自己的免费方案,并且大概率一口气搞定。

1. 免费证书到底靠不靠谱,先搞清楚这三种类型

做 HTTPS 免费证书之前,得先搞清楚你申请到的到底是什么类型的证书。很多新手上来就搜“免费 SSL 证书在线申请”,结果申请下来发现很多站点不认,或者浏览器直接提示不安全。这不一定是免费的问题,很可能是证书类型或用错了场景。

1.1 域名型证书、企业型证书和增强型证书的区别

证书按验证强度一般分三种:DV(域名验证型)、OV(企业验证型)、EV(增强验证型)。免费证书基本都属于 DV 证书,也就是只需要证明“这个域名归我管”,就能签发。OV 和 EV 类型需要企业资质、电话回访、人工审核,这种成本很高,基本不会有免费的渠道。

DV 证书解决的核心需求是“传输加密”,也就是浏览器和服务器之间的数据传输是加密的,第三方无法直接抓包看到明文内容。它不负责“验证企业身份”,所以你会看到市场上的付费 OV/EV 证书在浏览器地址栏能显示公司名称,而 DV 证书没有这个待遇。

我的建议是:个人博客、小型企业官网、API 接口、测试环境、内部系统,直接上免费 DV 证书完全够用。如果是金融类、电商类、品牌调性要求极高的官网,那才需要考虑付费的 OV 或 EV 证书。用生活化的比喻就是:DV 证书像是给门上了一把好锁,黑客进不来;OV/EV 证书则是锁上还挂了个牌子写着“XX公司专用”,额外多一层身份背书。

1.2 免费证书的信任根和付费证书有何不同

另一个常见的疑问是:免费证书的“信任度”和付费证书是不是有差别?实际上,只要证书是由受信任的 CA(证书颁发机构)签发,浏览器和操作系统就会认。免费证书大多来自 Let's Encrypt、ZeroSSL、Google Trust Services 这类机构,它们的根证书早就预置在 Windows、macOS、Android、iOS 以及各款浏览器里了。

我之前测试过 Let's Encrypt 签发的免费证书部署后,在 Chrome、Edge、Firefox、Safari 以及手机端访问,全部都会显示安全锁标识。这就说明,免费和付费在“浏览器是否信任”这个维度上基本没有差别。差别主要在于:有效期时长、吊销机制、客户支持、保险保障和企业身份验证这些附加项上。

顺便说一句,如果你是在国内云厂商的网页控制台上申请免费证书,注意看一下签发机构,一般是 certum 或者类似机构,这些也是正规受信任的 CA,全球通用。如果你看到的是“聚妍”之类的标注,多半是代理商或渠道商的标识,实际签发主体还是正规 CA,不用过分担心。

2. 在线申请免费证书,主流渠道和工具盘点

免费证书的申请渠道说多不多,说少不少。我按“是否真正在线申请”和“是否适合自动化”这个维度,把常见方案做了一个梳理,大家可以直接对照自己的情况选。

2.1 网页控制台在线申请:适合有图形界面操作习惯的人

国内主流云厂商都提供了免费证书的在线申请入口,比如阿里云、腾讯云、华为云。路径一般是在控制台搜索“SSL证书”或“数字证书管理服务”,找到“免费证书”或“个人测试证书”选项,然后按提示填写域名、选择验证方式、提交申请。

这类在线申请的体验类似填表单:选域名类型、填域名、选自动 DNS 验证还是手动文件验证、确认信息、提交。一般在几分钟到几个小时内签发,之后你可以在控制台下载证书文件(通常是 pem 和 key 两种文件,或者是 pfx/jks 格式用于 Windows 服务器)。

优点是操作简单,完全图形界面,适合不熟悉命令行的人。缺点是免费额度有限,一个账号申请数量有上限,而且证书有效期一般只有 3 个月或 1 年,需要手动续期,到期后如果忘了续期,网站就直接不安全了。

我试用下来,这类网页在线申请更适合“一次性部署”的场景:比如给公司官网配证书,配完就不太动了。如果你频繁上线新域名、经常折腾服务器,建议看下面这种命令行在线申请方式。

2.2 命令行在线申请:一个命令搞定申请和续期

Let's Encrypt 项目的出现把免费证书申请门槛拉到了极低。配合 certbot 或 acme.sh 这类工具,可以在服务器上一行命令自动完成验证、申请、下载、部署。它的本质也是“在线申请”,只不过是通过 API 与 CA 的服务器通信,省去了人工填表的环节。

我最推荐 acme.sh,它是个纯 Shell 脚本,安装后可以从 CA 签发证书,支持自动续期、自动部署,而且可以配合各种 DNS 服务商做 DNS API 验证。它的工作流大概是:

同样属于“在线申请”,但它是“自动在线申请”,拿到了证书之后会生成证书文件到你指定的目录。这种方式尤其适合 GitHub Pages 之外的服务器环境,比如 Nginx、Apache、Caddy、Tomcat 等。Caddy 甚至内置了自动 HTTPS,部署完服务之后证书自动签发、自动续期,根本不用手动操作,这才是真正的“在线申请”最佳体验。

2.3 第三方长期免费证书平台:适合需要手动下载证书的场景

除了云厂商和 Let's Encrypt 的自动化方案,还有一些第三方平台提供免费在线申请,代表性的有 ZeroSSL 官网、SSL For Free 网站等。这类平台的好处在于:你在网页里输入域名、选择验证方式(HTTP 文件上传验证或 DNS TXT 记录验证)、提交申请,然后在网页上下载证书压缩包,整个过程对新手极友好。

ZeroSSL 的免费证书有效期初始是 90 天,可以免费续期。它提供在线生成 CSR、在线选择验证方式等操作,下载时会打包成 zip,里面有 cert.pem、ca_bundle.crt、private.key 等文件,对应到不同服务器还有 Nginx、Apache、IIS、Tomcat 等专属格式,非常贴心。

我有一段时间负责维护一批小型企业官网,不方便在对方服务器上装脚本的时候,就用 ZeroSSL 在线申请,然后在服务器上手动配置。整体下来体验稳定,没有遇到浏览器不信任的问题。

3. 完整实操:从零开始申请第一张免费证书

接下来是这篇文章的重头戏,我会手把手演示一套完整流程。以目前使用人数最多、最通用的 Let's Encrypt + acme.sh 方案为例,包含怎么装、怎么申请、怎么配置到 Nginx。如果你用的是 Windows 服务器,后面我也会单独说。

3.1 安装 acme.sh 并用 DNS API 完成验证

acme.sh 的安装一般是直接拉取安装脚本执行,在服务器上运行以下命令前请注意,先把域名解析到当前服务器,确保域名能正常访问,否则后续验证会失败。

安装过程会创建一个 ~/.acme.sh 目录,并把 acme.sh 的命令放到当前用户的 PATH 里。安装完成后,我们需要选择一个 DNS 服务商。为什么推荐 DNS API 验证而不是 HTTP 验证?因为 HTTP 验证要求在网站根目录放置一个临时文件,这要求你的 Web 服务已经跑起来且配置正确。而 DNS API 验证只需要在 DNS 服务商处加一条 TXT 记录即可,不需要预先部署 Web 服务,更灵活,尤其适合还没建站或者服务暂时异常的域名。

以阿里云 DNS 为例,需要先在阿里云控制台创建 AccessKey,然后给 acme.sh 配置环境变量后执行申请命令:

脚本的原理是自动调用阿里云 DNS 的 API,在域名的 DNS 解析列表里添加一条 TXT 记录,然后去 Let's Encrypt 的服务器请求签发。签发完成后,证书会保存到 /home/user/.acme.sh/example.com/ 目录下,里面有 fullchain.cer 和 example.com.key。全程不需要打开浏览器,体验比网页在线申请流畅太多。

3.2 配置 Nginx 服务器,让 HTTPS 立即生效

拿到证书文件之后,下一步就是让 Nginx 加载证书。首先把你的网站配置文件打开,一般路径是 /etc/nginx/conf.d/example.com.conf,如果没有就新建一个 server 块。关键配置如下:

需要特别留意的是证书链文件 fullchain.cer 要写在 ssl_certificate 里,私钥 example.com.key 写在 ssl_certificate_key 里。为什么不用单独的 cert.pem 而要用 fullchain?因为 fullchain 文件里包含了你的域名证书和中间证书,浏览器在验证时可以完整地走通“域名证书 -> 中间证书 -> 根证书”的信任链。如果只配置了域名证书而缺少中间证书,很多浏览器会提示证书链不完整,甚至在部分安卓设备上直接无法访问。这个坑我踩过不只一次。

配置完成后,执行 nginx -t 测试配置语法,然后 nginx -s reload 重新加载。

3.3 Windows 服务器上如何在线申请并导入证书

如果你维护的是 Windows Server,IIS 环境下的免费证书配置稍微特殊一点。常见做法是在云厂商控制台或 ZeroSSL 官网在线申请,下载证书时选择 IIS 格式(也就是 pfx 文件),然后通过 MMC 控制台导入证书,再绑定到对应网站。这里提醒一个非常关键的细节:导入 pfx 时需要设置导出密码,这个密码后续在 IIS 绑定证书时要用到,千万不要忘记。

Windows Server 上还有一种自动化程度更高的方式,就是使用 Win-ACME 工具,它可以把 Let's Encrypt 的自动签发和续期能力带到 Windows 平台。工具会定时任务的方式自动续期,并且可以把证书自动导入到指定的证书库中。如果企业内有多台 Windows 服务器需要配置 HTTPS,建议花点时间研究 Win-ACME。

4. 证书部署完成后,这几件事必须检查

证书部署完成、HTTPS 能访问,很多人就以为万事大吉了。实际上,后续的检查和维护同样重要,否则可能在某些场景下出现访问异常,而你根本不知道问题出在哪。

4.1 证书链完整性检测,一个工具就能看明白

部署完证书后,我强烈建议到在线检测网站(比如 SSL Labs 的 SSL Server Test)输入你的域名,跑一次完整检测。这个检测会从多个维度评估你的 HTTPS 配置:证书链是否完整、协议版本是否过老、加密套件强度是否足够、是否有已知漏洞等。

检测结果里最重要的就是证书链那一栏,如果显示“Chain issues”或者证书链不完整,说明你的中间证书配置有问题,需要按我之前说的方式检查 fullchain 是否完整。如果显示信任链完全,证明证书本身和中间证书都没问题。另一个实用的检查方式是浏览器开发者工具的“安全”面板,也可以查看证书详情。我平时两者结合着看:在线工具看全局配置质量,浏览器看实际用户体验。

4.2 常见部署错误自查清单

根据我的经验,免费证书部署后最容易出现的问题有这么几个,可以按清单逐项排查:

  • 浏览器提示“不安全”且证书名称显示为域名不匹配,通常是证书和域名对不上,检查申请证书时的域名是否加上了 www 前缀,或者 Nginx 里配置的 server_name 是否和证书域名一致。
  • 提示“无法建立安全连接”,通常是私钥与证书不匹配。检查下载证书时是否用错了文件,或者解压时搞混了 pem 文件和 key 文件的位置。
  • 提示“证书链不完整”,前面已经提过,解决方法是使用 fullchain 或把中间证书拼接到域名证书之后。
  • 移动端访问正常但桌面浏览器显示异常,这种比较少见,最常见的原因是你只监听了一组 TLS 端口,但部分浏览器会尝试 HTTP/2 升级,如果 HTTP/2 配置不当就会回退失败。一般是 Nginx 的 listen 443 ssl http2; 写法在 Nginx 1.25 之后需要用 http2 on; 单独声明,否则会报错。
  • 网页加载了部分 HTTPS 资源但地址栏没有锁标识,这是混合内容问题,页面上还有 http:// 开头的图片或脚本,需要全部改成 https:// 或使用相对协议。

4.3 证书有效期自动续期,这一步不能少

免费证书有效期通常只有 90 天。这既是 CA 为了确保信息新鲜度的设计,也是免费方案对用户维护能力的一个基本要求。手动续期非常容易忘,所以我一直推荐直接把续期做成自动化。

用 acme.sh 申请证书后,它会自动创建一个 crontab 定时任务,默认每 60 天尝试续期一次。也就是说证书在第 60 天还没过期的时候就会自动续期,不用担心 90 天后到期。需要注意的关键点是:续期完成后必须让 Web 服务器重新加载证书才能生效。acme.sh 里提供了 --reloadcmd 参数,配置成 nginx -s reload 或 systemctl reload nginx 即可。

如果你用的是云厂商网页控制台在线申请免费证书,那就没有自动续期了,需要在证书到期前手动申请新证书,再重新部署。这种情况建议你设置一个手机日历提醒,或者搞一个简单的脚本监控证书到期时间,毕竟网站突然变成“不安全”的代价还是挺大的。

5. 免费证书的进阶玩法:多域名、泛域名与批量申请

当你的域名数量多起来之后,一张一张申请证书的工作量会很可观。免费证书其实也支持多域名和泛域名,用好这个特性可以省大量时间。

5.1 用 SAN 证书同时保护多个域名

SAN(Subject Alternative Name)证书可以在同一张证书里包含多个域名,Let's Encrypt 的免费证书最多支持 100 个 SAN。也就是说,如果你有 example.com、www.example.com、api.example.com、m.example.com 四个域名,完全可以申请一张证书把它们全包了,部署后四个域名共用这一份证书文件。

用 acme.sh 申请多域名证书的命令格式是在 -d 参数后面重复添加域名。我自己维护的一个项目就是这样,一个证书搞定主站、接口站、静态资源站,省去了每个域名单独申请、单独续期的麻烦。不过要注意,SAN 证书只要其中一个域名验证失败,整张证书申请就会失败,所以申请前务必把所有域名的解析都做好。

5.2 泛域名证书:一次申请,所有子域名全保护

泛域名证书是比 SAN 更进阶的方案,证书中的域名写成 *.example.com,这样 example.com 下所有子域名都在这一张证书的覆盖范围内。这个需求非常常见,尤其是站点存在大量自动生成的二级域名时。

在线申请泛域名证书时,DNS 验证通常需要一个特殊的 TXT 记录,记录名是 _acme-challenge.example.com,记录值在申请过程中动态生成。用 acme.sh 配合 DNS API 验证,整个过程还是全自动的,但如果你用第三方网站在线申请,这一步就必须手动去 DNS 服务商后台添加解析记录,操作上稍微麻烦一点。

泛域名证书有几个小地方要注意:它不包含裸域名 example.com 本身,所以如果希望通过 example.com 访问主站,需要把裸域名也加到证书里,通常的做法是申请 *.example.com 的同时再加上 -d example.com。然后泛域名证书的续期验证逻辑和普通证书没有差别,仍然是自动的,祝你一劳永逸。

5.3 批量申请的管理经验

如果你要管理几十张证书,我强烈建议做两件事:第一,给证书文件名统一加上域名和下划线日期,比如 example.com_20250614.pem,避免下载多个证书后分不清哪个是哪个;第二,用一个简单的到期监控脚本每天检查一次证书剩余天数,如果小于 30 天就输出告警。这样不管是自动续期失败还是手动申请遗漏,你都能在网站出问题之前提前介入。

我个人还会把证书的私钥统一放在服务器的一个固定目录,比如 /etc/nginx/certs/,然后基于这个目录做统一备份。私钥文件权限记得设置为 600,避免其他用户读取。

6. 踩坑实录与性能加速经验

最后这部分,分享几个我实际遇到过的典型问题,以及一些让 HTTPS 访问速度更快的优化措施。这些内容在标准文档里不一定能找到,但对实际生产环境很有用。

6.1 证书信任机制导致的诡异问题:Java、APP 和部分客户端

我遇到过的最坑的免费证书问题是:浏览器访问完全正常,但 Java 后端调用 HTTPS 接口时报错,提示证书校验失败。原因是 Java 运行环境有独立的证书信任库 cacerts,默认没有把 Let's Encrypt 的根证书加进去。解决方案是把 Let's Encrypt 的根证书导入到 Java 的 cacerts 里,或者让代码忽略证书校验(仅限测试环境,生产环境千万别这么做)。

还有一个常见场景是自研 App 的 WebView 或原生网络框架对 HTTPS 证书有额外的校验逻辑。一些 App 在调试模式下会强制要求证书是某些测试证书,如果加载了正式证书反而会报错。遇到这种情况,先确认 App 是否有固定的证书公钥绑定。如果有,需要更新 App 里的公钥信息;如果没有,可能是证书链不完整导致的,重点排查中间证书。

6.2 证书申请频率限制和续期失败怎么办

Let's Encrypt 对证书申请有频率限制:同一主机每 3 小时最多申请 10 张证书,同一域名每 7 天最多申请 5 张证书(包括失败的)。如果你频繁测试申请,很容易触发限制。遇到这种情况,不要反复重试,等一段时间再申请,或者先去 ZeroSSL 申请一张救急。

续期失败大概率是 DNS 验证时的 TXT 记录没有自动删除,或者 DNS 服务商的 API 权限失效。我排查过的一次情况是:用户把域名从服务商 A 转移到服务商 B,但 acme.sh 里还配置着服务商 A 的 API 密钥,导致验证时无法读取域名的解析权限,续期就一直失败。解决方法是更新环境变量里的 API 信息。

6.3 启用 TLS 1.3 和 OCSP Stapling,让 HTTPS 更快更安全

免费证书本身不保证你的 HTTPS 配置就是最优的。我强烈建议大家把 TLS 版本至少设到 1.2,并在 Nginx 里开启 TLS 1.3,这样握手延迟会低很多。同时开启 OCSP Stapling,这是把证书吊销状态的查询结果由服务器主动发给浏览器,减少浏览器向 CA 发起额外请求的时间。这一步对老外服务器访问慢的站点尤其有用,因为可以省掉一个跨洋查询。

另一个加速配置是开启会话缓存,ssl_session_cache 设置为 shared:SSL:10m,并设置 ssl_session_timeout 为一段时间。这样浏览器在会话有效期内复用之前的 TLS 握手结果,大幅减少重复握手的开销。我自己用下来,开启这些配置之后,HTTPS 访问速度和 HTTP 已经几乎感觉不到差别。

6.4 个人项目里我最推荐的免费证书方案

如果你问我最终推荐什么,我的答案分两种情况。如果域名在阿里云、腾讯云这类国内服务商,并且你不想折腾命令行,直接在控制台申请免费证书下载导入最省事,缺点是续期麻烦,适合不频繁改动服务器的人。如果你自己有 Linux 服务器,并且愿意接受 Shell 命令,绝对首选 acme.sh + DNS API 自动部署 + 自动续期,一次性配置好,之后不用再管。

如果是 Windows 环境,就用 Win-ACME。如果你想要纯网页操作又不设限,ZeroSSL 官网在线申请也很好,手动下载证书部署一次后,90 天后再来一次即可。

在实际操作里,我还有一个体会:免费证书选择上,优先选和你的域名 DNS 服务商配套的工具,能少吃很多验证配置的苦。比如域名在阿里云,就用 acme.sh 配置阿里云 API;在 Cloudflare,就用 Cloudflare API。把 DNS 验证环节自动化后,在线申请才真正做到“无感”。

最后有一个小技巧值得分享:如果你申请证书时绑定了过长的域名列表(比如 SAN 证书里有 20 个域名),一旦其中一个域名过期或迁移,续期就容易失败。所以除非确实需要,证书里尽量少塞域名,精简到核心的 2-3 个即可。这个原则我一直沿用,这几年来被证书问题半夜叫醒的唯一一次,原因就是证书列表太长导致续期失败。能少操点心,就少操点心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询