我的问题是,如何防止有人窃取证书并利用它来使他们的假冒网站看起来合法。假设您登录亚马逊,您的浏览器获取了该证书。然后该人设置了一个欺骗网站,并使用相同的证书让浏览器认为这对点击链接的人来说是合法的。或者,如果证书对于该特定计算机是唯一的,那么如何防止中间人拦截该证书并用来冒充该网站?
提前致谢。
答案1
网站上提供的证书除了包含身份信息外,还包含网站的公钥和数字签名。您可以使用公钥加密信息,而这些信息只能使用私钥解密。数字签名用于验证信息是否仅来自私钥持有者(通过使用私钥签名来验证网站的身份)。使用公钥加密数据时,只有私钥持有者(提供证书的原始网站)才能解密数据。因此,其他任何人都无法解密该数据。
正如 Zoredache 指出的那样,您需要两个密钥才能执行任何类型的模仿。
答案2
只需补充@Cheekaleak 的回答中的几点。
认证机构 (CA) 是为服务器颁发证书(除其他事项外)的实体。通过这样做,CA 使用其私钥签署证书内容并添加其签名。
为了表明谁签署了证书,X.509 证书有一个发行人专有名称命名 CA,除了主题专有名称识别颁发证书的实体。
CA 本身具有 CA 证书,即可用于颁发其他证书的证书(通过使用与 CA 证书中的公钥匹配的私钥对颁发的证书进行签名,并使用 CA 证书主题 DN 作为证书颁发者 DN)。这构建了从 CA 到最终实体(例如服务器)的层次结构,并且可以存在中间 CA 证书(即用于颁发另一个 CA 证书的 CA 证书,然后可用于颁发最终实体证书)。顶部的根 CA 证书往往是自签名的。
浏览器评估对给定最终实体证书(例如服务器证书)的信任的方式是通过在 EE 证书和它们已经信任的 CA 证书(受信任的锚点)之间构建认证链。大多数操作系统/浏览器都默认带有一组受信任的 CA 证书。(这方面的第二个方面是浏览器验证 EE 证书是否已颁发给它要连接的服务器的名称。)
这种模型的主要问题在于,您并不真正知道为什么要信任与您获得的软件默认捆绑在一起的 CA 证书,因为一个恶意或管理不善的 CA 会将其 CA 证书放在您的受信任锚点中,然后颁发带有合法网站名称的证书。