Membuat pasangan kunci asimetris

Panduan ini menunjukkan cara membuat pasangan kunci asimetris untuk Media CDN.

Membuat kunci

Command line

Anda dapat membuat kunci pribadi dan publik menggunakan Python 3 dan OpenSSL 1.1.1 atau yang lebih baru (OpenSSL versi sebelumnya tidak mendukung Ed25519).

  1. Buat kunci pribadi.

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

    Tindakan ini akan menghasilkan kunci pribadi yang dienkode PEM. Pastikan kunci ini tetap aman, idealnya dengan menggunakan sistem pengelolaan kunci atau Secret Manager.

  2. Buat kunci publik dari kunci pribadi dalam format base64 yang aman untuk 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])"
    

    Perintah ini menghasilkan kunci publik dari kunci pribadi, yang menghapus informasi header ASN.1 dari kunci publik mentah.

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

Dengan kunci dalam format ini, Anda kini dapat menambahkannya ke kumpulan kunci. Saat keyset dikaitkan dengan rute sebagai cdnPolicy.signedRequestKeyset, Media CDN akan memvalidasi bahwa permintaan ditandatangani sebelum menayangkan konten apa pun.