Asymmetrische Schlüsselpaare erstellen

In dieser Anleitung wird beschrieben, wie asymmetrische Schlüsselpaare für Media CDN erstellt werden.

Schlüssel generieren

Befehlszeile

Sie können sowohl einen privaten als auch einen öffentlichen Schlüssel mit Python 3 und OpenSSL 1.1.1 oder höher generieren. Frühere Versionen von OpenSSL unterstützen Ed25519 nicht.

  1. Erstellen Sie den privaten Schlüssel.

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

    Dies gibt einen PEM-codierten privaten Schlüssel aus. Bewahren Sie diesen Schlüssel sicher auf, idealerweise mit einem Schlüsselverwaltungssystem oder Secret Manager.

  2. Generieren Sie den öffentlichen Schlüssel aus dem privaten Schlüssel im URL-sicheren Base64-Format.

    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])"
    

    Dieser Befehl generiert den öffentlichen Schlüssel aus dem privaten Schlüssel und entfernt die Informationen aus der ASN.1-Headerinformation aus dem unbearbeiteten öffentlichen Schlüssel.

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}")

Mit dem Schlüssel in diesem Format können Sie ihn jetzt einem Schlüsselsatz hinzufügen. Wenn das Keyset einer Route als cdnPolicy.signedRequestKeyset zugeordnet ist, überprüft Media CDN, ob die Anfragen signiert wurden, bevor Inhalte bereitgestellt werden.