【问题标题】:Java REST-Service with Digital Signing带有数字签名的 Java REST 服务
【发布时间】:2016-06-23 16:06:03
【问题描述】:
我有一个小型 REST 服务,少数客户端连接到该服务。现在我需要确保该请求仅来自我的客户端,而响应仅来自我的服务器。我不需要加密数据,因为是否有人可以读取它并不重要,重要的是没有人可以输入错误的数据。
现在我的想法是使用带有公钥和私钥 (RSA) 的数字签名。真正重要的是算法的速度。
这是正确的想法吗?如何在 JAX-RS 中实现这一点?
【问题讨论】:
标签:
java
rest
security
encryption
rsa
【解决方案1】:
TLS 速度非常快,而且相当安全(无论如何与大多数自制产品相比)。好的,它还提供机密性,但这应该没问题。使用 TLS(可能带有自签名证书)可能最有意义。这里有非常快的算法,例如ECDHE-ECDSA-AES128-GCM-SHA256。
如果您想使用 CMS 容器格式实现应用程序级别的安全性(签署请求/响应),使用 SHA-512 的 ECDSA 可能最有意义。请注意,如果您走这条路,您可能必须防止重放攻击。不过,搞砸的可能性要高得多。
ECDSA 在私钥操作方面比 RSA 快得多,因此当需要高效率时,它绝对应该优于 RSA(除非 RSA 仍然足够快,很可能就是这种情况)。