
做 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证书颁发机构签发浏览器和操作系统就会认。免费证书大多来自 Lets Encrypt、ZeroSSL、Google Trust Services 这类机构它们的根证书早就预置在 Windows、macOS、Android、iOS 以及各款浏览器里了。我之前测试过 Lets Encrypt 签发的免费证书部署后在 Chrome、Edge、Firefox、Safari 以及手机端访问全部都会显示安全锁标识。这就说明免费和付费在“浏览器是否信任”这个维度上基本没有差别。差别主要在于有效期时长、吊销机制、客户支持、保险保障和企业身份验证这些附加项上。顺便说一句如果你是在国内云厂商的网页控制台上申请免费证书注意看一下签发机构一般是 certum 或者类似机构这些也是正规受信任的 CA全球通用。如果你看到的是“聚妍”之类的标注多半是代理商或渠道商的标识实际签发主体还是正规 CA不用过分担心。2. 在线申请免费证书主流渠道和工具盘点免费证书的申请渠道说多不多说少不少。我按“是否真正在线申请”和“是否适合自动化”这个维度把常见方案做了一个梳理大家可以直接对照自己的情况选。2.1 网页控制台在线申请适合有图形界面操作习惯的人国内主流云厂商都提供了免费证书的在线申请入口比如阿里云、腾讯云、华为云。路径一般是在控制台搜索“SSL证书”或“数字证书管理服务”找到“免费证书”或“个人测试证书”选项然后按提示填写域名、选择验证方式、提交申请。这类在线申请的体验类似填表单选域名类型、填域名、选自动 DNS 验证还是手动文件验证、确认信息、提交。一般在几分钟到几个小时内签发之后你可以在控制台下载证书文件通常是 pem 和 key 两种文件或者是 pfx/jks 格式用于 Windows 服务器。优点是操作简单完全图形界面适合不熟悉命令行的人。缺点是免费额度有限一个账号申请数量有上限而且证书有效期一般只有 3 个月或 1 年需要手动续期到期后如果忘了续期网站就直接不安全了。我试用下来这类网页在线申请更适合“一次性部署”的场景比如给公司官网配证书配完就不太动了。如果你频繁上线新域名、经常折腾服务器建议看下面这种命令行在线申请方式。2.2 命令行在线申请一个命令搞定申请和续期Lets Encrypt 项目的出现把免费证书申请门槛拉到了极低。配合 certbot 或 acme.sh 这类工具可以在服务器上一行命令自动完成验证、申请、下载、部署。它的本质也是“在线申请”只不过是通过 API 与 CA 的服务器通信省去了人工填表的环节。我最推荐 acme.sh它是个纯 Shell 脚本安装后可以从 CA 签发证书支持自动续期、自动部署而且可以配合各种 DNS 服务商做 DNS API 验证。它的工作流大概是同样属于“在线申请”但它是“自动在线申请”拿到了证书之后会生成证书文件到你指定的目录。这种方式尤其适合 GitHub Pages 之外的服务器环境比如 Nginx、Apache、Caddy、Tomcat 等。Caddy 甚至内置了自动 HTTPS部署完服务之后证书自动签发、自动续期根本不用手动操作这才是真正的“在线申请”最佳体验。2.3 第三方长期免费证书平台适合需要手动下载证书的场景除了云厂商和 Lets 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. 完整实操从零开始申请第一张免费证书接下来是这篇文章的重头戏我会手把手演示一套完整流程。以目前使用人数最多、最通用的 Lets 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 记录然后去 Lets 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 ServerIIS 环境下的免费证书配置稍微特殊一点。常见做法是在云厂商控制台或 ZeroSSL 官网在线申请下载证书时选择 IIS 格式也就是 pfx 文件然后通过 MMC 控制台导入证书再绑定到对应网站。这里提醒一个非常关键的细节导入 pfx 时需要设置导出密码这个密码后续在 IIS 绑定证书时要用到千万不要忘记。Windows Server 上还有一种自动化程度更高的方式就是使用 Win-ACME 工具它可以把 Lets 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 证书同时保护多个域名SANSubject Alternative Name证书可以在同一张证书里包含多个域名Lets 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默认没有把 Lets Encrypt 的根证书加进去。解决方案是把 Lets Encrypt 的根证书导入到 Java 的 cacerts 里或者让代码忽略证书校验仅限测试环境生产环境千万别这么做。还有一个常见场景是自研 App 的 WebView 或原生网络框架对 HTTPS 证书有额外的校验逻辑。一些 App 在调试模式下会强制要求证书是某些测试证书如果加载了正式证书反而会报错。遇到这种情况先确认 App 是否有固定的证书公钥绑定。如果有需要更新 App 里的公钥信息如果没有可能是证书链不完整导致的重点排查中间证书。6.2 证书申请频率限制和续期失败怎么办Lets 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 个即可。这个原则我一直沿用这几年来被证书问题半夜叫醒的唯一一次原因就是证书列表太长导致续期失败。能少操点心就少操点心。