Creare coppie di chiavi asimmetriche

Questa guida illustra come creare coppie di chiavi asimmetriche per Media CDN.

Genera chiavi

Riga di comando

Puoi generare una chiave privata e una pubblica utilizzando Python 3 e OpenSSL 1.1.1 o versioni successive (le versioni precedenti di OpenSSL non supportano Ed25519).

  1. Genera la chiave privata.

    openssl genpkey -algorithm ed25519 -outform PEM -out test.private.key
    

    Viene visualizzata una chiave privata con codifica PEM. Mantieni questa chiave al sicuro, idealmente utilizzando un sistema di gestione delle chiavi o Secret Manager.

  2. Genera la chiave pubblica dalla chiave privata in formato Base64 sicuro per il web.

    openssl pkey -outform DER -pubout -in test.private.key | tail -c +13 | python3 -c "import base64, sys; print(('%s' % base64.urlsafe_b64encode(sys.stdin.buffer.read()))[2:-1])"
    

    Questo comando genera la chiave pubblica dalla chiave privata, rimuovendo le informazioni dell'intestazione ASN.1 dalla chiave pubblica non elaborata.

Python

import base64

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import ed25519


def generate_ed25519_keypair(
    private_key_filename: str = "private.key", public_key_filename: str = "public.pub"
) -> None:
    """Generate Ed25519 Keys Pairs.

    Args:
        private_key_filename(default private.key): private key filename as a string.
        public_key_filename(default public.pub): public key filename as a string

    Returns:

    """
    private_key = ed25519.Ed25519PrivateKey.generate()
    public_key = private_key.public_key()

    private_key_str = private_key.private_bytes(
        encoding=serialization.Encoding.Raw,
        format=serialization.PrivateFormat.Raw,
        encryption_algorithm=serialization.NoEncryption(),
    )
    print("Private Key:\t", base64.urlsafe_b64encode(private_key_str))

    public_key_str = public_key.public_bytes(
        encoding=serialization.Encoding.Raw, format=serialization.PublicFormat.Raw
    )
    print("Public Key:\t", base64.urlsafe_b64encode(public_key_str))

    with open(private_key_filename, "wb") as fp:
        fp.write(base64.urlsafe_b64encode(private_key_str))
        print(f"Private Key is written to:\t{private_key_filename}")

    with open(public_key_filename, "wb") as fp:
        fp.write(base64.urlsafe_b64encode(public_key_str))
        print(f"Public Key is written to:\t{public_key_filename}")

Con la chiave in questo formato, ora puoi aggiungerla a un set di chiavi. Quando il set di chiavi è associato a un percorso come cdnPolicy.signedRequestKeyset, Media CDN convalida che le richieste siano state firmate prima di pubblicare i contenuti.