Я хочу реализовать проверку подлинности SNS SNS в GO. Here - это руководство по проверке подписи, предоставленное AWS.Проверка подлинности SNS AWS с помощью GO
Однако некоторые моменты я не могу получить.
7: Создать производное значение хэша в сообщении SNS Amazon. Отправьте сообщение Amazon SNS в каноническом формате на ту же хеш-функцию, которая используется для генерации подписи.
Как получить значение хеш-функции? Какую функцию хеша использовать?
8: Сгенерировать утверждённое значение хэширования сообщения SNS Amazon. Утвержденное значение хэша является результатом использования значения открытого ключа (начиная с шага 3), чтобы расшифровать подпись, поставленную с сообщением SNS Amazon.
Как получить Утвержденное значение хэша?
Вот мой код, у меня есть -структуру для уведомления:
type Notification struct {
Message string
MessageId string
Signature string
SignatureVersion string
SigningCertURL string
SubscribeURL string
Subject string
Timestamp string
TopicArn string
Type string
UnsubscribeURL string
}
и я уже сформировал каноническую строку:
signString := fmt.Sprintf(`Message
%v
MessageId
%v`, self.Message, self.MessageId)
if self.Subject != "" {
signString = signString + fmt.Sprintf(`
Subject
%v`, self.Subject)
}
signString = signString + fmt.Sprintf(`
Timestamp
%v
TopicArn
%v
Type
%v`, self.Timestamp, self.TopicArn, self.Type)
Decode подпись от base64
signed, err := base64.StdEncoding.DecodeString(self.Signature)
Получить сертификат от .pem
resp, _ := http.Get(self.SigningCertURL)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
p, _ := pem.Decode(body)
cert, err := x509.ParseCertificate(p.Bytes)
Теперь как я могу проверить подпись с моей канонической строкой? Правилен ли следующий код?
cert.CheckSignature(x509.SHA1WithRSA, signed, []byte(signString))
Я всегда получаю crypto/rsa: verification error
свыше кода.
Спасибо!
Это может помочь: https://github.com/mitchellh/goamz/blob/master/iam/sign.go – elithrar
Он использует процесс подписания версии 2. Однако AWS SNS поддерживает только версию 1 и версию 4. – lazywei
Считаете ли вы использование https://launchpad.net/goamz? –