首页 > 解决方案 > 如何使用 RSA 加密来加密 http 响应

问题描述

我正在开发一个使用 RSA 加密来加密请求响应的 Web 服务。我已经与客户端共享了公钥,并且可以使用我的私钥解密传入的请求。现在我的问题是如何加密要返回给客户端的响应。我有两个选择:

(1) 使用我的私钥加密响应,客户端将使用已经共享的公钥对其进行解密。

(2) 要求客户提供他们的公钥并用该公钥加密响应。

请建议使用哪种策略来加密响应?

标签: javahttpencryptionrsa

解决方案


您不能使用私钥加密,因为公钥应该是公开的。使用私钥加密本质上是不安全的,编程 API 通常不允许使用它。

所以(2)实际上是唯一的选择:让客户公钥并让他们用私钥解密。然而,这并不是故事的全部:

  1. 公钥需要被信任,您可能需要设置一个完整的 PKI 来信任这些密钥;
  2. 较大的消息无法使用 RSA 轻松加密,因此您可能需要混合加密(加密随机 AES 密钥并使用该密钥加密消息);
  3. padding oracle 攻击是非常真实的,并且确实适用于 RSA,因此仅执行 RSA 是非常危险的。

这就是为什么通常建议(仅)依赖 TLS 的原因。TLS 并不总是安全的,但它几乎总是比自制方案更安全。


推荐阅读