如何使用公钥/私钥在网站中进行身份验证?

信息安全 密码 Web应用程序 网页浏览器 密钥管理
2021-08-18 22:50:40

我一直在阅读SSH 公钥/私钥是如何工作的,并意识到它们是多么方便(将安全性排除在外)。并开始想知道为什么网站不实施同样的事情?

让我解释一下为什么我对此感兴趣:当您注册到一个网站时,您不知道您的密码会发生什么,它很可能以纯文本形式存储在数据库中。任何管理员都可以看到您的用户名/密码组合(加上电子邮件或任何其他信息),然后在其他服务中尝试它们等等,清除对您的电子邮件、Facebook、Stackoverflow 等的访问权限。密码,即使没有存储,可以通过网络以非加密方式发送到服务器,并由中间的人发现。例如,使用 SSH 实现的方法可以轻松解决所有这些问题(或者为每个服务设置不同的密码,但我的记忆有严重的限制)。

因此,我该如何实施这种登录网站的策略?我找不到任何浏览器扩展程序,也找不到有关如何操作的说明。目前,我的目标是有一个网站为大约 10 人(同事,都在同一个网络中)提供服务,并且我可以说服他们做一些额外的工作(比如安装扩展程序或生成密钥对)。

2个回答

证书可用于该目的。证书的一般用途是用于 TLS/SSL 连接,但可以颁发客户端证书来处理双向身份验证。证书基本上是带有“信任网络”附加层的公钥。

如果你想正确地做到这一点,你应该实现一个 PKI 来处理证书请求、创建和撤销。但或者,您可以只要求用户上传他们想要使用的任何公钥证书。

许多最新的浏览器在连接到网站时也能够即时生成证书请求(私钥/公钥)。然后证书存储在浏览器配置文件中。

对于现在正在查看这个问题的人 - 这可能是一个更好的(更新的)答案:

https://webauthn.guide/

从网站:

Web Authentication API(也称为 WebAuthn)是由 W3C 和 FIDO 编写的规范,有 Google、Mozilla、Microsoft、Yubico 等参与。API 允许服务器使用公钥加密而不是密码来注册和验证用户。