概要
このガイドでは、Google Distributed Cloud(GDC)エアギャップのサードパーティ認証局(CA)として Keyfactor EJBCA Enterprise(外部アプライアンスとしてデプロイ)を統合する方法について説明します。
Keyfactor EJBCA Enterprise は、スケーラビリティと堅牢性に優れた FIPS 準拠の認証局プラットフォームです。組織は、異種環境全体で公開鍵基盤(PKI)を管理できます。
GDC エアギャップには、ホストされたクラウド境界内で鍵と証明書の管理を自動化するための組み込みの Certificate Authority Service が含まれています。ただし、GDC 外の既存のワークロードに対して Keyfactor EJBCA で PKI インフラストラクチャを標準化している組織は、エアギャップのある GDC 環境内で実行されるワークロードに同じ一貫した CA アーキテクチャと管理ポリシーを活用することをおすすめします。
このガイドでは、GDC ネットワーキング、内部 DNS、Kubernetes cert-manager を構成して、証明書のライフサイクル管理(ACME)を自動化し、登録機関(RA)パターンを使用して大量のプログラムによる発行をサポートする方法について説明します。
前提条件
このガイドに進む前に、次の前提条件を満たしていることを確認してください。
- Keyfactor EJBCA は、ソフトウェア アプライアンスまたはハードウェア アプライアンスとしてデプロイされ、サービスに安定した IP アドレスが構成されます。
- ルート、下位、管理の認証局(CA)が EJBCA インスタンスに作成されている。
- エンド エンティティ(EE)プロファイルが構成されている(TLS サーバー証明書など)。
- 管理 CA ユーザーの証明書がダウンロードされました。
- 必要なプロトコル(ACME など)が EJBCA インスタンスで有効になっている。
- このガイドでは、RSA 署名アルゴリズムを使用します。署名アルゴリズムは、特定の要件または EJBCA インスタンスで構成されている内容に基づいて変更できます。
アーキテクチャ
このアーキテクチャは外部認証局モデルに従っています。このモデルでは、EJBCA サーバーとそのバックアップ ハードウェア セキュリティ モジュール(HSM)は、物理的な GDC 境界の外でホストされますが、ネットワーク経由でアクセスできます。EJBCA サーバーは、ハードウェアまたはソフトウェア アプライアンスとして外部にデプロイできます。このガイドで説明するコア統合では、外部 EJBCA サーバーに安定した IP アドレスを使用してアクセスできることのみが必要です。

