Java 带有数字签名的 REST 服务
Java REST-Service with Digital Signing
我有一个小型 REST 服务,少数客户端连接到该服务。现在我需要确保请求仅来自我的客户端,而响应仅来自我的服务器。我不需要加密数据,因为是否有人可以读取它并不重要,重要的是没有人可以输入错误的数据。
现在我的想法是使用带有 public 和私钥 (RSA) 的数字签名。真正重要的是算法的速度。
这是正确的想法吗?我如何在 JAX-RS 中实现它?
TLS 非常快而且相当安全(与大多数自制软件相比)。好吧,它也提供保密性,但那应该没问题。使用 TLS(可能带有自签名证书)可能最有意义。你这里有非常快的算法,比如 ECDHE-ECDSA-AES128-GCM-SHA256
.
如果您想使用 CMS 容器格式来实现应用程序级别的安全性(签署请求/响应),那么使用 SHA-512 的 ECDSA 可能最有意义。请注意,如果你走这条路,你可能必须防止重放攻击。不过,搞砸的可能性要高得多。
ECDSA 在私钥操作方面比 RSA 快得多,因此在需要高效率时,它绝对应该优先于 RSA(除非 RSA 仍然足够快,情况很可能就是这样)。
我有一个小型 REST 服务,少数客户端连接到该服务。现在我需要确保请求仅来自我的客户端,而响应仅来自我的服务器。我不需要加密数据,因为是否有人可以读取它并不重要,重要的是没有人可以输入错误的数据。
现在我的想法是使用带有 public 和私钥 (RSA) 的数字签名。真正重要的是算法的速度。
这是正确的想法吗?我如何在 JAX-RS 中实现它?
TLS 非常快而且相当安全(与大多数自制软件相比)。好吧,它也提供保密性,但那应该没问题。使用 TLS(可能带有自签名证书)可能最有意义。你这里有非常快的算法,比如 ECDHE-ECDSA-AES128-GCM-SHA256
.
如果您想使用 CMS 容器格式来实现应用程序级别的安全性(签署请求/响应),那么使用 SHA-512 的 ECDSA 可能最有意义。请注意,如果你走这条路,你可能必须防止重放攻击。不过,搞砸的可能性要高得多。
ECDSA 在私钥操作方面比 RSA 快得多,因此在需要高效率时,它绝对应该优先于 RSA(除非 RSA 仍然足够快,情况很可能就是这样)。