Я имею дело с интеграцией между 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
}