2016-04-11 18 views
0

Ich schreibe und SMS http Endpunkt. Ich muss die SNS-Nachricht mit der Methode verifyMessageSignature von SignatureChecker überprüfen. Wie kann ich das publicKey-Attribut von Nachricht abrufen. Gibt es dafür auch eine util-Methode? Bitte helfen Sie.So extrahieren Sie das Attribut publicKey in der Methode verifyMessageSignature von SignatureChecker

+0

Der öffentliche Schlüssel wird in einem Zertifikat bereitgestellt, nicht von selbst. – EJP

+0

Gibt es eine Bibliothek oder eine util-Methode, die all dies aus der Nutzlast macht? –

Antwort

1

Die SNS-Nachricht von Amazon enthält ein Feld SigningCertURL. Fetch die Bytes an dieser Stelle in einen String cert, machen dann einen öffentlichen Schlüssel von ihm so:

/** 
* Build a PublicKey object from a cert 
* 
* @param cert the cert body 
* @return a public key 
*/ 
private PublicKey makePublicKey(String cert) { 
    try { 
     CertificateFactory fact = CertificateFactory.getInstance("X.509"); 
     InputStream stream = new ByteArrayInputStream(cert.getBytes(StandardCharsets.UTF_8)); 
     X509Certificate cer = (X509Certificate) fact.generateCertificate(stream); 
     return cer.getPublicKey(); 
    } catch (Exception e) { 
     LOGGER.error("Failed to make a public key from Amazon cert", e); 
     return null; 
    } 
} 

Dann sind Sie signatureChecker.verifySignature damit als zweites Argument nennen.