SSL 证书检测完全指南
什么是 SSL/TLS
SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于在互联网上建立加密连接的安全协议。虽然 SSL 已被 TLS 取代,但人们仍习惯称之为 SSL。
当你访问一个 HTTPS 网站时,浏览器和服务器之间的通信会被加密,防止第三方窃听或篡改数据。这对于保护用户隐私和数据安全至关重要。
为什么需要 SSL/TLS
- 数据加密 - 防止敏感信息(密码、信用卡号等)被窃取
- 身份验证 - 确认网站的真实身份,防止钓鱼攻击
- 数据完整性 - 确保数据在传输过程中未被篡改
- SEO 优势 - Google 将 HTTPS 作为排名因素
- 用户信任 - 浏览器会显示锁图标,增强用户信任
⚠️ HTTP vs HTTPS
HTTP 是明文传输,任何人都可以截获和查看数据。HTTPS 使用 SSL/TLS 加密,保护数据安全。现代浏览器会将 HTTP 网站标记为不安全。
SSL 证书的工作原理
SSL 握手过程
当浏览器访问 HTTPS 网站时,会进行以下步骤:
- 客户端问候 - 浏览器发送支持的 TLS 版本和加密套件列表
- 服务器问候 - 服务器选择 TLS 版本和加密套件,并发送 SSL 证书
- 证书验证 - 浏览器验证证书的有效性(颁发机构、有效期、域名匹配)
- 密钥交换 - 双方协商生成会话密钥
- 加密通信 - 使用会话密钥加密后续的所有通信
证书链
SSL 证书通常形成一个信任链:
根证书(Root CA)
└─ 中间证书(Intermediate CA)
└─ 网站证书(End-entity Certificate)
浏览器内置了受信任的根证书列表。当验证网站证书时,浏览器会沿着证书链向上验证,直到找到受信任的根证书。
证书类型详解
按验证级别分类
1. DV(Domain Validation)- 域名验证证书
验证内容:只验证域名所有权
验证方式:通过邮件、DNS 记录或 HTTP 文件验证
颁发时间:几分钟到几小时
价格:免费(Let's Encrypt)或低价(0-50/年)
适用场景:个人网站、博客、小型企业网站
✅ DV 证书的优势
- 快速颁发,自动化程度高
- 成本低,甚至免费
- 加密强度与其他类型相同
- 适合大多数网站
2. OV(Organization Validation)- 组织验证证书
验证内容:域名所有权 + 组织身份
验证方式:需要提供企业注册文件、营业执照等
颁发时间:1-3 个工作日
价格:0-200/年
适用场景:企业网站、电商平台
证书信息:证书中包含组织名称,用户可以查看
3. EV(Extended Validation)- 扩展验证证书
验证内容:域名所有权 + 组织身份 + 法律实体验证
验证方式:严格的身份审查,包括电话验证、法律文件等
颁发时间:1-2 周
价格:50-500/年
适用场景:银行、金融机构、大型电商
浏览器显示:部分浏览器会在地址栏显示组织名称(绿色)
⚠️ EV 证书的变化
从 2019 年起,Chrome、Firefox 等浏览器不再在地址栏显示 EV 证书的组织名称。EV 证书的视觉优势已大幅减弱。
按覆盖范围分类
单域名证书
只保护一个域名,如 www.example.com
通配符证书(Wildcard)
保护一个域名及其所有子域名,如 *.example.com
可以保护 www.example.com、blog.example.com、shop.example.com 等
多域名证书(SAN/UCC)
一个证书保护多个不同的域名,如 example.com、example.net、example.org
如何检查 SSL 证书
浏览器检查
最简单的方法是使用浏览器:
- 访问网站,点击地址栏的锁图标
- 查看证书信息:颁发给谁、颁发机构、有效期
- 检查证书链是否完整
命令行检查
使用 openssl 命令:
# 查看证书信息
openssl s_client -connect example.com:443 -servername example.com
# 查看证书有效期
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
# 查看证书颁发机构
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer
在线工具
- SSL Labs - 最权威的 SSL 测试工具
- 301check.com - 检测重定向时也会显示 TLS 信息
- crt.sh - 查询证书透明度日志
检查要点
- 有效期 - 证书是否在有效期内
- 域名匹配 - 证书是否覆盖当前域名
- 颁发机构 - 是否由受信任的 CA 颁发
- 证书链 - 中间证书是否正确配置
- 加密强度 - TLS 版本和加密套件是否安全
常见 SSL 错误
1. 证书过期
错误信息:NET::ERR_CERT_DATE_INVALID
原因:证书已过期或尚未生效
解决方法:
- 续期证书
- 使用自动续期工具(如 Certbot)
- 设置证书过期提醒
2. 域名不匹配
错误信息:NET::ERR_CERT_COMMON_NAME_INVALID
原因:证书的域名与访问的域名不匹配
解决方法:
- 为正确的域名申请证书
- 使用通配符证书覆盖所有子域名
- 使用 SAN 证书覆盖多个域名
3. 证书链不完整
错误信息:NET::ERR_CERT_AUTHORITY_INVALID
原因:服务器未配置中间证书
解决方法:
# Nginx 配置
ssl_certificate /path/to/fullchain.pem; # 包含中间证书
ssl_certificate_key /path/to/privkey.pem;
# Apache 配置
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/privkey.pem
SSLCertificateChainFile /path/to/chain.pem
4. 自签名证书
错误信息:NET::ERR_CERT_AUTHORITY_INVALID
原因:证书不是由受信任的 CA 颁发
解决方法:
- 使用 Let's Encrypt 等免费 CA
- 购买商业证书
- 开发环境可以手动信任自签名证书
5. 混合内容(Mixed Content)
错误信息:浏览器显示不安全或锁图标带警告
原因:HTTPS 页面加载了 HTTP 资源(图片、CSS、JS)
解决方法:
- 将所有资源改为 HTTPS
- 使用协议相对 URL(
//example.com/image.jpg) - 配置 Content Security Policy
Let's Encrypt 使用指南
Let's Encrypt是一个免费、自动化、开放的证书颁发机构,由非营利组织 ISRG 运营。它彻底改变了 HTTPS 的普及。
Let's Encrypt 的特点
- 完全免费 - 无需付费
- 自动化 - 支持自动申请和续期
- 安全 - 加密强度与商业证书相同
- 有效期 90 天 - 鼓励自动化续期
- 支持通配符 - 可以申请通配符证书
使用 Certbot 申请证书
1. 安装 Certbot
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx
2. 申请证书(Nginx)
# 自动配置 Nginx
sudo certbot --nginx -d example.com -d www.example.com
# 只申请证书,手动配置
sudo certbot certonly --nginx -d example.com -d www.example.com
3. 申请通配符证书
# 需要 DNS 验证
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com
4. 自动续期
# 测试续期
sudo certbot renew --dry-run
# 设置自动续期(cron)
0 0,12 * * * certbot renew --quiet
使用 acme.sh
acme.sh是另一个流行的 ACME 客户端,纯 Shell 脚本实现,更轻量。
# 安装
curl https://get.acme.sh | sh
# 申请证书
acme.sh --issue -d example.com -d www.example.com --nginx
# 安装证书到 Nginx
acme.sh --install-cert -d example.com \
--key-file /path/to/privkey.pem \
--fullchain-file /path/to/fullchain.pem \
--reloadcmd "systemctl reload nginx"
最佳实践
1. 使用强加密配置
# Nginx 推荐配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
2. 启用 HSTS
HSTS(HTTP Strict Transport Security)强制浏览器使用 HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
3. 配置 OCSP Stapling
OCSP Stapling 可以加速证书验证:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/chain.pem;
4. 定期监控证书
- 设置证书过期提醒(提前 30 天)
- 使用监控工具(如 SSL Labs、Uptime Robot)
- 测试自动续期是否正常工作
5. 使用 CAA 记录
CAA(Certification Authority Authorization)DNS 记录可以限制哪些 CA 可以为你的域名颁发证书:
example.com. CAA 0 issue "letsencrypt.org"
example.com. CAA 0 issuewild "letsencrypt.org"
6. 证书透明度
所有公开信任的证书都会记录在证书透明度日志中。你可以监控自己域名的证书颁发情况,及时发现异常。
🔧 推荐工具
- SSL Labs - SSL 配置测试
- crt.sh - 证书透明度查询
- 301check.com - 重定向检测(包含 TLS 信息)
- Certbot / acme.sh - 自动化证书管理
总结
SSL/TLS 证书是现代网站的必备配置。关键要点:
- 所有网站都应该使用 HTTPS
- Let's Encrypt 提供免费、自动化的证书
- DV 证书适合大多数网站
- 定期监控证书有效期,设置自动续期
- 使用强加密配置和安全最佳实践
如果你需要检查网站的 SSL 证书信息,可以使用我们的 重定向检测工具,它会在检测重定向时显示每一跳的 TLS 证书信息。