Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring aws云SNS http端点中验证SNS消息的真实性_Java_Spring_Spring Cloud - Fatal编程技术网

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

Java 如何在spring aws云SNS http端点中验证SNS消息的真实性,java,spring,spring-cloud,Java,Spring,Spring Cloud,我正在使用Spring编写一个SNS http端点。我在中看不到有关验证消息签名的任何内容。我该怎么做 这是一个非常古老的问题,但可能有人对此有疑问 方法很简单。您需要从SignatureUrl创建InputStream,并基于此InputStream生成证书 InputStream inStream = url.openStream(); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certifica

我正在使用Spring编写一个SNS http端点。我在中看不到有关验证消息签名的任何内容。我该怎么做

这是一个非常古老的问题,但可能有人对此有疑问

方法很简单。您需要从SignatureUrl创建InputStream,并基于此InputStream生成证书

InputStream inStream = url.openStream();
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
inStream.close();
接下来,您需要使用签名。获取SHA1 WithRSA实例,从您生成的证书中获取公钥,并使用消息中的数据更新签名

 Signature sig = Signature.getInstance("SHA1withRSA");
 sig.initVerify(cert.getPublicKey());
 sig.update(getMessageBytesToSign(msg));
 return sig.verify(Base64.decodeBase64(msg.getSignature()));
您可以在上找到完整的示例

当您创建此方法时,只需将其用作从SNS接收消息的服务的静态UTIL,例如

VerifySNS.isMessageSignatureValid(msg);
msg属性是SNSTopic消息