我正在寻找一种使用公钥/私钥对在 Web 服务器上对客户端/用户进行身份验证的方法,并且已经阅读了这个问题: 通过 HTTP/HTTPS 进行公钥认证或类似认证?答案与我在网上找到的所有答案都类似。简而言之:“如果您希望通过 HTTPS 进行公钥认证,请使用 SSL 客户端证书”。
但是,我正在寻找一种简单且安全的解决方案,就像使用公钥/私钥进行 SSH 身份验证一样。我对 SSL 客户端证书的问题是,您需要一个 CA,而这从安全角度来看有很大的不同,恕我直言。
原因如下:如果攻击者窃取了你的 CA 的私钥,他们就可以进行身份验证任何用户,因为他们可以签署自己的客户端证书。在 SSH 的情况下,如果攻击者窃取用户的私钥,他们只能以此用户的身份进行身份验证单身的用户。
所以总而言之,我必须确保我的 CA 是安全的,最好的方法是使用专用系统/计算机作为 CA。这意味着需要付出更大的努力和更高的成本。
考虑到安全性,我认为哪种机制更好是有争议的。但我认为,如果公钥身份验证足以用于 SSH 访问,那么它也应该适用于 Web 应用程序身份验证。另请注意,我只想使用公钥/私钥作为现有 HTTP 基本(用户/密码)身份验证的补充,以提高安全性。实际上,我的目标是以最小的努力通过第二个因素来提高安全性,而无需用户使用令牌生成器。
答案1
作为相互认证由传输层安全性(TLS)仍然是这HTTPS 的公钥身份验证(自 2011 年提出另一个问题以来情况一直没有改变),不需要这里描述的类似 SSH 的解决方案。因此,这样的产品/解决方案并不存在,您不应该开发自己的产品/解决方案。一般适用于加密技术的方法也适用于加密身份验证:您不应该自己发明一个,因为它会很脆弱。
- 布鲁斯·施奈尔:业余爱好者创造业余密码学
- 约瑟夫·考克斯:为什么你不自己开发加密货币
- 信息安全 SE:为什么我们不应该自己做呢?
您描述的实施自己的 CA 的问题在 SSH 公钥身份验证中没有得到解决。如果有人有权访问配置,则可以添加自己的密钥并冒充用户。实际上,基于 CA 的身份验证更好,因为它允许在不使用证书的应用程序之外签署证书。使用独立的 CA 服务器(可能完全离线)的攻击面要小得多。客户端泄露密钥(在两种情况下)的可能性都比 CA 被攻破的可能性大得多。
成本并不一定“高得多”,因为任何旧 PC 都可以用作离线 CA。这也不是昂贵的软件许可证问题,因为例如,带有 OpenSSL CA 的 GNU/Linux 就是您所需要的。