Crea pares de claves asimétricas

En esta guía, se muestra cómo crear pares de claves asimétricas para Media CDN.

Generar claves

Línea de comandos

Puedes generar una clave privada y una pública con Python 3 y OpenSSL 1.1.1 o posterior (las versiones anteriores de OpenSSL no admiten Ed25519)

  1. Genera la clave privada.

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

    Esto da como resultado una clave privada con codificación PEM. Mantener esta clave segura, idealmente con un sistema de administración de claves o Secret Manager.

  2. Genera la clave pública a partir de la clave privada en un formato base64 seguro para URL.

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

    Este comando genera la clave pública de la clave privada y quita la información del encabezado ASN.1 de la clave pública sin procesar.

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 clave en este formato, ahora puedes agregarla a un conjunto de claves. Cuando el conjunto de claves se asocia con una ruta como un cdnPolicy.signedRequestKeyset, Media CDN valida que las solicitudes se hayan firmado antes para publicar cualquier tipo de contenido.