当我使用 https 登录我的银行帐户时,在我输入登录信息之前,它只是服务器端 SSL 身份验证。我的浏览器在 SSL 会话期间根据来自服务器的证书信息进行服务器身份验证。我不必手动将服务器证书作为受信任的证书导入到我的浏览器中。它只是在 SSL 交换期间的运行时发生。
另一方面,当您查看其安装指南时,我还看到了必须手动导入证书(例如使用 keytool)的应用程序。
问题是:如果证书信息是在 SSL 会话开始时交换的,那么每一方都有足够的信息来验证另一方。为什么有些应用程序需要在客户端和服务器之间手动导入证书。无论是一方认证还是双方认证。
基于以下响应的附加信息:我指的是我正在安装基于客户端-服务器模型的商业软件并打开客户端 SSL 身份验证的场景。我将服务器安装在机器 A 上,并将 2 个客户端安装在我的专用网络中的不同机器上。在安装过程中,服务器在本地生成一个自签名证书。2个客户也是如此。安装完成后,我被要求将客户端的证书复制到服务器机器并手动将它们导入为受信任的证书。此外,将服务器证书复制到客户端计算机并导入到其受信任的存储中。他们在 java keytool 之上提供了一个包装工具来执行证书导入。为什么这里需要手动导入吗?无论如何,客户端和服务器将在 SSL 握手期间交换证书信息并执行身份验证。同样,这些是此处涉及的自签名证书和 CA。