非対称鍵ペアを作成する

このガイドでは、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 は、コンテンツを提供する前にリクエストが署名されたことを確認します。