SSL证书免费获取方法有哪些

文章导读
免费 SSL 证书基本来自两条路:一是通过 ACME 协议向公共 CA 申请域名验证(DV)证书,常见的有 Let's Encrypt、ZeroSSL、Buypass 这类;二是云厂商控制台里附带的免费 DV 证书额度。能不能拿到、能不能用,先看三件事:域名解析是否在你手上、80 端口或 DNS TXT 记录能不能按要求配置、服务器上有没有写入权限安装证书。这三件事只要有一件不成立,换哪个免费渠道
📋 目录
  1. 一 SSL证书:先把能核对的事实摆清楚
  2. 二 SSL证书最容易搞错的一点
  3. 三 SSL证书:一个照着就能做完的做法
  4. 四 SSL证书:怎么验证结果对不对
A A

免费 SSL 证书基本来自两条路:一是通过 ACME 协议向公共 CA 申请域名验证(DV)证书,常见的有 Let's Encrypt、ZeroSSL、Buypass 这类;二是云厂商控制台里附带的免费 DV 证书额度。能不能拿到、能不能用,先看三件事:域名解析是否在你手上、80 端口或 DNS TXT 记录能不能按要求配置、服务器上有没有写入权限安装证书。这三件事只要有一件不成立,换哪个免费渠道都会卡住。

先别比较“哪家免费证书更好”,先确认自己能否完成域名验证:能开放 80 端口就优先用 HTTP-01 配合 certbot webroot,80 被封就用 DNS-01 手动或通过 DNS 服务商接口加 TXT 记录。签发后用 openssl s_client 看 Verify return code 是否为 0、部署时是否用 fullchain.pem,这两步决定客户端是否真的信任。免费 DV 证书只证明域名控制权,不包含企业身份信息,需要展示公司名的场景要另行评估。

SSL证书:先把能核对的事实摆清楚

要核对的对象是“DV 域名验证证书”:CA 只验证你对域名的控制权,不核验营业执照。前提条件通常包括:域名 A/AAAA 记录已指向目标服务器、目标服务器 80 端口可从公网访问(走 HTTP-01 时)、或你能在 DNS 服务商处添加 TXT 记录(走 DNS-01 时)、以及有 sudo 或 root 权限写入证书目录。

能直接核对的内容有这几类:

  • 命令:certbot --version、openssl version、systemctl list-timers | grep certbot,确认工具是否已装、续期定时任务是否存在。
  • 日志位置:certbot 的日志通常在 /var/log/letsencrypt/letsencrypt.log;Web 服务器报错看 /var/log/nginx/error.log 或 /var/log/httpd/ssl_error_log。
  • 面板项:云厂商 SSL 证书控制台的“免费证书”列表里,会显示证书品牌、绑定域名、剩余额度、到期时间,这些字段以你账号里看到的为准。
  • 页面字段:浏览器开发者工具的 Security 面板会显示证书是否有效、颁发者、有效期。

有效期、速率限制、免费额度这类会变的数字,不要凭记忆写进配置或文档,以 CA 官方文档页和云厂商控制台当前显示为准。

SSL证书免费获取方法有哪些

SSL证书最容易搞错的一点

最常见的误解是把“浏览器地址栏有锁”当成证书已经配好。锁只能说明浏览器接受的这条链没问题,不代表你的证书链完整、也不代表其他客户端能验证通过。判断分界在证书链:只部署叶子证书(cert.pem)而不带中间证书(fullchain.pem)时,桌面浏览器常能靠缓存补齐,但 curl、Java、部分移动端 SDK 会直接报 unable to get local issuer certificate。

能把两种情况区分开的检查动作是:在服务器上用 openssl s_client -connect example.com:443 -servername example.com -showcerts ,看输出末尾的 Verify return code,并数一下 -showcerts 打印了几张证书。返回 0 (ok) 且证书链里含中间证书,说明链完整;返回非 0 或只有一张证书,问题在部署的证书文件,而不是“免费证书不被信任”。另一个常见混淆是身份验证等级:免费 DV 证书不显示企业名称,需要 OV/EV 的场景免费证书无法替代。

SSL证书:一个照着就能做完的做法

以 Let's Encrypt + certbot webroot 为例,全程不重启 Web 服务。先在服务器上装工具,再跑一次 dry-run 验证域名可达性,确认通过后正式签发。

SSL证书免费获取方法有哪些
# Debian/Ubuntu
sudo apt update && sudo apt install -y certbot
# RHEL/CentOS 系
# sudo dnf install -y certbot

# 第一步:演练,只验证不签发
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com --dry-run

这一步的预期输出是 The dry run was successful.。如果报 404,说明 -w 指向的目录不是站点根目录;如果报连接超时,说明 80 端口没通或被安全组拦截。

# 第二步:去掉 --dry-run 正式签发
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

# 第三步:确认续期任务存在
systemctl list-timers | grep certbot
sudo certbot renew --dry-run

正式签发成功后,终端会提示 Successfully received certificate,证书文件落在 /etc/letsencrypt/live/example.com/ 下,其中 fullchain.pem 是证书加中间证书,privkey.pem 是私钥。把 Web 服务器配置里的证书路径指向 fullchain.pem、私钥指向 privkey.pem,再 reload 服务。80 端口被封、只能用 DNS 验证时,改用 sudo certbot certonly --manual --preferred-challenges dns -d example.com,按提示在 DNS 服务商处添加对应的 TXT 记录,等待记录生效后回车继续。

SSL证书免费获取方法有哪些

SSL证书:怎么验证结果对不对

签发完成和部署完成后分别验一次,看的是两件不同的事。

# 看证书链是否完整、是否被信任
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

# 看完整握手结果
curl -vI https://example.com 2>&1 | grep -E "SSL certificate verify|expire"

# 看 certbot 侧的证书状态和剩余天数
sudo certbot certificates

正常结果长这样:Verify return code: 0 (ok);subject=CN = example.com,多域名时看 SAN 列表是否包含全部域名;issuer 为实际签发 CA;notAfter 在一个未来的日期上。curl 输出里有 SSL certificate verify ok。certbot certificates 会列出证书名、包含的域名、到期时间和 VALID: N days。浏览器侧打开开发者工具 Security 面板,应显示证书有效且链完整。

最后提醒一个高频坑:Nginx 里写 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;,不要写成 cert.pem。链路完整性出问题时,桌面浏览器可能仍显示锁标,但接口调用方的客户端会先失败。