You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

确认当前时间在notBeforenotAfter之间。

步骤4:校验域名匹配

查看证书的域名信息:

openssl x509 -in server.crt -noout -subject -ext subjectAltName

检查输出里的CNDNS:字段是否包含你要访问的域名,注意通配符的规则。

步骤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

火山引擎 最新活动