我想在服务器和客户端之间建立安全的交互,我想避免发明方轮。
- 有一个";REST服务器";在SpringBoot
- 服务有许多";REST客户端";安装在Java中的某个位置。我无法控制
- "REST服务器";为每个(!(客户端生成公钥/私钥对,并与客户端共享发布密钥
- 每";REST客户端";生成它自己的公钥/私钥对并与"共享公钥;REST服务器";。客户端共享其公钥和唯一id
- "REST客户端";轮询"REST服务器";不时
- "REST客户端";从以下位置发送请求:
clientId
(帮助"REST服务器"定位正确的客户端发布密钥以解密消息(- 用"1"编码的CCD_ 2;REST服务器";为给定客户端分配的公钥
- CCD_ 3所以";REST服务器";可以验证有效载荷是否正确解密
client signature
是用客户端的私钥创建的,因此服务器可以验证消息是否来自授权客户端
";REST服务器";
-
通过";uniqieId";
-
使用SHA 对其进行解密和验证
-
使用
client signature
和已知客户端的公钥验证发件人 -
"REST服务器";以形式发送响应
- CCD_ 6;客户端"s公钥
- CCD_ 7;客户端";可以验证有效载荷是否正确解密
";REST客户端";使用自己的私钥解密响应。
有没有任何库/spingboot扩展可以完成它的大部分功能?
我更关注客户端角度而不是服务器角度:
- 有些客户端可以保密(后端/机密客户端(
- 某些客户端无法(web/移动UI-公共客户端(
- 如果客户端API凭据被泄露,则您可能会有永久性的安全漏洞
这感觉像是OAuth2.x解决的一个问题:
- 支持两种类型的客户端
- 应用程序使用令牌,从不直接使用API凭据
- 即使代币被盗,它也会在不久后过期
- 威胁模型由专家审查
在Java中,我会使用一个受人尊敬的OAuth库,如NimbusDS。