用户要验证 SSL 证书是否已正确安装并生效,可以通过以下几种方法来验证:
一、在线工具验证(推荐)
1. SSL Labs 测试(最全面)
https://www.ssllabs.com/ssltest/
- 输入域名进行测试
- 查看综合评分(A+ 为最佳)
- 检查证书链完整性
- 验证协议和加密套件
2. 其他在线检测工具
- SSL Shopper 检查器:`https://www.sslshopper.com/ssl-checker.html`
- Why No Padlock:`https://www.whynopadlock.com/`
- Qualys SSL Server Test
二、命令行验证
1. 使用 OpenSSL
bash
检查证书详细信息
openssl s_client -connect 你的域名:443 -servername 你的域名
检查证书链
openssl s_client -connect 你的域名:443 -showcerts
检查证书过期时间
openssl s_client -connect 你的域名:443 2>/dev/null | openssl x509 -noout -dates
检查证书颁发者
openssl s_client -connect 你的域名:443 2>/dev/null | openssl x509 -noout -issuer
检查证书主题(域名)
openssl s_client -connect 你的域名:443 2>/dev/null | openssl x509 -noout -subject
2. 使用 cURL
bash
测试 HTTPS 连接
curl -I https://你的域名
详细输出证书信息
curl -v https://你的域名
仅检查证书有效性
curl --ssl-reqd https://你的域名
3. 使用 nmap
bash
扫描 SSL/TLS 配置
nmap --script ssl-cert,ssl-enum-ciphers -p 443 你的域名
三、浏览器验证
1. 手动检查
1. 访问 `https://你的域名`
2. 点击地址栏的锁形图标
3. 点击「证书」或「连接是安全的」
4. 检查:
- 证书颁发机构
- 有效期
- 证书链
- 域名匹配情况
2. 浏览器开发者工具
- Chrome/Firefox 按 F12
- 进入「安全」或「Security」标签
- 查看证书详细信息
四、脚本自动化检查
Bash 脚本示例
bash
!/bin/bash
DOMAIN="你的域名"
PORT="443"
echo "检查 SSL 证书 "
检查连接
echo "1. 测试连接..."
openssl s_client -connect $DOMAIN:$PORT -servername $DOMAIN < /dev/null 2>&1 | grep -A 5 "Certificate chain"
检查有效期
echo -e "\n2. 检查有效期..."
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:$PORT 2>/dev/null | openssl x509 -noout -dates)
echo "$EXPIRY"
检查颁发者
echo -e "\n3. 证书颁发者..."
ISSUER=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:$PORT 2>/dev/null | openssl x509 -noout -issuer)
echo "$ISSUER"
检查域名匹配
echo -e "\n4. 证书包含的域名..."
SUBJECT=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:$PORT 2>/dev/null | openssl x509 -noout -subject)
echo "$SUBJECT"
Python 脚本示例
python
import ssl
import socket
import datetime
def check_ssl(domain, port=443):
context = ssl.create_default_context()
with socket.create_connection((domain, port)) as sock:
with context.wrap_socket(sock, server_hostname=domain) as ssock:
cert = ssock.getpeercert()
检查有效期
not_after = datetime.datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
not_before = datetime.datetime.strptime(cert['notBefore'], '%b %d %H:%M:%S %Y %Z')
print(f"域名: {domain}")
print(f"有效期从: {not_before}")
print(f"有效期至: {not_after}")
print(f"剩余天数: {(not_after - datetime.datetime.now()).days} 天")
检查证书链
print(f"颁发者: {cert['issuer']}")
print(f"主题: {cert['subject']}")
检查 SAN(主题备用名称)
if 'subjectAltName' in cert:
print("支持的域名:")
for san in cert['subjectAltName']:
print(f" - {san[1]}")
check_ssl("你的域名")
五、常见问题检查清单
必须验证的项目
1. 证书链完整性
- 根证书 → 中间证书 → 服务器证书
- 使用:`openssl verify -CAfile ca-bundle.crt your-cert.crt`
2. 域名匹配
- 主域名正确
- 包含所有需要的子域名(SAN)
3. 有效期
- 证书未过期
- 不是未来的日期
4. 吊销状态
- 证书未被吊销
- 检查 OCSP 或 CRL
5. 服务器配置
bash
检查支持的协议
openssl s_client -connect 域名:443 -tls1_2
openssl s_client -connect 域名:443 -tls1_3
常见问题
- 证书链不完整(缺少中间证书)
- 证书与域名不匹配
- 证书已过期
- 使用自签名证书(浏览器不信任)
- 混合内容(HTTP 和 HTTPS 混合加载)
六、进阶检查
使用 SSL/TLS 扫描工具
bash
testssl.sh (功能强大)
git clone https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh 你的域名
sslyze
sslyze --regular 你的域名:443
监控证书过期
bash
监控脚本
#!/bin/bash
DOMAIN="yourdomain.com"
DAYS=30
expiry_date=$(openssl s_client -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
expiry_epoch=$(date -d "$expiry_date" +%s)
current_epoch=$(date +%s)
days_left=$(( ($expiry_epoch - $current_epoch) / 86400 ))
if [ $days_left -lt $DAYS ]; then
echo "警告: $DOMAIN 证书将在 $days_left 天后过期"
fi
七、最佳实践
1. 定期检查:设置自动监控,提前30天预警
2. 多地点验证:从不同网络位置测试
3. 浏览器兼容性:测试主流浏览器
4. 移动端验证:检查移动设备访问
5. API 调用验证:确保程序调用正常
用户通过以上方法综合验证,可以确保 SSL 证书正确安装并生效。建议首次安装后使用 SSL Labs 进行全面测试,然后设置定期监控。