我正在开发一个需要身份验证的简单 API 的 Web 应用程序。对于我的应用程序性质,用户有两个 RSA 密钥,用于签名和加密消息。我的协议基于它工作。Web 应用程序可以访问公钥。
实现身份验证和杀死 MITM 的一种解决方案是在应用程序 API 上构建 SSL,并使用用户密钥构建身份验证方法。简单的消息传递。但我正在考虑另一种方法......基于 SSL 客户端认证进行身份验证。我曾在以前的项目中使用过客户端证书,但在决定是否将其用于此项目时遇到了一些问题:
使用用户 RSA 密钥之一为其生成证书是个坏主意吗?
是否有任何网络服务器(作为 SSL 包装器)可以让我在与外部程序进行 SSL 协商期间扩展功能?我的意思是当用户发送 SSL 请求时,我在数据库中查找他的证书 (a),如果找到,则将一条记录作为会话 ID 插入到数据库中,并且 Web 应用程序使用它 (b)。这意味着不仅要授予某些用户访问权限,还要找出哪个用户已登录。回答:至少 nginx 支持将收到的客户端证书传递给 Web 应用程序。我就这样过去了。
性能分析。我怀疑大量用户和这种基于证书的身份验证性能,但身份验证是我的应用程序中应该完成的一部分,SSL 也是。与仅使用服务器证书相比,使用客户端和服务器证书时,我可以预期哪些额外的负载和延迟?答案:见 MadHatter 的答案。
感谢您的建议,并为我的英语不好感到抱歉。