Como verifico a autenticidade de mensagens do Amazon SNS que são enviadas para endpoints HTTP e HTTPS?

Data da última atualização: 21/10/2022

Estou enviando notificações para um endpoint HTTPS (ou HTTP) usando o Amazon Simple Notification Service (Amazon SNS). Quero prevenir ataques de falsificação. Como verifico a autenticidade das mensagens do Amazon SNS que meu endpoint recebe?

Resolução

Uma das práticas recomendadas é o uso da validação de assinatura baseada em certificado ao verificar a autenticidade de uma notificação do Amazon SNS. Para obter instruções, consulte Verificação das assinaturas de mensagens do Amazon SNS no Guia do desenvolvedor do Amazon SNS.

Para ajudar a prevenir ataques de falsificação, faça o seguinte ao verificar as assinaturas de mensagens do Amazon SNS:

  • Sempre use HTTPS para obter o certificado do Amazon SNS.
  • Valide a autenticidade do certificado.
  • Verifique se o certificado foi enviado do Amazon SNS.
  • (Quando possível) Use um dos AWS SDKs compatíveis com o Amazon SNS para validar e verificar mensagens.

Exemplo de corpo da mensagem

Veja a seguir um exemplo de sequência de carga útil da mensagem enviada pelo Amazon SNS:

{
"Type" : "Notification",
"MessageId" : "e1f2a232-e8ce-5f0a-b5d3-fbebXXXXXXXX",
"TopicArn" : "arn:aws:sns:us-east-1:XXXXXXXX:SNSHTTPSTEST",
"Subject" : "Test",
"Message" : "TestHTTPS",
"Timestamp" : "2021-10-07T18:55:19.793Z",
"SignatureVersion" : "1",
"Signature" : "VetoDxbYMh0Ii/87swLEGZt6FB0ZzGRjlW5BiVmKK1OLiV8B8NaVlADa6ThbWd1s89A4WX1WQwJMayucR8oYzEcWEH6//VxXCMQxWD80rG/NrxLeoyas4IHXhneiqBglLXh/R9nDZcMAmjPETOW61N8AnLh7nQ27O8Z+HCwY1wjxiShwElH5/+2cZvwCoD+oka3Gweu2tQyZAA9ergdJmXA9ukVnfieEEinhb8wuaemihvKLwGOTVoW/9IRMnixrDsOYOzFt+PXYuKQ6KGXpzV8U/fuJDsWiFa/lPHWw9pqfeA8lqUJwrgdbBS9vjOJIL+u2c49kzlei8zCelK3n7w==",
"SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2aXXXXXXXX.pem",
"UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:XXXXXXXX:SNSHTTPSTEST:b5ab2db8-7775-4852-bd1a-2520XXXXXXXX",
"MessageAttributes" : {
"surname" : {"Type":"String","Value":"SNSHTTPSTest"}
}
}

Para obter mais informações sobre os formatos de mensagem que o Amazon SNS usa, consulte Análise de formatos de mensagens.