このアーキテクチャの主なコンポーネントは次のとおりです。
- EJBCA Enterprise Server: Keyfactor ハードウェア アプライアンスまたはソフトウェア アプライアンスとして外部にデプロイされ、CA(ルートと下位)を格納し、CC EAL4+ 認定 HSM 内ですべての CA 鍵マテリアルを生成します。
- GDC 標準 Kubernetes クラスタ: 顧客ワークロード、cert-manager、統合プロキシを実行するコンピューティング環境。
- GDC 内部 DNS: ACME DNS-01 チャレンジの解決に使用されるローカルの限定公開 DNS ゾーン(環境変数で構成された限定公開ドメイン名を使用)を管理します。
- GDC Egress Gateway: クラスタ Pod から外部 EJBCA サーバーの IP アドレスにアウトバウンド トラフィックを転送します。
- Harbor Private Registry: エアギャップ デプロイ用のミラーリングされたコンテナ イメージ(EJBCA cert-manager 発行者など)をホストします。
始める前に
統合を開始する前に、GDC 環境が次の要件を満たしていることを確認してください。
- まず、このガイド全体で生成されるすべてのリソースのホルダーとして機能するプロジェクトを作成します。
このガイド全体で参照される環境変数を構成します。これらの値は、特定の環境に合わせて必要に応じて変更してください。
# GDC Environment Configuration export GDC_ORG="your-org-name" export GDC_ZONE="your-zone-name" export GDC_PROJECT_ID="your-project-id" export GDC_USER_NAME="your-gdc-user-email" export GDC_CLUSTER_NAME="your-cluster-name" # EJBCA Server Configuration export EJBCA_DNS_ZONE="example.internal" export EJBCA_HOSTNAME="ejbca.${EJBCA_DNS_ZONE}" export EJBCA_LB_IP="XX.XX.XX.XX" # Stable IP of your EJBCA Server export EJBCA_CA_NAME="GDC Subordinate CA" export EJBCA_NAMESPACE="ejbca-ee" export CERTIFICATE_PROFILE_NAME="GDC TLS SERVER PROFILE" export END_ENTITY_PROFILE_NAME="GDC TLS SERVER EE PROFILE" # Harbor Private Registry Configuration export HARBOR_INSTANCE_URL="your-harbor-url.internal" export HARBOR_PROJECT="your-harbor-project" export HARBOR_ROBOT_ACCOUNT="robot$your-robot-name" export HARBOR_ROBOT_SECRET="your-robot-secret" export HARBOR_PULL_SECRET_NAME="harbor-secret"ネットワークに関する注: このガイドでは、GDC エアギャップ API にアクセスでき、必要なマニフェストとコンテナ イメージをダウンロードするためにインターネットにアクセスできる踏み台ノードから実行することを前提としています。インターネット アクセスがないマシンからこれを実行する場合は、これらのアセットを個別に取得し(たとえば、
docker saveを使用して接続されたマシンからイメージをエクスポートし、docker loadを使用してインポートする)、環境に安全にアップロードしてから続行する必要があります。
kubectl エイリアスを構成する
このセクションでは、GDC のゾーン管理 API とグローバル API に便利なコマンドライン エイリアスを作成します。
ゾーン管理 API のエイリアスを作成します(MANAGEMENT_API_KUBECONFIG は、管理 API の kubeconfig のパスに置き換えます)。
alias km="kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG"グローバル API のエイリアスを作成します(GLOBAL_API_KUBECONFIG は、グローバル API の kubeconfig へのパスに置き換えます)。
alias kg="kubectl --kubeconfig GLOBAL_API_KUBECONFIG"
GDC 標準クラスタを作成する
このセクションでは、GDC 内に標準の Kubernetes クラスタをデプロイし、GDC 標準クラスタ管理者ロールとローカル Harbor Container Registry の認証情報を構成します。
1 次のコマンドを実行して、使用可能な仮想マシン イメージタイプを特定します。
```shell
gdcloud compute machine-types list
```
2 クラスタのワーカーノードに適したマシンタイプを選択します。
```shell
export MACHINE_TYPE="n3-standard-8-gdc"
```
3 ゾーン管理 API を使用して、2 つのワーカーノードを含む標準クラスタを作成します。
```shell
km create -f - <<EOF
apiVersion: cluster.gdc.goog/v1
kind: Cluster
metadata:
name: ${GDC_CLUSTER_NAME}
namespace: ${GDC_PROJECT_ID}
spec:
nodePools:
- machineTypeName: ${MACHINE_TYPE}
nodeCount: 2
name: ${GDC_CLUSTER_NAME}-node-pool
EOF
```
This creates a simple GDC cluster. Cluster creation
can take up to 60 minutes to complete. To check the status, use the
following command:
```shell
km get clusters/${GDC_CLUSTER_NAME} \
-n ${GDC_PROJECT_ID} \
--watch
```
After the cluster is ready, the output should show a STATE of `Running`.
4 クラスタの準備ができたら、認証情報を取得します。
```shell
KUBECONFIG=kubeconfig-${GDC_CLUSTER_NAME}.yaml gdcloud clusters \
get-credentials ${GDC_CLUSTER_NAME} \
--standard \
--project ${GDC_PROJECT_ID} \
--zone ${GDC_ZONE}
```
5 GDC ユーザーに GDC 標準クラスタ管理者ロールを割り当てます。
```shell
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=cluster-admin
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=standard-cluster-admin
```
6 GDC で Harbor インスタンスと Harbor プロジェクトを作成して、ミラーリングされたコンテナ イメージをホストします。
```shell
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \
--member="user:${GDC_USER_NAME}" \
--role=harbor-instance-admin
```
7 Harbor ロボット アカウントを作成し、そのユーザー名と秘密鍵を記録します。
8 Harbor インスタンスで認証します。
```shell
docker --config=./docker-harbor login ${HARBOR_INSTANCE_URL} \
-u ${HARBOR_ROBOT_ACCOUNT} \
-p ${HARBOR_ROBOT_SECRET}
```
This saves the robot account credentials to
`./docker-harbor/config.json` for subsequent Secret creation.
インフラストラクチャとネットワークの構成
このセクションでは、基盤となる GDC インフラストラクチャとネットワーク設定を構成します。これにより、Kubernetes ワークロードが外部 EJBCA ホストのドメイン名を解決し、アウトバウンド API 呼び出しをその IP アドレスに正常にルーティングできるようになります。
GDC エアギャップでのプライベート DNS の設定
ドメイン解決を確立するには、限定公開 DNS ゾーンとレコードセットをデプロイして、外部 EJBCA サーバーをローカル ドメイン名にマッピングします。これにより、GDC 内のサービスは、未加工の IP アドレスではなく、安定したホスト名を使用して接続できます。
ユーザーにマネージド DNS プロジェクト管理者のロールを割り当てます。
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=managed-dns-project-adminグローバル
ManagedDNSZoneリソースをデプロイします。kubectl --kubeconfig GLOBAL_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ManagedDNSZone metadata: name: private-example-internal namespace: ${GDC_PROJECT_ID} spec: dnsName: ${EJBCA_DNS_ZONE} visibility: PRIVATE EOFEJBCA アプライアンスの IP アドレスを指す
ResourceRecordSetをデプロイします。kubectl --kubeconfig GLOBAL_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ResourceRecordSet metadata: name: ${EJBCA_HOSTNAME} namespace: ${GDC_PROJECT_ID} spec: name: ${EJBCA_HOSTNAME} ttlSeconds: 600 type: A rrData: - ${EJBCA_LB_IP} dnsZone: private-example-internal EOF
アウトバウンド NAT ゲートウェイの設定
次に、カスタム サブネットと NAT ゲートウェイを設定して GDC 下り(外向き)ネットワーキングを構成し、Kubernetes ワークロード(cert-manager や登録機関クライアントなど)が EJBCA サーバーにアウトバウンド トラフィックを安全にルーティングできるようにします。
プロジェクト レベルと組織レベルのネットワーク デベロッパー ロールを割り当てます。
gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=cloud-nat-developer gdcloud projects add-iam-policy-binding ${GDC_PROJECT_ID} \ --member=user:${GDC_USER_NAME} \ --role=subnet-project-admin gdcloud organizations add-iam-policy-binding ${GDC_ORG} \ --member="user:${GDC_USER_NAME}" \ --role=subnet-org-admin下り(外向き)サブネットを作成します。
kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG apply -f - <<EOF apiVersion: ipam.gdc.goog/v1 kind: Subnet metadata: name: ejbca-cluster-egress namespace: ${GDC_PROJECT_ID} spec: ipv4Request: prefixLength: 32 parentReference: name: data-network-segment-${GDC_ZONE}-group namespace: platform type: SubnetGroup type: Leaf EOFcert-manager 発行者セレクタに一致する
CloudNATGatewayを作成します。kubectl --kubeconfig MANAGEMENT_API_KUBECONFIG apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: CloudNATGateway metadata: name: ejbca-egress-gateway namespace: ${GDC_PROJECT_ID} spec: subnetRefs: - ejbca-cluster-egress workloadSelector: labelSelector: clusters: matchLabels: kubernetes.io/metadata.name: ${GDC_CLUSTER_NAME} workloads: matchLabels: app.kubernetes.io/name: ejbca-cert-manager-issuer EOF
Kubernetes cert-manager の統合
このセクションでは、カスタム EJBCA cert-manager 発行元を GDC の cert-manager サービスと統合します。これにより、コンテナ化されたサービスの証明書のプロビジョニング、更新、ライフサイクル管理を自動化できます。

