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 1.1.1 oder höher können Sie sowohl einen privaten als auch einen öffentlichen Schlüssel generieren. Frühere OpenSSL-Versionen 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 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}")

Nachdem Sie den Schlüssel in diesem Format haben, können Sie ihn einem Schlüsselsatz hinzufügen. Wenn der Schlüsselsatz einer Route als cdnPolicy.signedRequestKeyset zugeordnet ist, prüft Media CDN, ob die Anfragen signiert wurden, bevor Inhalte bereitgestellt werden.