REST 服务的端到端安全性,是否有任何新兴标准?

信息安全 加密 电子签名 网络服务 休息
2021-08-18 13:27:59

我从事医疗保健领域的整合工作,其中端到端的安全性很重要。我们与众多 SOAP 服务集成,并使用 WS 安全特性来加密和签署请求和响应。

在我们的集成场景中,请求和响应会经过几个中间层。因此,对数据本身进行加密(消息安全)非常重要。使用 HTTPS(传输安全)仅在 SSL 终止之前保护消息。

我们还与 REST 样式的服务集成。AFAIK,没有标准的方法(如 WS-security)来保护 REST 有效负载。

是否有用于签署和加密 REST 有效负载的新兴标准?

编辑

  • Amazon S3 服务实施加密不确定 S3 上传客户端是否使用 SOAP 或 REST 样式调用。
  • 这篇硕士论文是关于 REST 安全性的。
3个回答

我相信您是在询问通过 RESTful 堆栈进行身份传播的问题。换句话说,您希望将请求绑定回原始用户,以便下游系统可以在每个用户的基础上验证授权。我最近也在研究这个问题。

本质上,不,没有为 REST 服务的身份传播定义标准。REST 本身不是一种标准,而是一种架构模式。

有一些库提供与现有标准的集成,例如 Kerberos(如JAX-RS)或通过 HTTP 绑定的 SAML

使用 JSON Web 令牌 (JWT) 的各种方法正变得越来越流行,但这更像是一种“自己动手”的方法,它提供了灵活性,但代价是实施风险。这有点血腥。JWT 的 RFC 仅在 2015 年 4 月获得批准。

如果端到端安全性是一个关键因素,那么最好采用的方法是不信任介于两者之间的任何东西。然后,在两者之间使用什么协议或 API 变得无关紧要,因为它们可能安全也可能不安全。IMO 这是一个公平的假设——在任何具有多个中间层的相当复杂的系统中,都不能保证它们的通信渠道得到适当保护。或者他们不会无意中缓存数据超过他们需要的时间,因此会打开一个可能会泄露机密数据的窗口。

建议:

  • 目标服务器生成一个密钥对(公钥 + 私钥)。例如 4096 位的 RSA。
  • 将公钥分发给客户端。例如,移动客户端可能已经将公钥打包在应用程序中。
  • 客户端用公钥对机密数据进行加密,并提交密文。只有目标服务器可以解密密文。

JWT 主要用于身份验证,但您可以自定义令牌以包含角色并将其用于授权。

对于 http 消息的签名和加密,您可以查看 JSON Web Signature (JWS) 和 JSON Web Encryption (JWE)。它们都是 RFC,属于 JSON 对象签名和加密 (JOSE) 框架的一部分。