ssl - 数字证书的验证是否需要远程调用?
问题描述
我有几个关于数字证书的问题:
1)据我了解,客户端能够验证服务器数字证书,因为客户端在其机器上包含一组众所周知的 CA 自签名证书。这是否足以完成整个验证,或者客户端是否需要对实际 CA(无论它位于何处)进行一些额外的远程调用?我阅读了一些关于证书吊销(CRL 和 OCSP)的内容,这似乎表明远程调用在某些时候是必要的。
2)验证服务器证书时,客户端究竟发生了什么?我一直对自己解释说,基于服务器证书中的 CA,客户端在其机器上找到相应的 CA 自签名证书,并使用其中的公钥解密服务器证书中的签名(因此没有远程调用这里)。据我了解,解密结果是服务器公钥的摘要。因此,客户端对服务器证书中的公钥进行哈希处理,以将其与上一步的摘要相匹配。如果两者都匹配,则一切正常,客户端和服务器可以交换对称密钥以进行进一步通信。那是对的吗?
解决方案
1) 从技术上讲,不,不需要远程调用。当然,它比这要复杂一些——如果您使用的是 OCSP,那么是的,您将需要访问 OCSP 服务器并且它必须是远程调用。如果您使用 CRL,则需要进行远程调用以从证书中的 CRL 分发点 [CDP] 获取 CRL;但是如果 CRL 是在本地获取和缓存的,并且没有过期,那么证书检查都是本地的。
2)您是对的,客户端“链接到受信任的根”;执行了更多检查,包括密钥使用、日期范围检查,以及如您所述,验证证书的签名。最后的检查是确保根在客户端可用。
我希望这会有所帮助。
推荐阅读
- python - 是什么导致测量的 fps 与预期但可能的 fps 不同?
- reactjs - Divi order class props works wrong when I dublicate it
- apache-spark - 在explode“子查询”中有效地插入when语句
- asp.net - 在现有的 oauth2 实施中包含 Azure AD
- java - Spring Boot 2.5 升级 - 在 Spock 中执行的 SpringBootTest 中的对象似乎被覆盖
- python - 在 Scafold 结构中 pytest 中模块的相对导入
- javascript - jQuery Sortable() 函数 - 显示跨浏览器的更改
- python - 如何在python中使用正则表达式忽略以特定模式开头的字符串?
- python - 在python中启动线程之前从线程对象中检索线程ID
- google-sheets - 使用 Xpath 和 IMPORTXML 检查 URL 内容中是否存在单词