当我使用https登录到我的银行帐户时,在输入登录信息之前,它只是服务器端的SSL身份验证。我的浏览器根据SSL会话期间来自服务器的证书信息进行服务器身份验证。我不必将服务器证书作为可信证书手动导入到浏览器中。它只是在SSL交换期间的运行时发生的。
另一方面,我也看到了一些应用程序,其中一个必须手动导入证书(例如,使用keytool )当你查看他们的安装指南时。
问题是:如果证书信息是在SSL会话开始时交换的,则每个方都有足够的信息来验证对方的身份。为什么有些应用程序需要从客户端和服务器之间手动导入证书。无论是一方认证还是双方身份验证。
基于以下回复的其他信息:我指的是在客户端SSL身份验证打开的情况下,我正在安装一个基于客户机-服务器模型的商业软件。我在机器A上安装了服务器,在不同的机器上安装了两个客户机,所有这些都在我的专用网络中。在安装期间,服务器在本地生成自签名证书.这两个客户也是。安装完成后,我被要求将客户端的证书复制到服务器机器,并以可信证书的形式手动导入它们。另外,将服务器证书复制到客户端计算机并将其导入到其受信任的存储中。他们在java keytool之上提供了一个包装器工具来执行cert导入。为什么在这里需要手动导入?无论如何,客户端和服务器将在SSL握手期间交换证书信息并执行身份验证。同样,这些都是自我签署的证书和CA涉及到这里。
发布于 2011-04-24 06:32:04
请注意,证书由证书颁发机构签名,因此取决于浏览器信任哪个证书颁发机构。如果Web服务器发送由受浏览器/应用程序信任且证书有效的证书颁发机构签名的证书,则不应收到任何警告。
另一方面,如果浏览器收到来自Web服务器的证书,并且不信任签署该证书的证书颁发机构,浏览器将采取一些行动--至少,它应该警告您这一点。当您从网站导入证书时,实际上是告诉浏览器您已经决定独立于谁签名信任该证书。
编辑:同样适用: keystore保存了一个可信证书颁发机构及其相应证书的列表。PKI的整个概念是有一个可信CA的层次结构,为其他各方发出签名证书。如果证书是自签名的,那么就没有有效的信任链-- Java如何知道证书没有被攻击者伪造?
您假设客户端和Web服务器之间的连接是隐式信任的,因为证书是在SSL握手期间交换的。如果中间的人摆出Web服务器的姿势,而不是发送服务器证书,而是发送自己的证书,该怎么办?客户如何知道中间的人收到的证书是不可信的?如果证书由受信任的CA签名,或者证书已作为受信任证书手动添加到密钥存储库,则客户端可以检查是否应该信任该证书。
发布于 2011-04-24 06:31:14
SSL服务器的证书必须由证书颁发机构(CA)“担保”。您的浏览器(或其他程序)包含它信任的CA列表。如果您使用的是一个未经标准CA认证的站点,则必须导入其CA才能使验证成功。
任何合法的网站(特别是网上银行)都不应要求您使用“替代”CA。只对不发送超级敏感数据的站点执行此操作。
https://stackoverflow.com/questions/5769057
复制相似问题