Public CA と ACME クライアントを使用して証明書をリクエストする

このチュートリアルでは、Google Cloud CLI を使用して Public Certificate Authority で TLS 証明書をリクエストする方法について説明します。Public Certificate Authority によって使用されるルート CA と中間 CA については、Google Trust Services をご覧ください。Public CA からの証明書のリクエストには課金されません。

準備

  • Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

    gcloud init

  • Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  • IAM オーナー(roles/owner)またはPublic CA 外部アカウントキー作成者(publicca.externalAccountKeyCreator)の IAM ロールがあることを確認します。

    Public CA 外部アカウントキー作成者(publicca.externalAccountKeyCreator)IAM ロールを付与するには、次のコマンドを実行します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=user:USER \
      --role=roles/publicca.externalAccountKeyCreator
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID
    • USER: IAM のロールを割り当てるユーザーの一意の識別子

    IAM ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

  • Public CA API を有効にします。

    gcloud services enable publicca.googleapis.com

クライアントをインストールする

Public CA の使用を開始するには、ACME クライアントをインストールする必要があります。次の手順では、Certbot を ACME クライアントとして使用します。クライアントが外部アカウント バインディング(EAB)をサポートしている場合は、他の ACME クライアントを使用できます。

Certbot をインストールするには、Certbot の手順をご覧ください。

クライアントが Public CA サーバーを参照していることを確認してください。ACME クライアントが初めて Public CA を操作すると、クライアントは新しい鍵ペアを生成し、公開鍵を Public CA に送信します。

EAB 鍵 ID と HMAC をリクエストする

ACME クライアントをインストールしたら、ACCA アカウントを Public CA に登録して、Public CA に証明書をリクエストする必要があります。ACAB Secret は、ACME アカウントを Public CA に登録する際に役立ちます。EAB Secret は、鍵 ID とハッシュベースのメッセージ認証コード(HMAC)で構成されます。

Public CA API または Google Cloud CLI を使用して、EAB Secret をリクエストできます。

EAB 鍵 ID と HMAC をリクエストするには、次のコマンドを実行します。

gcloud publicca external-account-keys create

このコマンドは、Public CA の本番環境で有効な EAB Secret を返します。レスポンスの本文では、keyId フィールドに EAB 鍵 ID が含まれ、b64MacKey フィールドに EAB HMAC が含まれます。

EAB Secret は、取得から 7 日以内に使用する必要があります。EAB Secret は、7 日以内に使用しないと無効になります。EAB Secret を使用して登録された ACME アカウントには有効期限がありません。

ACME アカウントを登録する

このセクションでは、取得した EAB Secret を指定して、ACME アカウントを Public CA に登録する方法について説明します。

通常の ACME クライアントを使用して ACME アカウントを登録し、登録中に EAB 鍵 ID と HMAC を指定します。

ACME アカウントを Public CA に登録し、ACME アカウントを EAB Secret のリクエストに使用した Google Cloud プロジェクトにバインドするには、次のコマンドを実行します。

certbot register \
    --email "EMAIL_ADDRESS" \
    --no-eff-email \
    --server "SERVER" \
    --eab-kid "EAB_KID" \
    --eab-hmac-key "EAB_HMAC_KEY"

以下を置き換えます。

  • EMAIL_ADDRESS: メールアドレス
  • SERVER: 本番環境またはステージング環境の ACME ディレクトリ URL
  • EAB_KID: EAB 鍵 ID
  • EAB_HMAC_KEY: EAB HMAC 鍵

次の表に、本番環境とステージング環境の説明と ACME ディレクトリ URL を示します。

環境 説明 ACME ディレクトリの URL
本番 本番環境では、公的に信頼できる証明書を取得できます。 https://dv.acme-v02.api.pki.goog/directory
ステージング ステージング環境は、公的に信頼できない証明書を返します。 ステージング環境は、本番環境と同じ検証チェックを実行します。ステージング環境は、統合やその他のテストに使用できます。 https://dv.acme-v02.test-api.pki.goog/directory

EAB Secret に登録できる ACME アカウントは 1 つのみです。EAB Secret を使用して ACME アカウントを登録すると、EAB Secret は無効になり、再利用できなくなります。複数の ACME アカウントを登録する場合は、アカウントごとに一意の EAB Secret をリクエストする必要があります。

証明書をリクエストする

Public CA が証明書ターゲットの管理を検証し、ACME クライアントが証明書管理オペレーションを意図したとおりに実行することを確認したら、通常の ACME ワークフローを使用して証明書のリクエスト、更新、取り消しを行うことができます。これらのオペレーションは、ACME クライアントを使用して実行できます。証明書をリクエストして更新するには、DNS の手動チャレンジなどの ACME チャレンジを完了する必要があります。

手動 DNS チャレンジを使用して証明書をリクエストするには、次のコマンドを実行します。

certbot certonly \
    --manual \
    --preferred-challenges "dns-01" \
    --server "SERVER" \
    --domains "DOMAINS"

以下を置き換えます。

  • SERVER: 本番環境またはステージング環境の ACME ディレクトリ URL
  • DOMAINS: 証明書をリクエストするドメインのカンマ区切りのリスト

クリーンアップ

ドメインの証明書が不要になった場合は、作成したプロジェクトを削除します。

ステージング

Public CA のステージング環境を使用して、テスト目的の証明書をリクエストできます。ステージング環境チェーンからテストルート CA までの証明書。ステージング環境からの証明書は、ステージング ルート証明書を信頼するように構成されていないブラウザや他のクライアントには信頼されません。 ステージング環境で有効な EAB Secret を取得するには、API エンドポイントをオーバーライドして、ステージング環境のエンドポイントを使用します。

gcloud config set api_endpoint_overrides/publicca https://preprod-publicca.googleapis.com/
次に、アカウントキーの作成コマンドを実行してステージング キーを作成します。
gcloud publicca external-account-keys create
本番環境のエンドポイントに戻すには、次のコマンドを実行します。
gcloud config unset api_endpoint_overrides/publicca

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

次のステップ