비대칭 키 쌍 만들기

이 가이드에서는 Media CDN에 대해 비동기 키 쌍을 만드는 방법을 보여줍니다.

키 생성

명령줄

Python 3 및 OpenSSL 1.1.1 이상(이전 버전의 OpenSSL은 Ed25519를 지원하지 않음)을 사용하여 비공개 및 공개 키를 모두 생성할 수 있습니다.

  1. 비공개 키를 생성합니다.

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

    그러면 PEM으로 인코딩된 비공개 키가 출력됩니다. 이상적으로 키 관리 시스템 또는 Secret Manager를 사용해서 이 키를 안전하게 보관합니다.

  2. URL 안전 base64 형식으로 비공개 키에서 공개 키를 생성합니다.

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

    이 명령어는 원시 공개 키에서 ASN.1 헤더 정보를 삭제하여 비공개 키로부터 공개 키를 생성합니다.

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

이 형식의 키가 준비되었으면 이제 이를 키 세트에 추가할 수 있습니다. 키 세트가 경로에 cdnPolicy.signedRequestKeyset로 연결되어 있으면 Media CDN은 해당 요청이 서명되었는지 검증한 후 콘텐츠를 제공합니다.