Java库或公钥/私钥消息加密



我想在服务器和客户端之间建立安全的交互,我想避免发明方轮。

  • 有一个";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。

最新更新