Как проверить строку, подписанную x509 - PullRequest
0 голосов
/ 14 апреля 2020

Я имею дело с интеграцией между Go и salsify webhook.

Я не смог найти, как проверить подпись сообщения согласно документации, предоставленной salsify (пример в ruby) https://developers.salsify.com/v1.0/reference#webhook -подпись-заголовки

Мой код выглядит как

// downloading certificate
resp, err := c.Client.GET(ctx, client.NewRequest(certURL))

// building string to validate
signedData := fmt.Sprintf("%s.%s.%s.%s.%s", timestamp, requestID, orgID, WebhookURL, string(body))
publicKey := readPublicKey(resp.String())
digest := sha256.Sum256([]byte(SignatureData))
b64sig := base64.StdEncoding.EncodeToString([]byte(signature))
decodedSignature, _ := base64.StdEncoding.DecodeString(b64sig)
verifyErr := rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, digest[:], decodedSignature)


// readPublicKey _
func readPublicKey(rootPEM string) *rsa.PublicKey {
    block, _ := pem.Decode([]byte(rootPEM))
    var cert *x509.Certificate
    cert, _ = x509.ParseCertificate(block.Bytes)
    rsaPublicKey := cert.PublicKey.(*rsa.PublicKey)
    return rsaPublicKey
}
...