Come generare le chiavi VAPID con Go
In questo articolo, vedremo come generare le chiavi VAPID utilizzando il linguaggio di programmazione Go.
Le chiavi VAPID (Voluntary Application Server Identification for Web Push) sono utilizzate nel contesto delle notifiche push per autenticare il server di origine e consentire l'invio di messaggi push ai client. In questo articolo, vedremo come generare le chiavi VAPID utilizzando il linguaggio di programmazione Go.
Prerequisiti
- Installazione di Go: Assicurati di avere Go installato sul tuo sistema. Puoi scaricarlo da golang.org.
- Modulo
github.com/cespare/xxhash: Utilizzeremo questo modulo per l'hashing. - Familiarità con i concetti di base delle notifiche push e la libreria
crypto/elliptic.
Crea una nuova directory per il tuo progetto e inizializza un nuovo modulo Go:
mkdir vapid-keygen
cd vapid-keygen
go mod init vapid-keygen
Anche se per questo esempio non utilizzeremo molte dipendenze esterne, è buona norma installare quelle necessarie:
go get -u github.com/cespare/xxhash
Crea un file main.go e aggiungi il seguente codice:
package main
import (
"crypto/elliptic"
"crypto/ecdsa"
"crypto/rand"
"encoding/base64"
"fmt"
"log"
)
func generateVAPIDKeys() (string, string, error) {
// Curva ellittica P-256
curve := elliptic.P256()
privateKey, err := ecdsa.GenerateKey(curve, rand.Reader)
if err != nil {
return "", "", err
}
// Estrazione della chiave pubblica
publicKey := append(privateKey.PublicKey.X.Bytes(), privateKey.PublicKey.Y.Bytes()...)
// Codifica in Base64 delle chiavi
publicKeyBase64 := base64.RawURLEncoding.EncodeToString(publicKey)
privateKeyBase64 := base64.RawURLEncoding.EncodeToString(privateKey.D.Bytes())
return publicKeyBase64, privateKeyBase64, nil
}
func main() {
pubKey, privKey, err := generateVAPIDKeys()
if err != nil {
log.Fatalf("Error generating VAPID keys: %v", err)
}
fmt.Printf("Public Key: %s\n", pubKey)
fmt.Printf("Private Key: %s\n", privKey)
}
Questo codice genera una coppia di chiavi usando la curva ellittica P-256 e le codifica in formato base64 URL-safe.
Una volta generate le chiavi, possono essere utilizzate per autenticare le notifiche push. Di seguito è riportato un esempio di come utilizzare queste chiavi con la libreria web-push per inviare notifiche push:
package main
import (
"github.com/SherClockHolmes/webpush-go"
"log"
)
func main() {
sub := &webpush.Subscription{
Endpoint: "https://fcm.googleapis.com/fcm/send/...",
Keys: webpush.Keys{
Auth: "your_auth_key",
P256dh: "your_p256dh_key",
},
}
resp, err := webpush.SendNotification([]byte("Test message"), sub, &webpush.Options{
VAPIDPublicKey: "your_public_key",
VAPIDPrivateKey: "your_private_key",
VAPIDSubject: "mailto:example@yourdomain.org",
})
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
}
Conclusione
In questo articolo abbiamo visto come generare le chiavi VAPID utilizzando Go. Queste chiavi sono essenziali per autenticare le notifiche push e garantire la sicurezza della comunicazione tra il server e il client. Con le chiavi generate, puoi ora procedere a implementare la tua soluzione di notifiche push.