発行者用に EJBCA を構成する
発行元を統合するには、必要なプロファイルを構成し、管理クライアント認証情報を登録して、EJBCA サーバー内にロール バインディングを設定します。これにより、cert-manager が EJBCA で認証し、証明書をリクエストできる安全な管理チャネルが確立されます。
管理者証明書プロファイルを作成する
まず、EJBCA 内に証明書プロファイルを作成して、管理証明書の技術的なプロパティと暗号化の制約(アルゴリズムや有効期間など)を定義します。
- EJBCA 管理 UI を開き、[CA Functions] > [Certificate Profiles] に移動します。
- ENDUSER プロファイルを複製し、
GDC ADMIN PROFILEという名前を付けます。 GDC ADMIN PROFILEを編集し、次の設定を構成します。- 使用可能な鍵アルゴリズム: RSA
- 利用可能なビット長: 2048、3072、4096
- Signature Algorithm: SHA512WithRSA
- 有効性:
200d - Issuer Alternative Name: [Use] をオフにします。
- CRL Distribution Points: [Use] をオンにします。
- CA で定義された CRL 配布ポイントを使用する: [使用] をオンにします。
- 認証局情報アクセス: [使用] をオンにします。
- Use CA defined OCSP locator: [Use] をオンにします。
- Use CA defined CA issuer: [Use] をオンにします。
- 利用可能な CA:
GDC Subordinate CAを選択します。
- [保存] をクリックします。
管理者エンド エンティティ プロファイルを作成する
次に、EJBCA でエンド エンティティ プロファイルを作成して、デフォルトのフィールドと CA の割り当てを定義します。これにより、管理証明書の登録と発行のプロセスが簡素化されます。
- [RA Functions] > [End Entity Profiles] に移動します。
- [Add End Entity Profile] で「
GDC ADMIN EE PROFILE」と入力し、[Add Profile] をクリックします。 - プロファイルを編集し、次の設定を構成します。
- デフォルトの証明書プロファイル:
GDC ADMIN PROFILE - 利用可能な証明書プロファイル:
GDC ADMIN PROFILE - デフォルトの CA:
GDC Subordinate CA - 利用可能な CA:
GDC Subordinate CA
- デフォルトの証明書プロファイル:
- [保存] をクリックします。
管理者証明書を登録する
プロファイルが確立されたら、EJBCA 登録機関(RA)インターフェースを使用して管理 ID を登録し、秘密鍵、公開証明書、信頼チェーンを抽出して、cert-manager の認証に必要な物理的な証明書ファイルを生成します。
- [RA Web] タブに移動します。
- [Make New Request] をクリックして、次のように構成します。
- 証明書の種類:
GDC ADMIN EE PROFILE - 鍵ペアの生成: CA による
- 鍵アルゴリズム: RSA 4,096 ビット
- 共通名(CN):
cert-manager - ユーザー名:
cert-manager - 登録コード:
abcd
- 証明書の種類:
- [PEM をダウンロード] をクリックし、
cert-manager.pemとして保存します。 PEM ファイルを次の 3 つのファイルに分割します。
client.key(秘密鍵):openssl pkey -in cert-manager.pem -out client.keyclient.crt(公開証明書):openssl x509 -in cert-manager.pem -out client.crtca.crt(下位 CA 証明書とルート CA 証明書を含む信頼チェーン):awk '/BEGIN CERTIFICATE/{i++} i>1' cert-manager.pem > ca.crt
ロールとアクセスルールを構成する
最後に、EJBCA で管理ロールを作成し、cert-manager 証明書のシリアル番号にバインドして、発行者に証明書の承認とリクエストに必要な最小限の権限セットのみが付与されるようにします。
- EJBCA 管理 UI で、[RA Functions] > [Search End Entities] に移動します。
cert-managerエンド エンティティを検索し、その証明書のシリアル番号を記録します。- [System Functions] > [Roles and Access Rules] に移動し、[Add] をクリックします。
- ロールに
cert-managerという名前を付け、記録したシリアル番号を使用して新規メンバーを追加します。 - [アクセスルールの編集] をクリックし、次の権限を構成します。
- ロール テンプレート: RA 管理者
- 承認済みの CA:
GDC Subordinate CA - エンド エンティティ ルール: エンド エンティティの承認、作成、編集
- エンド エンティティ プロファイル:
GDC TLS SERVER EE PROFILE - その他のルール: [監査ログを表示] をオフにします。
- [保存] をクリックします。
GDC クラスタを準備する
GDC 環境を準備するには、標準の Kubernetes クラスタで認証を行い、抽出した EJBCA 管理認証情報を Kubernetes Secret に保存します。これにより、cert-manager 発行者 Pod から安全にアクセスできるようになります。
標準クラスタの認証情報を取得します。
gdcloud clusters get-credentials "${GDC_CLUSTER_NAME}" \ --standard \ --project "${GDC_PROJECT_ID}" \ --zone "${GDC_ZONE}"カスタム発行者のターゲット Namespace を作成します。
kubectl create ns ejbca-issuer-systemTLS 認証シークレットをデプロイします。
kubectl create secret tls ejbca-secret \ -n ejbca-issuer-system \ --cert=client.crt \ --key=client.keyEJBCA 信頼チェーン シークレットをデプロイします。
kubectl create secret generic ejbca-ca-secret \ -n ejbca-issuer-system \ --from-file=ca.crt
EJBCA 発行者をインストールする
デプロイを構成するには、EJBCA cert-manager 発行者コンテナ イメージをプライベート Harbor レジストリにミラーリングし、Helm チャートをデプロイします。これにより、Kubernetes 証明書リクエストを EJBCA API 呼び出しに変換するために必要なカスタム コントローラがインスタンス化されます。
発行元の Namespace に Harbor イメージ pull シークレットを作成します。
# Authenticate with the private Harbor registry docker --config=./docker-harbor login ${HARBOR_INSTANCE_URL} \ -u ${HARBOR_ROBOT_ACCOUNT} \ -p ${HARBOR_ROBOT_SECRET} kubectl create secret docker-registry ${HARBOR_PULL_SECRET_NAME} \ --from-file=.dockerconfigjson=./docker-harbor/config.json \ -n ejbca-issuer-system公式の EJBCA cert-manager 発行元イメージを Harbor にミラーリングします。
docker pull keyfactor/ejbca-cert-manager-issuer:latest --platform linux/amd64 docker tag keyfactor/ejbca-cert-manager-issuer:latest \ ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer:latest docker --config=./docker-harbor push \ ${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer:latestHelm リポジトリを追加して、チャートをダウンロードします。
helm repo add ejbca-issuer https://keyfactor.github.io/ejbca-cert-manager-issuer helm repo update helm pull ejbca-issuer/ejbca-cert-manager-issuer --untarミラーリングされたイメージ リポジトリを使用して Helm チャートをデプロイします。
helm install ejbca-cert-manager-issuer ./ejbca-cert-manager-issuer \ --namespace ejbca-issuer-system \ --set image.repository=${HARBOR_INSTANCE_URL}/${HARBOR_PROJECT}/ejbca-cert-manager-issuer \ --set "imagePullSecrets[0].name=${HARBOR_PULL_SECRET_NAME}" \ --set image.tag=latest
発行者リソースを作成する
次に、GDC RBAC 権限を確立し、グローバル ClusterIssuer リソースをデプロイします。これにより、EJBCA サーバーが Kubernetes cert-manager フレームワーク内の信頼できる署名ソースとして登録されます。
GDC の cert-manager コントローラがカスタム EJBCA 発行元を使用できるように RBAC 権限を構成します。
kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com rules: - verbs: - approve apiGroups: - cert-manager.io resources: - signers resourceNames: - issuers.ejbca-issuer.keyfactor.com/* - clusterissuers.ejbca-issuer.keyfactor.com/* --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com subjects: - kind: ServiceAccount name: cert-manager namespace: cert-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cert-manager-controller-approve:issuers-ejbca-issuer-keyfactor-com EOFグローバル
ClusterIssuerリソースをデプロイします。kubectl apply -f - <<EOF apiVersion: ejbca-issuer.keyfactor.com/v1alpha1 kind: ClusterIssuer metadata: name: clusterissuer-ejbca spec: hostname: "${EJBCA_HOSTNAME}" ejbcaSecretName: "ejbca-secret" caBundleSecretName: "ejbca-ca-secret" certificateAuthorityName: "${EJBCA_CA_NAME}" certificateProfileName: "${CERTIFICATE_PROFILE_NAME}" endEntityProfileName: "${END_ENTITY_PROFILE_NAME}" endEntityName: "" EOF発行者のステータスを確認します。
kubectl get clusterissuer.ejbca-issuer.keyfactor.com/clusterissuer-ejbca \ -o "custom-columns=NAME:.metadata.name,STATUS:.status.conditions[0].message"以下のような出力が表示されます。
NAME STATUS clusterissuer-ejbca Success
証明書をリクエスト
統合を検証するには、標準の Kubernetes Certificate リソースをデプロイして、エンドツーエンドの cert-manager フローをテストし、EJBCA がリクエストされた証明書に正常に署名してプロビジョニングすることを確認します。
テスト用の Certificate リソースを作成して、統合が成功したことを確認します。
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: ejbca-test-certificate
namespace: ${EJBCA_NAMESPACE}
spec:
commonName: example.com
secretName: ejbca-certificate
issuerRef:
name: clusterissuer-ejbca
group: ejbca-issuer.keyfactor.com
kind: ClusterIssuer
EOF
証明書が作成され、準備が整っていることを確認します。
kubectl get certificates.cert-manager.io -n ${EJBCA_NAMESPACE}
以下のような出力が表示されます。
NAME READY SECRET AGE
ejbca-test-certificate True ejbca-certificate 12s
DNS-01 チャレンジを使用した自動 ACME
このセクションでは、EJBCA の ACME サービスを構成し、GDC 内部 DNS リソースを使用して、ドメイン検証済み証明書の発行を自動化します。これにより、標準の cert-manager クライアントまたは Certbot クライアントは、標準の自動 ACME プロトコルを使用して証明書をリクエストできます。
ACME 用に EJBCA を構成する
サーバーを準備するには、EJBCA 内で ACME サービスを有効にし、専用の DNS リゾルバを使用して ACME エイリアスを構成します。これにより、EJBCA サーバーは GDC 内で DNS-01 チャレンジ レスポンスを処理して検証する準備が整います。
- EJBCA 管理 UI で、[System Configuration] > [ACME Configuration] に移動します。
- [追加] をクリックして、以下を構成します。
- 名前:
default - エンド エンティティ プロファイル:
GDC TLS SERVER EE PROFILE - ワイルドカード証明書の発行を許可: オン
- チャレンジ レスポンス MPIC 検証 DNS 識別子チャレンジ タイプ:
dns-01を選択します。 - DNS リゾルバ: グローバル DNS の IP を入力します。
- DNSSEC を検証する: オフ(ローカルのプライベート環境であるため)
- 名前:
- [保存] をクリックします。
ACME 環境変数を作成する
このセクションでは、次の環境変数を作成して Certbot クライアントを構成します。必要に応じて、次の値を変更します。
# ACME Alias created in the EJBCA configuration
export ACME_ALIAS="default"
# Arbitrary email address used for ACME registration
export ACME_EMAIL="your-email@example.com"
Certbot クライアントを登録する
次に、標準の Certbot クライアントをインストールし、EJBCA のプライベート ACME エンドポイントに登録します。これにより、自動証明書オペレーションの実行に必要な信頼できるクライアント アカウントが確立されます。
ワークステーションに
certbotをインストールします。たとえば、macOS の場合は次のようになります。brew install certbot構成とログ用のローカル フォルダを作成します。
mkdir -p ./certbot/config ./certbot/work ./certbot/logsEJBCA ACME ディレクトリ エンドポイントにクライアントを登録します。
certbot register \ --config-dir ./certbot/config \ --work-dir ./certbot/work \ --logs-dir ./certbot/logs \ --server https://${EJBCA_HOSTNAME}/ejbca/acme/${ACME_ALIAS}/directory \ --email ${ACME_EMAIL} \ --agree-tos \ --no-eff-email
DNS チャレンジを使用して証明書を発行する
最後に、手動で Certbot リクエストを実行し、一時的な GDC DNS TXT リソースをデプロイして DNS-01 チャレンジを解決します。これにより、ターゲット ドメインの所有権が検証され、証明書の自動発行がトリガーされます。
手動チャレンジ コマンドを実行します。
certbot certonly \ --manual \ --preferred-challenges dns \ --key-type rsa \ --rsa-key-size 2048 \ --config-dir ./certbot/config \ --work-dir ./certbot/work \ --logs-dir ./certbot/logs \ --server https://${EJBCA_HOSTNAME}/ejbca/acme/${ACME_ALIAS}/directory \ -d test.${EJBCA_DNS_ZONE}ターミナルが停止し、チャレンジ値が表示されます。出力例:
Please deploy a DNS TXT record under the name: _acme-challenge.test.example.internal. with the following value: q3pCmzXfIhsTpT4f4JAulHmHaAR3udC_9Wf1G498ER0 Before continuing, verify the TXT record has been deployed.Certbot から提供された文字列を使用して、TXT レコードをグローバル DNS にデプロイします。
DNS の伝播が完了するまで 30 秒ほど待ってから、Certbot ターミナルに戻り、Enter キーを押します。
出力例:
Successfully received certificate. Certificate is saved at:./certbot/config/live/test.example.internal/fullchain.pem Key is saved at:./certbot/config/live/test.example.internal/privkey.pem This certificate expires on 2026-11-16. These files will be updated when the certificate renews.証明書が
./certbot/config/live/test.${EJBCA_DNS_ZONE}/に正常に書き込まれていることを確認します。