Public CA と ACME クライアントを使用して証明書をリクエストする
このチュートリアルでは、Google Cloud CLI を使用して Public Certificate Authority で TLS 証明書をリクエストする方法について説明します。Public Certificate Authority によって使用されるルート CA と中間 CA については、Google Trust Services をご覧ください。Public CA からの証明書のリクエストには課金されません。
始める前に
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
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 プロジェクトの IDUSER
: IAM ロールを割り当てるユーザーの固有識別子
IAM ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
Enable the Public CA API:
gcloud services enable publicca.googleapis.com
クライアントをインストールする
Public CA の使用を開始するには、ACME クライアントをインストールする必要があります。次の手順では、ACME クライアントとして Certbot を使用します。クライアントが外部アカウント バインディング(EAB)をサポートしている場合は、他の ACME クライアントを使用できます。
Certbot をインストールするには、Certbot の手順をご覧ください。
クライアントが Public CA サーバーを参照していることを確認してください。ACME クライアントが初めて Public CA を操作すると、クライアントは新しい鍵ペアを生成し、公開鍵を Public CA に送信します。
EAB 鍵 ID と HMAC をリクエストする
ACME クライアントをインストールしたら、Public CA に ACME アカウントを登録して、Public CA から証明書をリクエストする必要があります。ACAB Secret は、ACME アカウントを Public CA に登録する際に役立ちます。EAB シークレットは、鍵 ID とハッシュベースのメッセージ認証コード(HMAC)で構成されます。
EAB シークレットをリクエストするには、Public CA API または Google Cloud CLI を使用します。
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 を指定します。
Public CA に ACME アカウントを登録し、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 ディレクトリ URLEAB_KID
: EAB キー IDEAB_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 ディレクトリ URLDOMAINS
: 証明書をリクエストするドメインのカンマ区切りリスト
クリーンアップ
ドメインの証明書が不要になった場合は、作成したプロジェクトを削除します。
ステージング
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