我试图了解数字证书(例如 SSL 证书)的两个主要用途,即签名和验证(我相信)。
对于客户端和 Web 服务器之间的 SSL,我对证书验证的理解是浏览器使用 HTTPS 通过 URL 联系服务器。然后,服务器向浏览器提供其 SSL 证书。然后,浏览器必须验证 SSL 证书有效并且它与 URL 中的域属于同一域。
同样,对于客户端和 Web 服务器之间的 SSL,我对证书签名的理解是客户端(浏览器)首先验证服务器的 SSL证书是有效的,如果有效,浏览器会将证书放在自己的信任库中(一些本地的嵌入式数据库)。对该域的后续请求将首先检查服务器的 SSL 证书是否在客户端的信任库中,如果是,则不再需要验证。
我在这里或多或少是正确的,还是我离题太远了?
最佳答案
关于验证,您几乎是正确的。我要补充一点,浏览器还会尝试根据 CA(证书颁发机构)验证证书,但这可以由用户放弃。
这里解释得很漂亮 How are ssl certificates verified?
签名是另一回事。当申请人(例如 Web 服务器)希望 CA 为其签署证书时,它会创建一个 key 对、私钥和公钥,然后准备一个 CSR(证书签名请求),其中包含先前创建的公钥.然后 CA 创建一个签名证书(使用它自己的私钥),任何知道该 CA 公钥的实体都可以验证该证书。 Web 浏览器具有最常见的预安装 CA 列表。
关于security - 数字证书 : signing vs verifying?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253474/