当前位置: 首页 > news >正文

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程:


1. 证书链的构成
服务器发送的证书通常是一个证书链,包含:
• 服务器证书:网站的公钥证书(由中间CA签发)。

• 中间CA证书:由根CA签发的中间证书颁发机构(Intermediate CA)的证书。

• 根CA证书:根证书颁发机构的自签名证书(通常不直接发送,而是预装在客户端系统中)。

示例:

网站证书(由 Intermediate CA 签发)  
→ Intermediate CA 证书(由 Root CA 签发)  
→ Root CA 证书(预装在客户端中,作为信任锚)

2. 验证步骤
(1) 证书链完整性验证
• 客户端(浏览器/操作系统)从服务器接收证书链,逐级验证签名:

  1. 服务器证书:用中间CA的公钥验证其签名。
  2. 中间CA证书:用根CA的公钥验证其签名。
  3. 根CA证书:客户端内置的根证书列表中是否存在该根CA?若存在,则信任链成立。

(2) 信任锚(Trust Anchor)检查
• 客户端内置的根证书列表(Trust Store)是验证的核心:

• 操作系统或浏览器预装根证书:如Windows的“受信任的根证书颁发机构”、macOS的钥匙串访问、Chrome/Firefox的内置CA列表。

• 根CA证书必须是自签名的,且客户端明确信任它(例如用户手动安装的例外情况除外)。

(3) 证书有效期验证
• 检查证书的生效日期和过期时间,确保当前时间在有效期内。

(4) 域名匹配
• 证书中的Subject Alternative Name (SAN) 或 Common Name (CN) 必须与访问的域名一致(如 example.com*.example.com)。

(5) 吊销状态检查
• 客户端需检查证书是否被CA提前吊销:

• CRL(证书吊销列表):下载CA发布的吊销列表,检查证书序列号是否在其中。

• OCSP(在线证书状态协议):直接向CA的OCSP服务器发送请求,实时查询证书状态。

• OCSP Stapling:服务器定期从CA获取OCSP响应并缓存,在TLS握手时直接发送给客户端,避免客户端直接查询。

(6) 扩展用途验证
• 检查证书的扩展字段(如 Extended Usage),确保证书类型适用于服务器身份认证(如 Server Authentication)。


3. 受信任的根证书来源
客户端信任的根证书由以下途径维护:

  1. 操作系统内置:
    • Windows:通过系统更新自动同步微软的根证书计划(Windows Root Certificate Program)。

    • macOS:钥匙串访问中预置的受信任根证书。

    • Linux:发行版提供的根证书包(如 ca-certificates 包)。

  2. 浏览器内置:
    • Chrome/Edge:使用操作系统的根证书库。

    • Firefox:独立维护自己的根证书列表(NSS数据库)。

  3. 用户手动导入:
    • 用户可手动添加根证书(例如企业内网的自签名证书),但存在安全风险。


4. 验证失败的常见原因
• 证书链不完整:服务器未发送中间CA证书,导致客户端无法构建完整信任链。

• 根证书未预装:证书由私有CA签发,但客户端未信任该CA。

• 域名不匹配:证书中的域名与访问的域名不一致。

• 证书过期:证书已超过有效期。

• 吊销状态异常:证书已被CA吊销,且OCSP/CRL检查失败。


5. 示例:Let’s Encrypt 的证书验证

  1. Let’s Encrypt 使用中间CA(如 ISRG Root X1)签发服务器证书。
  2. 客户端检查中间CA的签名是否由根CA(如 DST Root CA X3ISRG Root X1)签发。
  3. 根CA是否在客户端的信任列表中?如果是,则验证成功。

6. 总结
客户端验证的核心逻辑是:
“服务器证书的签发路径必须最终链接到客户端信任的根CA,且所有中间环节均合法有效。”
如果任一环节失败(如证书链断裂、域名不匹配、吊销状态异常),客户端会提示安全警告(如“您的连接不是私密连接”)。

相关文章:

  • MySQL知识点总结(持续更新)
  • 企业数字化转型背景下的企业知识管理挑战与经验杂谈
  • GTM4.1-CCM
  • ARM杂谈——临界段保护恢复的中断状态可靠吗
  • 【解析:新能源汽车芯片主要玩家及技术发展】
  • 码题集——魔数、A的B次方、网球比赛、三角形、点与线段的关系
  • 数据清洗的艺术:如何为AI模型准备高质量数据集?
  • ACM算法
  • redis 缓存穿透,缓存击穿,缓存雪崩
  • LeetCode Hot100 (1/100)
  • 数据科学和机器学习的“看家兵器”——pandas模块 之一
  • flutter 视频通话flutter_webrtc
  • 【网络编程】八、Cookie Session 抓包原理
  • 火山引擎实时音视频 高代码跑通日志
  • 深度学习Dropout实现
  • day25-异常处理
  • Python爬虫之品牌口碑数据抓取
  • 设计模式(9)——创建型模式之工厂方法
  • golang -- 如何让main goroutine等一等
  • 微信小程序之按钮短时间内被多次点击问题
  • 陈吉宁龚正黄莉新胡文容等在警示教育基地参观学习,出席深入贯彻中央八项规定精神学习教育交流会
  • 沧州制造展现硬核实力:管道装备支撑大国基建,核电锚栓实现国产
  • 上海北外滩开发建设五周年交出亮眼答卷,未来五年有何新目标?
  • 熊出没!我驻日本札幌总领馆提示中国公民注意人身安全
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 有关部门负责人就《新时代的中国国家安全》白皮书答记者问