如何验证 spring aws 云 SNS http 端点中的 SNS 消息真实性

How to verify SNS message authenticity in spring aws cloud SNS http end point

我正在使用 Spring AWS cloud. I cannot see anything regarding verifying the message signature in the doc 编写 SNS http 端点。我怎样才能做到这一点 ?

这是一个非常古老的问题,但也许有人对此有疑问。

方法很简单。您需要从 SignatureUrl 创建 InputStream 并基于此 InputStream

生成证书
InputStream inStream = url.openStream();
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
inStream.close();

下一步您需要使用签名。获取 SHA1withRSA 的实例,从您生成的证书中获取您的 public 密钥,并使用您的消息中的数据更新签名

 Signature sig = Signature.getInstance("SHA1withRSA");
 sig.initVerify(cert.getPublicKey());
 sig.update(getMessageBytesToSign(msg));
 return sig.verify(Base64.decodeBase64(msg.getSignature()));

您可以在 AmazonDoc

上找到完整示例

当您创建此方法时,只需将其用作您服务的静态实用程序即可从 SNS 等接收消息。

VerifySNS.isMessageSignatureValid(msg);

msg 属性是 SNSTopic 消息。