gpt4 book ai didi

go - 使用 GO 进行 AWS SNS 签名验证

转载 作者:IT王子 更新时间:2023-10-29 01:07:38 30 4
gpt4 key购买 nike

我想在 GO 中实现 AWS SNS 签名验证。 Here是AWS提供的签名验证教程。

但是,有些点我无法得到。

7: Generate the derived hash value of the Amazon SNS message. Submit the Amazon SNS message, in canonical format, to the same hash function used to generate the signature.

如何推导出哈希值?我应该使用哪个哈希函数?

8: Generate the asserted hash value of the Amazon SNS message. The asserted hash value is the result of using the public key value (from step 3) to decrypt the signature delivered with the Amazon SNS message.

如何获取断言的哈希值

这是我的代码,我有一个通知结构:

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)

从 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

谢谢!

最佳答案

我知道这是一个非常老的问题,但我遇到了与记者相同的问题,所以我花了一天时间在 AWS 的帮助下解决了这个问题。我已将我的工作作为外部库开源,现在可用 here .

你可以这样使用它(notificationJson是一个JSON字符串):

import (
"encoding/json"
"fmt"

"github.com/robbiet480/go.sns"
)

var notificationPayload sns.Payload
err := json.Unmarshal([]byte(notificationJson), &notificationPayload)
if err != nil {
fmt.Print(err)
}
verifyErr := notificationPayload.VerifyPayload()
if verifyErr != nil {
fmt.Print(verifyErr)
}
fmt.Print("Payload is valid!")

感谢您在这个 lazywei 上的初步工作,我的库基于您的上述代码!

关于go - 使用 GO 进行 AWS SNS 签名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014908/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com