免费 SSL 证书可以加密访客与你网站之间的连接,保护密码、支付信息和个人数据。整个过程大约 5 分钟,不花一分钱。
速览版:
- 打开 gethttps.com/app/setup — 无需安装,无需账号
- 输入你的域名
- 完成域名验证(在服务器放置文件或添加 DNS 记录)
- 下载证书文件
- 安装到服务器(Nginx、Apache、cPanel、WordPress、IIS)
以下是完整详细指南。
为什么需要 SSL 证书
- 浏览器会把 HTTP 网站标记为”不安全” — Chrome、Firefox、Edge 都会在地址栏显示警告,访客会离开
- Google 将 HTTPS 作为排名信号 — 从 2014 年开始,HTTP 网站排名更低
- 没有 HTTPS 的表单和登录会以明文传输数据 — 同一网络上的任何人都能读取密码、信用卡号和个人信息
- HTTP 页面可以在传输过程中被篡改 — ISP 和攻击者可以注入广告、追踪代码或恶意软件
- HTTPS 是免费的 — 没有理由不使用
4 种获取免费 SSL 证书的方法
| 方法 | 适合 | 安装方式 | 自动续签 | 耗时 |
|---|---|---|---|---|
| GetHTTPS(浏览器) | 所有人 — 无需安装、无需服务器访问 | 手动 | 否 | 5 分钟 |
| 主机提供商 | 带 cPanel/Plesk 的共享主机 | 自动 | 通常是 | 2 分钟 |
| Certbot(命令行) | 有 root 权限的服务器管理员 | 自动 | 是 | 10 分钟 |
| Cloudflare(CDN) | 已使用 Cloudflare 的网站 | 自动 | 是 | 5 分钟 |
本指南重点介绍 方法 1(GetHTTPS),因为它适用于任何环境 — 共享主机、VPS、独立服务器或任何可以上传文件的平台。
方法 1:GetHTTPS(推荐 — 适用于所有环境)
前置条件
- 一个已注册的域名,指向你控制的服务器
- 以下访问权限之一(用于域名验证):
- 服务器的文件系统 — 放置验证文件(HTTP-01 验证)
- 域名的 DNS 设置 — 添加 TXT 记录(DNS-01 验证)
- 现代浏览器 — Chrome、Firefox、Edge 或 Safari
该选哪种验证方式? HTTP-01 对大多数人更简单。DNS-01 是获取通配符证书(
*.example.com)的必选项。详见 HTTP-01 指南和 DNS-01 指南。
步骤 1:打开 GetHTTPS
GetHTTPS 会自动在你的浏览器中生成两对密钥:
- 账户密钥 — P-256 ECDSA 密钥对,用于标识你的 Let’s Encrypt 账户,签名所有 ACME 请求
- 证书密钥 — 你 SSL 证书的密钥对。默认 ECDSA P-256(推荐),可选 RSA 2048
两个密钥都使用浏览器内置的 Web Crypto API 生成。它们仅存在于浏览器内存中,从不发送到任何服务器 — 包括 GetHTTPS 的服务器。这是与 SSL For Free(在服务器端生成密钥)或 ZeroSSL(可能在服务器端生成密钥)相比的核心隐私优势。
步骤 2:添加域名
输入要保护的域名:
| 需求 | 输入内容 | 备注 |
|---|---|---|
| 单个域名 | example.com | 最基本的设置 |
| 域名 + www | example.com + www.example.com | 大多数网站推荐 |
| 通配符 | *.example.com | 覆盖所有子域名;需要 DNS-01 |
| 多个域名 | example.com + blog.example.com + shop.example.com | SAN 证书 |
提示: 输入 example.com 后,GetHTTPS 会提示你同时添加 www.example.com(反之亦然)。大多数网站应该两个都保护。
步骤 3:完成域名验证
Let’s Encrypt 需要验证你对域名的控制权。两种方式可选:
方式 A:HTTP-01 验证(更简单,适合大多数人)
Let’s Encrypt 提供一个 token。你需要在服务器上的指定 URL 放置一个文件。
- GetHTTPS 显示一个文件名和文件内容(一长串 token 字符串)
- 在服务器上创建该文件:
http://yourdomain.com/.well-known/acme-challenge/TOKEN_FILENAME - 文件必须通过 HTTP(端口 80) 访问 — 即使你的网站已经启用了 HTTPS
- 在 GetHTTPS 中点击验证
按平台创建文件的方法:
SSH 访问(Linux 上的 Nginx/Apache):
# 创建目录(如果不存在)
mkdir -p /var/www/html/.well-known/acme-challenge/
# 创建验证文件 — 使用 GetHTTPS 显示的确切值
echo "GETHTTPS_显示的_TOKEN_内容" > /var/www/html/.well-known/acme-challenge/TOKEN_文件名
# 验证是否可访问
curl http://yourdomain.com/.well-known/acme-challenge/TOKEN_文件名
cPanel 文件管理器:
- 进入文件管理器 → 导航到
public_html - 创建文件夹
.well-known→ 在其中创建acme-challenge - 用 token 文件名创建新文件,粘贴 token 内容
- 确保文件权限为 644(可被 Web 服务器读取)
FTP:
- 通过 FTP 连接到网站根目录
- 导航到(或创建)
.well-known/acme-challenge/ - 上传包含 token 内容的文本文件
常见问题: 某些 Web 服务器默认不提供
.well-known目录的文件。如果返回 404,检查服务器配置。Nginx 可能需要在配置中添加location ~ /\.well-known { allow all; }。
方式 B:DNS-01 验证(通配符证书必选)
在域名的 DNS 设置中添加一条 TXT 记录。
- GetHTTPS 显示一个记录名(如
_acme-challenge.example.com)和记录值(一长串哈希值) - 去你的 DNS 提供商添加 TXT 记录
- 等待 DNS 传播(通常 1-5 分钟)
- 在 GetHTTPS 中点击验证
DNS 提供商速查表:
| 提供商 | 在哪里添加 TXT 记录 | TTL 设置 |
|---|---|---|
| Cloudflare | DNS → 记录 → 添加记录 → 类型:TXT | 自动 |
| AWS Route 53 | 托管区域 → 你的域名 → 创建记录 → TXT | 300 |
| GoDaddy | DNS 管理 → 添加 → 类型:TXT | 1 小时 |
| Namecheap | 域名列表 → 管理 → 高级 DNS → 添加新记录 → TXT | 自动 |
| Google Domains | DNS → 自定义记录 → 管理 → 创建新记录 → TXT | 自动 |
| DigitalOcean | 网络 → 域名 → 你的域名 → 添加记录 → TXT | 30 |
预检验证(GetHTTPS 独有功能)
在提交给 Let’s Encrypt 之前,GetHTTPS 会通过 Google 的 DNS-over-HTTPS API 从公网预检你的验证配置。这能发现以下错误:
- 文件内容或权限错误
- 端口 80 上文件不可访问
- DNS 记录尚未传播
- 防火墙阻止了请求
- Cloudflare 代理拦截了验证请求
预检失败时,GetHTTPS 会告诉你具体问题 — 让你在浪费速率限制次数之前修复。
这是其他浏览器工具没有的功能。 SSL For Free 和 ZeroSSL 直接提交给 CA,出错后你才知道。
步骤 4:下载证书文件
验证通过后,Let’s Encrypt 签发证书。GetHTTPS 提供四个文件:
| 文件 | 内容 | 用途 |
|---|---|---|
privkey.pem | 你的私钥 — 务必保密! | 所有服务器都需要 |
cert.pem | 你的 SSL 证书(仅终端实体) | Apache 等部分配置 |
chain.pem | Let’s Encrypt 的中间 CA 证书 | Apache 等部分配置 |
fullchain.pem | cert.pem + chain.pem 合并 | Nginx 和大多数服务器 |
下载全部四个文件。 不同服务器需要不同的组合 — 四个都有就能适配所有平台。
安全提醒: 妥善保管
privkey.pem。任何拥有此文件的人都可以冒充你的网站。不要通过邮件发送,不要提交到 Git,不要放在公开目录。
步骤 5:安装到服务器
选择你的平台:
| 平台 | 安装指南 | 需要的文件 |
|---|---|---|
| Nginx | 完整指南 → | fullchain.pem + privkey.pem |
| Apache | 完整指南 → | cert.pem + chain.pem + privkey.pem |
| cPanel | 完整指南 → | 粘贴三个文件的内容 |
| WordPress | 完整指南 → | 取决于主机(cPanel/Nginx/Apache) |
| Windows IIS | 完整指南 → | 需先转换为 PFX 格式 |
| Docker | 完整指南 → | 挂载 fullchain.pem + privkey.pem |
快速安装 — Nginx:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=63072000" always;
root /var/www/html;
index index.html;
}
sudo nginx -t && sudo systemctl reload nginx
快速安装 — Apache:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/privkey.pem
SSLCertificateChainFile /etc/ssl/chain.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
DocumentRoot /var/www/html
</VirtualHost>
sudo apachectl configtest && sudo systemctl reload apache2
步骤 6:设置 HTTP 到 HTTPS 重定向
强制所有流量使用加密连接。没有重定向的话,通过 http:// 访问的用户无法享受证书的保护。
Nginx:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
完整重定向指南(含 www/非 www、代理场景、故障排除)→
步骤 7:验证一切正常
浏览器检查:
- 访问
https://yourdomain.com - 点击锁头图标 → “证书”或”连接是安全的”
- 确认:签发者为 “Let’s Encrypt”,约 90 天后过期,域名匹配
命令行检查:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
在线检查: 在 SSL Labs 测试中输入域名,获得详细报告。
检查混合内容: 打开浏览器开发者工具(F12)→ Console 标签,查看 “Mixed Content” 警告。如何修复混合内容 →
续签
Let’s Encrypt 证书在 90 天后过期。在第 60 天之前续签,留出安全余量。
用 GetHTTPS 续签(手动):
- 再次访问 gethttps.com/app/setup
- 重新输入域名并完成新的验证
- 替换服务器上的证书文件
- 重载 Web 服务器(
sudo systemctl reload nginx)
用 Certbot 续签(自动): 想要零干预续签的话,在服务器上安装 Certbot。很多团队用 GetHTTPS 获取第一张证书,用 Certbot 处理后续自动续签。
方法 2:主机提供商(可用时最简单)
很多主机包含免费 SSL:
| 主机 | 如何启用 | 自动续签 |
|---|---|---|
| Hostinger | hPanel → 安全 → SSL | ✅ AutoSSL |
| SiteGround | Site Tools → 安全 → SSL 管理器 | ✅ |
| Bluehost | 我的网站 → 安全 → SSL | ✅ |
| Namecheap | cPanel → SSL/TLS 状态 | ✅ AutoSSL |
| DigitalOcean | 无内置 — 使用 GetHTTPS 或 Certbot | ❌ |
| AWS | ACM 用于负载均衡器,Certbot 用于 EC2 | ✅(ACM) |
如果主机提供免费 SSL,直接用 — 这是最简单的方式。如果没有(或需要更多控制权),用 GetHTTPS。
方法 3:Certbot(服务器管理员)
Certbot 是一个命令行工具,可以在服务器上自动化 Let’s Encrypt 证书。需要 root 权限。
# 安装(Ubuntu)
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 获取证书 + 自动配置 Nginx
sudo certbot --nginx -d example.com -d www.example.com
方法 4:Cloudflare(基于代理的 SSL)
使用 Cloudflare 作为 CDN 时,Universal SSL 免费包含。但要注意:Cloudflare SSL 意味着你的流量在 Cloudflare 边缘节点解密,而不是在你的服务器上。这对你合适吗?→
故障排除
验证文件返回 404
- 检查路径 — 文件必须位于
/.well-known/acme-challenge/TOKEN,不能在子目录中 - 检查权限 — 文件必须可被 Web 服务器读取(chmod 644)
- Nginx — 如果配置阻止了点文件,添加
location ~ /\.well-known { allow all; } - Cloudflare — HTTP-01 验证期间临时切换 DNS 为”仅 DNS”(灰色云朵)
- cPanel — 确保
.well-known未被隐藏 — 有些文件管理器会隐藏点目录
DNS 记录未找到
- 再等一会 — 某些 DNS 提供商需要 5-15 分钟传播
- 检查记录名 — 应该是
_acme-challenge(是否自动追加了域名取决于提供商)。GetHTTPS 的预检会确认。 - 检查记录类型 — 必须是 TXT,不是 CNAME 或 A
- 手动验证:
dig TXT _acme-challenge.yourdomain.com +short
“请求过多” / 速率限制错误
Let’s Encrypt 允许每个注册域名每周 50 张证书。达到限制时等一周重试,或使用预备环境测试。预检可以避免浪费验证次数。
浏览器安装后仍显示”不安全”
- 证书未安装 — 检查服务器配置是否指向正确文件
- 混合内容 — 页面加载了 HTTP 资源。修复指南 →
- 重定向未生效 — HTTP 流量未重定向到 HTTPS。重定向指南 →
- 证书过期 — 检查过期时间 →
“证书链不完整”错误
你在 Nginx 中使用了 cert.pem 而不是 fullchain.pem,或者 Apache 中缺少 SSLCertificateChainFile。服务器需要中间证书来证明信任链。
为什么选 GetHTTPS?
| 特性 | GetHTTPS | ZeroSSL | SSL For Free | Certbot |
|---|---|---|---|---|
| 安装 | 无(浏览器) | 无(网页) | 无(网页) | 需要命令行安装 |
| 私钥 | 浏览器生成(Web Crypto) | ⚠️ 可能在服务器生成 | ⚠️ 在服务器生成 | 在服务器生成 |
| 免费证书限制 | 无限 | 3 张 | 3 张 | 无限 |
| 免费通配符 | ✅ | ❌(付费) | ❌ | ✅ |
| 自动续签 | ❌ | ❌ | ❌ | ✅ |
| 预检验证 | ✅ | ❌ | ❌ | ❌ |
| Open source | No | No | No | Yes (Apache 2.0) |
| 直连 Let’s Encrypt | ✅ | 通过 ZeroSSL | 通过 ZeroSSL | ✅ |
常见问题
真的能免费获取 SSL 证书吗?
可以。Let’s Encrypt 是一个非营利证书颁发机构,由 Mozilla、Google、EFF 等支持。它签发免费的域名验证(DV)证书 — 与很多公司花 50-200 美元/年购买的证书类型相同。超过 3 亿个网站使用 Let’s Encrypt,全球 CA 市场份额 63.9%。
免费 SSL 证书和付费的一样安全吗?
一样。所有 SSL 证书 — 免费或付费 — 使用相同的 TLS 加密。Let’s Encrypt 的免费 DV 证书与 DigiCert 500 美元的 EV 证书提供完全相同的加密强度。唯一的区别是验证级别(CA 验证你身份的程度),不是加密。详细对比 →
免费 SSL 证书有效期多长?
Let’s Encrypt 证书有效期 90 天。这是故意设计的 — 限制密钥泄露时的损害范围并鼓励自动化。在第 60 天续签以留出安全余量。注意:到 2029 年,所有证书的有效期将缩短至 47 天。
需要 SSH/root 权限吗?
使用 GetHTTPS 不需要。你只需要能够:
- 在 Web 服务器上放置文件(通过 FTP、cPanel 文件管理器或任何方式)— 用于 HTTP-01
- 添加 DNS 记录(通过域名注册商或 DNS 提供商)— 用于 DNS-01
能免费获取通配符证书吗?
可以。GetHTTPS 通过 DNS-01 验证支持通配符证书(*.example.com)。这是很多竞品(ZeroSSL、SSL For Free)限制为付费功能的特性。你需要访问域名的 DNS 设置。
一张证书能保护多个域名吗?
可以。在 GetHTTPS 中输入所有域名 — 每张证书最多 100 个名称。这会创建一个 SAN(多域名)证书。每个域名需要单独的验证。
HTTP-01 和 DNS-01 验证有什么区别?
HTTP-01: 在服务器上放置一个文件。更简单,适用于单个域名。需要端口 80 开放。 DNS-01: 添加 DNS TXT 记录。通配符证书必选。即使端口 80 被封也能用。 HTTP-01 详细指南 → | DNS-01 指南 →
证书过期会怎样?
浏览器显示全屏安全警告(“您的连接不安全”)。访客无法安全访问你的网站,搜索引擎可能会从索引中移除你的页面。如何检查过期时间 → | 如何续签 →
能从 GetHTTPS 切换到 Certbot(或反过来)吗?
可以。证书文件是标准 PEM 格式。你可以用 GetHTTPS 生成第一张证书,之后安装 Certbot 自动续签。或者长期使用 Certbot,在需要快速重新签发而不访问服务器时切换到 GetHTTPS。两个工具互不冲突。