如何验证 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 消息。
我正在使用 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 消息。