【问题标题】:Java library or public/private key message encryptionJava 库或公钥/私钥消息加密
【发布时间】:2020-11-29 08:50:34
【问题描述】:

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

  • SpringBoot 中有一个“REST-Server”
  • 服务在某处安装了许多 Java 中的“REST 客户端”。我无法控制它。
  • “REST-Server”为每个(!)客户端生成公钥/私钥对,并与客户端共享公钥
  • 每个“REST 客户端”都会生成自己的公钥/私钥对,并与“REST 服务器”共享公钥。客户共享其公钥和唯一 ID。
  • “REST-clients”不时轮询“REST-server”
  • “REST-client”从以下位置发送请求:
    • clientId(帮助“REST-Server”找到正确的客户端发布密钥来解密消息)
    • payload 使用分配给给定客户端的“REST-Server”公钥编码
    • original message SHA 所以“REST-Server”可以验证有效载荷是否被正确解密
    • client signature 使用客户端的私钥创建,因此服务器可以验证消息是否来自授权客户端

“REST-服务器”

  • 通过“uniqieId”定位与客户端关联的私钥

  • 使用 SHA 解密和验证

  • 使用client signature 和已知客户的公钥验证发件人

  • “REST-server”以表单形式发送响应

    • payload 用“客户”的公钥编码
    • original message SHA 所以“客户端”可以验证有效载荷是否被正确解密

“REST-client”使用自己的私钥解密响应。

是否有任何库/spingboot 扩展可以完成大部分工作?

【问题讨论】:

  • 标准响应:只使用 SSL/TLS
  • 什么是 2-way SSL...你是对的。问题解决了。

标签: spring-boot security public-key-encryption encryption-asymmetric


【解决方案1】:

我会更多地关注客户端而不是服务器:

  • 某些客户端可以保密(后端/机密客户端)
  • 某些客户端不能(网络/移动 UI - 公共客户端)
  • 如果客户端 API 凭据被泄露,那么您可能会遇到永久性安全漏洞

这感觉像是 OAuth 2.x 解决的问题:

  • 支持两种类型的客户端
  • 应用使用令牌,从不直接使用 API 凭据
  • 即使令牌被盗,它也会很快过期
  • 威胁模型由专家审核

在 Java 中,我会使用受人尊敬的 OAuth 库,例如 NimbusDS

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2019-03-13
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多