Asymmetrische Schlüsselpaare erstellen

In dieser Anleitung wird gezeigt, wie Sie asymmetrische Schlüsselpaare für Media CDN erstellen.

Schlüssel generieren

Befehlszeile

Mit Python 3 und OpenSSL können Sie sowohl einen privaten als auch einen öffentlichen Schlüssel generieren 1.1.1 oder höher. 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
    

    Dadurch wird ein PEM-codierter privater Schlüssel ausgegeben. Bewahren Sie diesen Schlüssel sicher auf, idealerweise mithilfe eines Schlüsselverwaltungssystems oder von 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}")

Wenn der Schlüssel dieses Format hat, können Sie ihn jetzt einem Schlüsselsatz hinzufügen. Wenn der Keyset einer Route als cdnPolicy.signedRequestKeyset zugeordnet ist, Media CDN prüft, ob die Anfragen vor dem Bereitstellung von Inhalten.