猿问

使用 GO 进行 AWS SNS 签名验证

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

但是,有一些点我无法理解。

7:生成 Amazon SNS 消息的派生哈希值。将规范格式的 Amazon SNS 消息提交到用于生成签名的相同哈希函数。

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

8:生成 Amazon SNS 消息的断言哈希值。断言的哈希值是使用公钥值(来自第 3 步)解密与 Amazon SNS 消息一起交付的签名的结果。

如何获得断言的哈希值

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

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从上面的代码中得到。


HUH函数
浏览 372回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答