我试图理解数字签名和数字认证之间的区别,以及它们如何从高层次上作为一个整体协同工作。如果我的理解有误,希望这里的高手能指点我。
当用户访问网站时,为了对用户与网站之间的通信进行加密,需要使用对称密钥。
*为了使客户端和服务器都使用对称密钥,必须使用非对称密钥对有关创建对称密钥的信息进行加密。
但首先,必须确认网络服务器的真实性。因此,网络服务器向用户/客户端发送其数字证书。在数字证书中,它包含由网络服务器使用的公钥,用于在 2) 处进行非对称加密。
该数字证书由证书颁发机构颁发,该证书颁发机构检查和验证以证明网络服务器/域确实属于它应该属于的人。
*然而,我们如何证明数字认证的真实性和完整性?为了完整性,数字证书被散列并与原始证书一起发送。为了真实性,散列数字证书使用 CA 的私钥签名。
*那么如果数字证书是由CA的私钥签名的,那么我们如何获得CA的公钥呢?我的总体想法是 CA 的公钥已预装在许多浏览器中。
使用 CA 的公钥,数字签名的散列/证书被解密并产生原始散列。然后客户端对收到的证书进行哈希处理,并将其与原始哈希值进行比较。如果 2 个哈希结果匹配,则证书没有被篡改。
使用数字证书,网络服务器使用的公钥由网络客户端/用户检索。然后,webclient/用户使用这个公钥来加密构建对称密钥到 web 服务器的信息。
在双方都知道并创建对称密钥后,可以开始加密通信。
问题:
我的理解正确吗?
对于 2*,会话密钥是由 Web 客户端创建并发送到 Web 服务器以直接使用(加密)还是通过交换最终使双方都具有相同会话密钥的信息(Diffie Hellman 算法?)来设置?
For 5,* 我之前从未申请过数字证书。CA颁发数字证书时,它真的颁发数字证书吗?或者它只是发布证书的数字签名哈希。
否则,我们如何在没有 CA 私钥的情况下发送数字证书(原件)及其经过数字签名的散列版本?
对于 6 *,我对 CA 的公钥预装在浏览器中的理解是否正确?
客户端是否需要通过网络服务器进行身份验证?(我读到让客户端也将证书发送到网络服务器)。
什么会放在 webclient 的 truststore 中,什么会放在 webserver 的 keystore 中?