
EJBCA Community Editionを使用した二層PKI階層におけるNIST FIPS 204 (ML-DSA)の実践的実装
📖 完全なウォークスルー: ポスト量子PKIの構築: EJBCA上でML-DSAを使用してルートCAとサブCAに署名した方法
2つの独立した仮想マシン上で動作する完全な純粋PQC PKI階層。各VMには独自のEJBCAコンテナがあります。
VM 1 — Root CA
└─ ML-DSA-65 self-signed Root CA
└─ CRL published and reachable
VM 2 — Sub CA
└─ ML-DSA-65 Sub CA signed by Root CA
└─ CRL published and reachable
└─ OCSP responder active
チェーン内のすべての証明書(ルートCA、サブCA)は、ML-DSA-65(NIST FIPS 204)のみで署名されています。RSAもECDSAもありません。エンドツーエンドで純粋なPQCです。
ML-DSA(旧CRYSTALS-Dilithium)は、FIPS 204に基づくNIST標準のポスト量子デジタル署名アルゴリズムです。このラボではDilithium3パラメータセット(ML-DSA-65)を選択しました。これは128ビットのポスト量子セキュリティを提供し、ほとんどのデプロイメントで推奨される汎用オプションです。
ejbca-pqc-lab/
├── README.md
├── root-ca/
│ └── setup-lab.sh # Run on VM1 — sets up the Root CA machine
└── sub-ca/
└── setup-lab.sh # Run on VM2 — sets up the Sub CA machine
chmod +x setup-lab.sh
sudo ./setup-lab.sh
完了したら、以下のURLで管理UIにアクセスします:
https://<VM1_IP>:8443/ejbca/adminweb/
コンテナからsuperadmin.p12をブラウザにインポートします:
docker cp ejbca:/opt/ejbca/p12/superadmin.p12 ~/superadmin.p12
デフォルトパスワード: ejbca
その後、Mediumの記事に従ってルートCAを手動で設定します。
chmod +x setup-lab.sh
sudo ./setup-lab.sh
完了したら、以下のURLで管理UIにアクセスします:
https://<VM2_IP>:8443/ejbca/adminweb/
同様にsuperadmin.p12をインポートし、Mediumの記事に従ってサブCAを設定します。
ejbca-dataボリュームの作成docker-compose.ymlの生成すべてのEJBCA設定(証明書プロファイル、暗号トークン、CA作成、CRL設定、OCSP)は管理UIを通じて手動で行われます。これは意図的です。スクリプトはプラットフォームを稼働させるだけです。Mediumの記事では、すべての手動決定とその理由が文書化されています。
| コンポーネント | CA | ステータス |
|---|
ACME — ACMEプロトコル(RFC 8555)はアカウントキー認証にML-DSAをサポートしていません。RSAとECDSAのみが許可されています。ACMEを含めると従来のアカウントキーが必要になり、純粋なPQCのストーリーが崩れます。IETFはPQC ACMEドラフトに取り組んでいます。このラボはそれが確定した時点で更新されます。
ブラウザトラスト — 主要なブラウザトラストストアはまだML-DSAを認識していません。これは公開PKIラボではなく、プライベートPKIラボです。それは予想通りで正しいです。
Mohammad Amin Kokash セキュリティエンジニア GitHub · Medium
MIT
| CRL | Root CA | ✅ |
| CRL | Sub CA | ✅ |
| OCSP | Sub CA | ✅ |
| OCSP | Root CA | ❌ 該当なし |