Chrome等浏览器SSL证书校验机制及手动校验方法咨询
SSL证书验证:浏览器流程与手动操作指南
咱们先聊聊Chrome这类浏览器是怎么校验SSL证书的吧——其实它们就是把咱们手动要做的事全自动化了,流程还挺严谨的:
浏览器校验SSL证书的具体步骤
- 获取证书链:当你访问HTTPS网站时,服务器会先把自己的SSL证书(包括中间证书)发送给浏览器。
- 验证证书链完整性:浏览器会从服务器证书开始,往上逐一验证每个证书的签名——服务器证书由中间CA签名,中间证书又由根CA签名,直到追到一个被浏览器信任的根证书为止。
- 检查有效期:确认当前时间在证书的
notBefore(生效时间)和notAfter(过期时间)之间,过期或未生效的证书直接被拒绝。 - 校验域名匹配:检查证书的
CN(通用名称)或SAN(主题备用名称)字段是否和你访问的域名一致。比如*.example.com可以匹配blog.example.com,但不能匹配blog.sub.example.com。 - 检查吊销状态:浏览器会通过两种方式确认证书是否被吊销:
- CRL(证书吊销列表):从CA提供的地址下载完整的吊销证书列表,检查目标证书是否在里面;
- OCSP(在线证书状态协议):向CA的OCSP服务器发送查询请求,实时获取证书状态。现在很多服务器会用OCSP Stapling,把OCSP响应和证书一起发给浏览器,减少额外请求延迟。
- 确认根证书信任:最后一步,确保这条链的根证书在浏览器的信任存储里——Chrome、Edge这类浏览器一般用系统自带的根证书商店(Windows的CryptoAPI、macOS的Keychain),Firefox有自己独立的根证书库。
浏览器用到的在线数据库/服务
- 根证书存储:不是在线数据库,是浏览器或系统预装的可信根证书集合,只有在这个集合里的根CA签发的证书才会被信任。
- CRL列表:CA维护的在线吊销列表,比如Let's Encrypt的CRL地址会直接在证书里注明。
- OCSP服务器:CA提供的在线查询服务,用于实时验证证书是否有效。
- CT(证书透明度)日志:所有公开信任的CA必须把签发的证书提交到CT日志,浏览器会检查证书是否在CT日志里,防止CA偷偷签发伪造证书。
手动验证SSL证书的步骤(无需浏览器)
当然可以手动完成!只是需要用一些命令行工具(比如openssl)一步步来,下面是具体流程:
步骤1:获取服务器的证书链
用openssl命令连接目标网站,导出证书链:
openssl s_client -connect example.com:443 -showcerts > cert_chain.txt
打开cert_chain.txt,把每个从-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----的部分分别保存为server.crt(第一个证书)、intermediate.crt(中间证书)、root.crt(如果有的话)。
步骤2:验证证书链的签名
把中间证书和根证书合并成一个链文件:
cat intermediate.crt root.crt > chain.pem
然后验证服务器证书的签名是否有效:
openssl verify -CAfile chain.pem server.crt
如果输出server.crt: OK,说明签名验证通过。
步骤3:检查证书有效期
查看证书的生效和过期时间:
openssl x509 -in server.crt -noout -dates
确认当前时间在notBefore和notAfter之间。
步骤4:校验域名匹配
查看证书的域名信息:
openssl x509 -in server.crt -noout -subject -ext subjectAltName
检查输出里的CN或DNS:字段是否包含你要访问的域名,注意通配符的规则。
步骤5:检查证书吊销状态
方法1:用OCSP查询
先从证书里找到OCSP服务器地址:
openssl x509 -in server.crt -noout -ext authorityInfoAccess
找到OCSP - URI:后面的地址,然后执行查询:
openssl ocsp -issuer intermediate.crt -cert server.crt -url http://ocsp.example-ca.com
如果输出server.crt: good,说明证书未被吊销。
方法2:用CRL验证
从证书里找到CRL地址:
openssl x509 -in server.crt -noout -ext crlDistributionPoints
下载CRL文件后,查看吊销列表:
openssl crl -in crl.pem -noout -text
检查证书的序列号(用openssl x509 -in server.crt -noout -serial获取)是否在CRL的吊销列表里。
步骤6:验证根证书的信任
最后确认你用的根证书是可信的——可以从系统的根证书存储里导出(比如Windows的证书管理器、macOS的钥匙串访问),或者从CA的官方网站下载官方发布的根证书,避免使用未知来源的根证书。
内容的提问来源于stack exchange,提问作者Rezaeimh7




