2026免费SSL证书申请部署与自动续签全攻略

发布时间:2026/9/9 7:52:17
2026免费SSL证书申请部署与自动续签全攻略 最近这一两年只要手上有网站、有服务器就绕不开 SSL 证书这件事。不管是个人博客、企业官网还是内部系统地址栏前面那个小锁图标直接决定了访客和平台对你的信任度。我自己从最早手动买付费证书到后来摸索免费方案、折腾自动续签、踩遍各种部署坑算是把这条路上的弯弯绕绕基本走完了。这篇就按 2026 年的实际情况把免费 SSL 证书的申请、续期、部署和排错从头到尾捋一遍给正在折腾或者准备折腾的朋友一份可以直接照做的参考。1. 免费SSL证书到底能省多少事1.1 为什么所有站长都在折腾SSL证书先说个大实话现在的浏览器和搜索引擎对 HTTPS 的强制已经到了“没有证书就活不下去”的程度。Chrome 对 HTTP 站点直接标记为“不安全”微信内置浏览器也经常拦截未加密链接小程序接口更是强制要求 HTTPS。至于搜索引擎HTTPS 已经是基础加分项虽然不至于因为你没上证书就彻底不收录但在同等内容质量下有证书的站点排名更有优势是行业共识。所以这早就不是“要不要装”的问题而是“怎么又快又稳地装上”。免费证书和付费证书在这件事上能解决的底层问题是一样的在访客浏览器和你的服务器之间建立一条加密通道。差别主要在服务等级协议、保险赔付额度、兼容范围和有效期管理上。对绝大多数个人站长、中小企业官网、内部工具系统来说免费证书完全够用真正需要付费证书的场景其实是电商平台、金融业务、大型政企门户这类对信任背书要求极高的场景。1.2 免费证书和付费证书的核心差异我直接给一个对比表方便你判断自己到底需要哪种对比维度免费证书Lets Encrypt / ZeroSSL / 云厂商DV付费证书企业级 OV / EV申请成本0 元每年几百到几千不等签发速度几分钟到几小时OV 需要 1-3 个工作日EV 更久有效期90 天Lets Encrypt或 90 天ZeroSSL通常 1 年也有 2 年但逐年缩短信任等级DV仅验证域名所有权企业身份验证/扩展验证浏览器兼容性主流现代浏览器全部支持老旧设备有差异兼容性最好适合场景个人博客、中小网站、API接口、NAS、内网穿透电商、金融、政企官网什么叫 DV 证书就是只验证“这个域名是不是你的”不验证你是哪家公司、什么身份。验证方式主要有三种在域名解析里加一条 DNS TXT 记录、在网站根目录放一个验证文件、或者通过 HTTP 访问特定路径。只要你能证明自己能控制这个域名CA 就给你签发证书。这个验证过程通常是全自动的所以免费证书才能做到 90 天有效期还能自动续期。再说白一点免费证书省下的不只是钱主要是省去了填申请资料、传真营业执照、等人工审核这些繁琐流程。我见过很多朋友第一次申请付费证书时被 OV 验证折腾得够呛反观免费证书只要域名解析权限在自己手里十分钟之内就能搞定。2. 2026年还在用的4种免费方案2.1 方案一Lets Encrypt Certbot全能型Lets Encrypt 是目前市场占有率最高的免费 CA它背后的核心逻辑是把证书签发完全自动化。Certbot 是 EFF电子前沿基金会出品的官方客户端在 Ubuntu、Debian、CentOS 这些主流 Linux 发行版的软件源里都能直接安装。安装方式很简单sudo apt update sudo apt install certbot python3-certbot-nginx如果你用的是 Nginx装好之后一条命令就可以完成申请和自动配置sudo certbot --nginx -d example.com -d www.example.comCertbot 会自动检测 Nginx 配置、修改配置文件、把证书路径指过去然后重载服务。整个过程非常丝滑基本不需要你手动改任何配置文件。如果你是 Apache 用户把命令里的nginx换成apache即可sudo apt install certbot python3-certbot-apache sudo certbot --apache -d example.com如果你不想让 Certbot 帮你改 Web 服务器配置也可以用 webroot 模式它只负责申请证书把验证文件放到指定目录下然后你自己手动配置 Web 服务器引用证书文件sudo certbot certonly --webroot -w /var/www/example -d example.com申请成功后会生成四个文件/etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/cert.pem /etc/letsencrypt/live/example.com/chain.pem实际部署时只需关注fullchain.pem证书链和privkey.pem私钥。这两个文件后面配置 Nginx、Apache、Tomcat、群晖、FTP 服务都会用到。2.2 方案二acme.sh ZeroSSL脚本党首选acme.sh 是一个纯 Shell 写的 ACME 客户端最大的优势是脚本化、无依赖、安装完就常住用户目录通过定时任务完成续签。它默认使用 ZeroSSL 作为 CA也可以切回 Lets Encrypt。安装就一条命令curl https://get.acme.sh | sh安装完成后会把环境变量写入用户配置文件通常是~/.bashrc或~/.profile然后你可以通过 DNS API 方式签发证书。这种方式适合不方便暴露 80 端口、或者域名在 Cloudflare、阿里云、腾讯云等平台管理的场景。比如你的域名 DNS 托管在阿里云先在阿里云控制台创建 AccessKey然后export Ali_Key你的AccessKey ID export Ali_Secret你的AccessKey Secret acme.sh --issue --dns dns_ali -d example.com -d *.example.com看到没有这是我最喜欢它的原因之一支持通配符证书。Lets Encrypt 通过 Certbot 也能申请通配符证书但需要用 DNS 验证配置上稍微麻烦一些。acme.sh 通过各家 DNS 服务商的 API 自动添加 TXT 记录然后自动验证、自动删除全程不需要手动操作。如果你域名在 Cloudflareexport CF_Token你的Cloudflare API Token acme.sh --issue --dns dns_cf -d example.com -d *.example.com安装证书到指定目录acme.sh --install-cert -d example.com \ --key-file /etc/ssl/example.com/privkey.pem \ --fullchain-file /etc/ssl/example.com/fullchain.pem \ --reloadcmd systemctl reload nginx这个--reloadcmd参数非常实用证书更新后自动重载 Web 服务无缝衔接。2.3 方案三阿里云/腾讯云免费DV证书国内访问友好型如果你人在国内、服务器也部署在国内那么国内云厂商提供的免费 DV 证书值得特别关注。原因还是那句话云厂商的证书做了一些针对国内网络环境和旧设备的兼容性优化尤其是老版本 Android、Windows 7 等场景某些国外 CA 的证书链在国内设备上偶尔会展示不完全。当然这不是绝对但实际遇到的概率确实存在。以阿里云为例进入数字证书管理服务Certificate Management Service在 SSL 证书管理中找到免费证书申请入口。每年可以申请一定数量的免费 DV 证书单张有效期一般是 3 个月到期前可以在控制台申请新证书替换。整个流程是在控制台选择“申请免费证书”输入域名选择验证方式DNS 验证推荐或文件验证如果域名解析也在阿里云DNS 验证可以一键自动添加几分钟内签发签发后点击“下载”根据你的服务器类型选择 Nginx、Apache、Tomcat、IIS 或其他格式下载下来的压缩包里就是证书文件和私钥。Nginx 部署时把.pem和.key文件上传到服务器在 Nginx 配置里指向即可。腾讯云的流程基本一致控制台路径是“SSL 证书”-“我的证书”-“申请免费证书”。值得留意的是腾讯云针对部分场景也提供了更长时间或更大数量的免费额度申请页面会有明确说明。这种方案最大的优点对国内用户极其友好中文控制台、文档齐全、客服响应快遇到问题可以提工单解决。缺点就是有效期短、需要定期去控制台操作除非你用 API 方式做自动化否则没法像 acme.sh 那样全自动续签。2.4 方案四宝塔面板/1Panel一键申请小白救星如果你用的是宝塔面板或 1Panel 这类可视化运维面板申请证书这件事已经简单到“点几下鼠标”的程度了。以宝塔为例在网站设置 - SSL 证书栏目里选择 Lets Encrypt勾选你要的域名点申请。一分钟内证书就自动装好并配置到网站配置里勾上“自动续签”后就再也不用管了。1Panel 也是类似逻辑在网站页面选择域名然后在证书管理里申请 Lets Encrypt 证书支持 DNS 验证和 HTTP 验证。1Panel 的证书管理界面做得比宝塔更清晰一些能看到证书的到期时间、签发机构、域名列表续签状态也有明确记录。为什么把面板方案单独列为一种因为我实操下来发现面板不仅帮你完成证书申请和安装还会自动处理续签、自动重载服务、自动检查证书剩余天数这一套组合拳对不熟悉命令行操作的朋友来说简直就是救命稻草。哪怕你以后不想用面板了也可以把面板生成的证书文件路径记下来手动迁移到其他环境。我个人的建议是如果你只有一个站点、两三台服务器面板方案是最省心的选择。如果你服务器数量多、域名多、还涉及通配符证书建议好好学习 acme.sh它能帮你省下大量重复劳动。3. 自动续签的三种姿势3.1 定时任务续签Certbot 与 acme.sh 的 cron 玩法免费证书有效期短所以自动续签不是“可选项”而是“必需品”。Lets Encrypt 和 ZeroSSL 的证书有效期都是 90 天。要是你哪天忘了续期浏览器直接报错访客一进站点就看到一个红色的“不安全”警告那种体验真的是灾难。我自己就吃过这个亏凌晨三点被监控报警吵醒原因是证书过期导致接口大面积报错。后来老老实实把自动续签流程规范化。Certbot 安装的时候会在/etc/cron.d/下生成一个定时任务文件默认每天检查两次如果证书距离过期不到 30 天就自动续期。你可以用下面这个命令手动验证续签流程是否正常sudo certbot renew --dry-run这个--dry-run参数很重要它会真实走一遍 ACME 协议的交互流程但不会真的替换证书。我建议每次改完配置都先跑一遍这个命令确认没毛病。acme.sh 安装时会自动注册一个 crontab 任务crontab -l # 你会看到类似这样的输出 # 24 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh /dev/null默认是每天凌晨 0 点 24 分检查一次如果距离过期不足 60 天就会自动续签。这个频率是合理的因为 ACME 协议允许在证书过期前 30 天内续签实际上 Lets Encrypt 在过期前 60 天也接受续签请求acme.sh 采用 60 天阈值就更为稳妥了。你也可以手动执行acme.sh --cron如果续签成功acme.sh 会自动执行你在安装证书时指定的--reloadcmd命令比如systemctl reload nginx。这意味着证书更新后服务立即生效不需要你半夜爬起来手动重启。3.2 容器化部署自动续签Nginx Proxy Manager 与 Docker 场景Docker 环境下的证书自动续签是另一个高频场景。如果你用 Docker 部署网站、内部工具或者 NAS 应用推荐看一下 Nginx Proxy ManagerNPM。这个项目把 Nginx 的配置、SSL 证书申请和自动续签全部封装成一个 Web 管理界面非常友好。NPM 的做法是在配置代理主机时直接选择“Lets Encrypt”证书填写域名和邮箱点保存后自动完成签发。它内部内置了一个定时任务默认每隔一段时间检查所有证书如果发现即将过期就自动续签。整个过程中不需要进入容器不需要执行命令几乎所有操作都在浏览器里完成。使用 Docker 部署 NPM 的参考 docker-compose.ymlversion: 3.8 services: npm: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager restart: always ports: - 80:80 - 443:443 - 81:81 volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt部署完通过http://服务器IP:81访问管理后台默认用户名密码是adminexample.com/changeme登录后记得第一时间改掉。添加 SSL 证书就在 “SSL Certificates” 页面操作。如果你是自己用 Docker Compose 部署了一堆服务不希望额外引入一个反向代理层也可以在容器内使用命令行版 acme.sh。比如在 Alpine 镜像里apk add --no-cache curl openssl curl https://get.acme.sh | sh \ export Ali_Keyxxx \ export Ali_Secretxxx \ /root/.acme.sh/acme.sh --issue --dns dns_ali -d example.com --standalone这种方式适合把证书放到共享卷中多个容器引用同一份证书文件。3.3 云证书到期提醒与手动续期阿里云和腾讯云控制台操作实录云厂商的免费证书目前没法做到全自动续签因为它们的证书签发流程需要在你登录控制台后手动确认、重新申请。但好消息是阿里云和腾讯云都提供了比较完善的到期提醒机制一般会提前 30 天、15 天、7 天给你发短信、邮件和站内信。在阿里云控制台的“SSL 证书管理”页面可以看到每个证书的状态和到期时间。到期前重新申请一张然后在“证书列表”里找到新证书点击“部署”按提示选择你要部署的云产品Nginx 服务器、负载均衡 SLB、CDN 等。如果你的域名和 Web 服务器不在同一台云服务器上下载证书文件到服务器上替换即可。腾讯云的操作路径类似SSL 证书 - 证书列表 - 申请免费证书 - 填写域名信息 - DNS 验证 - 签发下载。需要注意的是免费证书一般不支持同一主体在同一时间重复申请同域名证书要等上一张过期或主动撤销后才重新申请。这里我给一个实操建议把云厂商证书和 acme.sh 做一个“双保险”。也就是说你用 acme.sh 管理主要证书并自动续签同时再申请一张云厂商证书作为备用。万一 acme.sh 因为域名解析问题或 API 变更导致续签失败你还有一张云厂商证书能临时代替不至于直接裸奔。4. 部署避坑指南含配置模板4.1 Nginx 部署最容易踩的坑是证书链不完整Nginx 部署 SSL 证书的配置文件本身不复杂核心就三行server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; }我最常看到的坑有两个。第一个是证书链不完整很多人只填了cert.pem没有填 CA 证书链导致 Android 手机和某些桌面浏览器报“证书链不完整”。解决方案是使用fullchain.pem而不是cert.pem因为前者包含了完整的证书链。第二个坑是私钥和证书不匹配这种情况通常是因为同时申请了多个域名的证书不小心把 A 域名的私钥用到了 B 域名的证书上。检查方法很简单openssl x509 -in fullchain.pem -noout -modulus | md5sum openssl rsa -in privkey.pem -noout -modulus | md5sum两个命令输出的哈希值一致说明证书和私钥配对。不一致就去服务商重新下载或者重新申请。4.2 群晖换证书后提示“抱歉您所指定的页面不存在”群晖 NAS 换证书是个高频操作但也是最容易出奇怪问题的地方。很多用户从阿里云或 Lets Encrypt 申请了 Nginx 格式的证书在群晖控制面板 - 安全性 - 证书里导入之后套件正常打开了但点击“存储空间管理员”或某个应用图标时提示“抱歉您所指定的页面不存在”。我查了很多资料也自己复现过核心原因是群晖在导入新证书后没有自动把相关服务的端口和证书关联起来或者证书导入过程中出现了权限问题。尤其是在群晖 DSM 7.x 版本中如果你使用非管理员账号或者通过 WebDAV 方式导入证书容易出现名称冲突或服务变量未更新的问题。解决办法按顺序尝试在控制面板 - 登录门户 - 高级 - 反向代理中确认各服务的反向代理规则仍然指向正确端口在控制面板 - 安全性 - 证书中选中刚导入的证书点击“配置”把需要用到 HTTPS 的套件和服务都勾选上去如果还是提示页面不存在在 SSH 登录群晖后执行sudo synosystemctl restart nginx sudo synosystemctl restart httpd如果还不行把证书改为默认证书重启群晖通常能解决我遇到过一个更隐蔽的情况群晖内置的 Apache 服务依赖一个根证书文件导入新证书后这个文件却被替换成了新的 CA 链导致反向代理服务无法启动。这种情况只能用 SSH 去/usr/syno/etc/www/certificate/目录下检查各服务的证书状态。如果搞不定就直接把证书删除重新导入注意一定要选择“替换现有证书”而不是新增证书。4.3 Tomcat 和 .NET 部署cer 转 PFX 的正确姿势Tomcat 的坑在于格式转换。很多服务商默认给的是 Nginx 格式的.pem/.crt/.key但 Tomcat 需要的是 JKS 或 PKCS12 格式。JKS 是老一代 Java KeyStore 格式配置起来相对繁琐而 PKCS12 是公开标准用起来更方便、兼容性也更好所以这里推荐转成 PKCS12即.pfx/.p12文件。我以“cer 转 tomcat ssl 证书 pfx”这个最常见的问题为例。假设你从阿里云下载的压缩包里包含了xxx.pem和xxx.key两个文件转换命令如下openssl pkcs12 -export \ -in xxx.pem \ -inkey xxx.key \ -out server.pfx \ -name tomcat \ -passout pass:你的密码转换完成后在 Tomcat 的conf/server.xml里增加或修改一个 ConnectorConnector port8443 protocolorg.apache.coyote.http11.Http11NioProtocol maxThreads150 SSLEnabledtrue SSLHostConfig Certificate certificateKeystoreFileconf/server.pfx certificateKeystoreTypePKCS12 certificateKeystorePassword你的密码 / /SSLHostConfig /Connector注意这里的certificateKeystoreFile路径是相对于 Tomcat 安装目录的如果你放在 Tomcat 的conf/目录下就写conf/server.pfx。如果你的服务商直接给的是.cer文件没有私钥那没法直接转 pfx。.cer通常只是公钥证书缺少私钥信息需要联系服务商要完整的证书和私钥文件。这一点我见过太多人踩坑了以为拿到.cer就能用结果在 Tomcat 里怎么配都启动不了。.NET 环境IIS下的操作也类似但 IIS 的导入过程更傻瓜一点打开 IIS 管理器选择服务器节点双击“服务器证书”点“导入”选择.pfx文件填入密码即可。IIS 本身只支持 pfx 格式所以如果你手头只有 pem 文件也先要用上面的 OpenSSL 命令转换成 pfx 再导入。4.4 vsftpd 和 FTP 服务的证书配置FTP 服务走的是 20/21 端口默认不加密但如果你在公网环境下跑 FTP强烈建议开启 FTPSFTP over SSL/TLS。vsftpd 是 Linux 上最常见的 FTP 服务端它的证书配置其实很简单但绝大多数人根本没配过。在vsftpd.conf中添加ssl_enableYES allow_anon_sslNO force_local_data_sslYES force_local_logins_sslYES ssl_tlsv1YES ssl_sslv2NO ssl_sslv3NO rsa_cert_file/etc/ssl/certs/example.com/fullchain.pem rsa_private_key_file/etc/ssl/private/example.com/privkey.pem配置完成后重启服务systemctl restart vsftpd这里有个常见问题如果客户端连接时报“服务器使用了一个安全证书该证书无法被验证”或类似 TLS 警告通常是因为客户端把 FTPS 的证书链加载不完整。解决方案是在客户端中把 CA 证书导入信任库或者使用主动模式Active Mode连接。vsftpd 的rsa_cert_file最好用fullchain.pem而不是cert.pem否则部分 FTP 客户端在验证服务器身份时会报错。另外提醒一句如果你的 vsftpd 同时开启了虚拟用户和被动模式记得检查pasv_min_port和pasv_max_port配置确保防火墙放行了这些端口否则会出现能连上但列不出目录的诡异问题。这些坑和证书本身无关但排查过程会让人误以为是证书的问题。4.5 Docker 容器、反向代理和证书热更新Docker 部署场景里最常见的证书更新问题是“容器已经挂载了证书文件但更新证书后容器内的服务没有生效”。原因很简单如果你用的是 bind mount 方式挂载证书文件比如-v /etc/ssl/example.com:/etc/nginx/ssl:ro那么证书文件更新后Nginx 进程不会自动感知必须重启容器或执行nginx -s reload。解决方案有三种每次续签后重启容器或执行docker exec 容器名 nginx -s reload使用支持热加载的镜像比如nginx:latest配合acme.sh --reloadcmd docker restart nginx的 reload 命令来做自动更新使用专门的代理容器如 Nginx Proxy Manager、Traefik它们内部已经实现了证书监控和自动重载如果你是 Traefik 用户直接通过 Lets Encrypt 配置证书存储证书的申请、更新、加载全部由 Traefik 自动管理不需要你手工干预。这种方案在微服务和容器化场景中是最省心的。5. 常见问题速查表与排错思路这一节我把实战中遇到的典型问题整理成速查表出了问题先对着表格排查大概率能解决一半以上的问题。症状常见原因解决方法浏览器提示证书无效证书过期执行certbot renew或acme.sh --cron浏览器提示证书链不完整只配置了cert.pem未使用fullchain.pem替换为 fullchain 文件私钥与证书不匹配申请了多张证书用错私钥用 md5sum 检查 modulus 配对Android 手机访问失败证书链缺少中间证书使用 fullchain并在 HTTP 层补齐证书链群晖页面提示“页面不存在”证书关联服务未配置在安全性 - 证书 - 配置中勾选所有服务续签命令成功但服务未生效未重载 Web 服务执行systemctl reload nginx或docker restartDNS 验证一直不通过解析记录有缓存等待 TTL 过期或用dig命令确认记录存在Tomcat 启动报 Keystore 错误格式不是 PKCS12 或密码错误确认使用 pfx 格式和正确密码vsftpd 连接报证书警告证书链不完整或客户端不信任使用 fullchain.pem 并导入 CA 证书acme.sh 申请时提示 400 错误DNS API 权限不足或域名不在该账号下检查 AccessKey 权限和政策我再补充几个排错时必用的命令。证书过期时间排查openssl x509 -enddate -noout -in fullchain.pem查看证书内容和 SAN 域名列表openssl x509 -text -noout -in fullchain.pem | grep -A 1 Subject Alternative Name测试 TLS 握手和证书链openssl s_client -connect example.com:443 -servername example.com6. 最后再分享两个实用小技巧6.1 多个域名统一管理先规划再用工具如果你有多个域名、多台服务器强烈建议在一开始就规划好证书管理方案。我自己现在的方式是所有域名统一用 acme.sh 管理DNS 解析放在 Cloudflare 或阿里云通过 API 自动验证。每台服务器的证书都存放到固定的目录结构里比如/etc/ssl/域名/fullchain.pem方便后续脚本统一处理。这种方式配合监控工具比如 UptimeRobot 或自建的 Prometheus 黑盒探针能确保任何一张证书过期前都被及时发现。6.2 免费证书有效期只有90天其实不是坏事很多人觉得 90 天有效期太麻烦说实话我一开始也这么觉得。但后来想明白了一件事短有效期强制你完成自动化反而是好事。证书是安全链路里最需要自动化管理的环节之一一旦自动化跑通你就再也不用担心证书过期。现代 CA 和 ACME 协议把续签做成了一件非常顺滑的事反而比那种“申请一次用一年”的模式更安全——每年一次的人工操作基本无法避免遗忘或疏漏而每天自动检查一次几乎不可能出问题。如果你还在犹豫要不要上免费证书我的建议是直接上。选一种适合你场景的方案花半小时把自动续签配好然后把这个话题忘掉。之后你会发现访问地址栏里那把锁已经是你最不用担心的事情了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询