既存のEnterprise Subordinate CA(中間CA)を旧Root CA階層から切り離し、新Root CA配下へ移したい──AD CS運用でよくある課題です。本記事ではSubCAを作り直さずに移行する手順と、既存証明書が無効化される落とし穴、失効・配布・CRL/AIA設計まで実務目線で解説します。
前提:Enterprise Subordinate CAを「別のRoot CA配下」に移すとは
Windows ServerのAD CS(Active Directory Certificate Services)で運用しているEnterprise Subordinate CA(以下、SubCA)は、通常は上位のRoot CA(または上位CA)から署名されたCA証明書を持ち、そのCA証明書を使ってサーバー証明書・ユーザー証明書などを発行します。
ここで言う「別のRoot CA配下に移す」とは、SubCA自体(CA名・CAデータベース・発行履歴)を維持しつつ、SubCAのCA証明書を新しいRoot CAに署名してもらうことで、以後に発行する証明書の信頼チェーンを新Root側へ切り替えることを指します。
よくある移行動機
- 旧Rootの有効期限が近い/暗号アルゴリズムを刷新したい(RSA→ECC、SHA-1排除など)
- M&Aや組織再編でPKIを統合したい
- 監査・セキュリティ要件でRoot階層を再設計したい(オフラインRootの再構築など)
- テスト用Rootから本番Rootへ切り替えたい
結論:SubCAの「CA証明書更新」で別Root署名は可能。ただし新しい鍵ペアが必須
SubCAを作り直さずに新Root配下へ切り替える現実的な方法は、SubCAのCA証明書を更新(Renew)し、その更新要求を新Root CAで署名してもらうことです。
最重要ポイント:更新時は必ず「新しい鍵ペア(New key pair)」で更新します。既存鍵の使い回しで別Rootに付け替える運用は、トラブルの温床になりやすく、移行後の失効・CRL検証・チェーン構築で破綻しやすいため避けます。
まず理解しておくべきこと:既存証明書のチェーンは「発行時点で固定」される
「SubCAを新Rootで署名し直したら、過去に発行した証明書も新Rootへ自動でつながるのでは?」と期待しがちですが、原則としてそうはなりません。
証明書は、発行時点のSubCAの署名鍵で署名され、検証側(クライアント)は証明書のIssuer情報やAKI/SKI等のヒントを使ってチェーンを構築します。過去に発行した証明書は、過去のSubCA証明書(=旧Rootが署名したSubCA証明書)へチェーンしやすい状態のまま残ります。
| 区分 | SubCAのCA証明書 | クライアントが構築しやすいチェーン | 旧Root側のSubCA証明書を失効した場合 |
|---|---|---|---|
| 更新前にSubCAが発行した証明書 | 旧Root署名のSubCA証明書(旧鍵) | 旧Rootへチェーン | 無効扱いになり得る(チェーン上のCA証明書が失効扱いになるため) |
| 更新後にSubCAが発行した証明書 | 新Root署名のSubCA証明書(新鍵) | 新Rootへチェーン | 影響なし(旧チェーンを通らない) |
つまり、「SubCAは作り直したくない」「既存証明書も極力そのまま」は同時に満たしにくい要求です。新Rootへ切り替えるほど、旧Rootチェーンの証明書は段階的に置き換えるか、旧Rootをしばらく信頼し続ける必要が出てきます。
移行方式の選び方:共存か、置き換えか
実務では、次のどちらか(または併用)に落ち着きます。組織のリスク許容度と、証明書の用途(TLS/クライアント認証/コード署名等)で選びます。
| 方式 | 狙い | メリット | デメリット/注意点 | 向くケース |
|---|---|---|---|---|
| 旧Rootと新Rootを共存 | 新規発行だけ新チェーンへ移行し、既存は期限まで温存 | 既存証明書の置き換え作業が最小 | 旧Root/旧SubCAのCRL公開を期限まで維持が必要。信頼ストアも二重管理 | 証明書の数が多い/停止できないシステムが多い |
| 既存証明書を新チェーンで再発行(置き換え) | 旧チェーンを早期に終わらせる | 移行完了が早い。旧Rootを撤去しやすい | サーバー/クライアント/アプリの更新作業が発生。計画と棚卸しが必須 | 監査要件で旧Rootを残せない/期限まで待てない |
実施の全体像:SubCA更新(新鍵)→新Root署名→クライアント配布→段階的な切替
ここからは、SubCAを作り直さずに新Rootへ付け替える「王道」手順を、運用の落とし穴込みで整理します。環境差(オンラインRoot/オフラインRoot、HTTP配布、OCSP有無、HSM利用など)はありますが、骨格は同じです。
事前準備チェックリスト
| 項目 | 確認内容 | 実務のポイント |
|---|---|---|
| 棚卸し | SubCA配下で発行している証明書の用途・期限・配布先 | TLSだけでなく、802.1X/EAP-TLS、VPN、S/MIME、スマートカード、コード署名も忘れがち |
| 停止影響 | SubCA更新時のCAサービス再起動可否 | 更新操作はタイミングによってサービスが停止・再起動します。業務時間帯を避けるのが無難 |
| バックアップ | CAデータベース、秘密鍵、レジストリ設定、CAPolicy.inf等 | 「System State」だけではなく、CAの論理バックアップも確実に取得 |
| 新Root配布 | 新Rootの証明書をクライアントの信頼ストアへ配布できるか | GPO配布、MDM、ゴールデンイメージ、サーバー証明書ピン留めの有無も確認 |
| CDP/AIA | 新Root階層のCRL配布先(CDP)・証明書取得先(AIA)が到達可能か | HTTP/LDAPの到達性、名前解決、ファイアウォール、公開タイミングを事前に検証 |
手順:SubCA側で「更新要求」を作成する(新しい鍵ペアで)
SubCAのCA証明書更新では、GUIでもコマンドでも実施できます。重要なのは「新しい鍵ペアを生成する」ことと、更新要求(CSR)を確実に持ち出せることです。
GUIでの代表的な流れ
- SubCAサーバーで「証明機関(certsrv.msc)」を開く
- CA名を右クリックし、「すべてのタスク」→「CA証明書の更新」を実行
- ウィザードで「新しい公開キーと秘密キーのペアを生成」を選択
- 更新要求ファイル(.req)が生成されるので保存する(保存先は環境で異なるため、確実に控える)
更新要求を作っただけでは、新しいCA証明書がまだ入っていません。新Rootで署名してもらい、SubCAへ戻してインストールするまでがセットです。中途半端に止めると、CAが発行できない状態になり得るため、作業時間を確保して実施します。
補足:コマンドで確認・検証したい場合
運用現場では「いまどのCA証明書で発行しているか」「AIA/CDP設定がどうなっているか」を、コマンドで機械的に確認できると事故が減ります。例として、次のような確認が役立ちます。
certutil -getreg CA\CACertPublicationURLs
certutil -getreg CA\CRLPublicationURLs
certutil -cainfo
出力は環境依存ですが、AIA/CDPが新Root階層の想定どおりになっているか、作業前に把握しておくと差分確認が容易です。
手順:新Root CA側で更新要求を署名し、SubCA証明書を発行する
次に、SubCAで生成した更新要求(CSR)を新Root CAへ持ち込み、SubCA用のCA証明書を発行します。新Rootがオフラインの場合は、オフライン手順(媒体搬送)になりますが、やること自体は同じです。
- 新Root CAで要求を受け取り、Subordinate CA(サブCA)用の証明書として発行する
- 発行後、SubCAへ戻すために証明書ファイル(.cer / .crt)としてエクスポートする
ここでの注意点は、新Root側のCAポリシー(有効期間、パス長制約、発行ポリシーなど)が、現行運用に適合しているかです。特に有効期間は「思ったより短い/長い」が起きやすく、後から直すと再更新が必要になりがちです。
手順:SubCA側で新しいSubCA証明書をインストールし、発行を新チェーンへ切り替える
新Rootで署名されたSubCA証明書をSubCAへ戻し、インストールして発行を再開します。インストール後は、新しいCA証明書(新鍵)が“発行に使われている”状態になっていることを必ず確認します。
切替後に必ず行う確認
- SubCAが新しいCA証明書で署名している(新しく発行したテスト証明書のチェーンが新Rootへ向く)
- CRLが新しいCA証明書で署名され、公開先へ配布されている
- AIAでSubCA証明書が取得できる(HTTP/LDAP)
- ドメイン内クライアント(GPO適用済み)でチェーン検証と失効確認が通る
検証は実際のクライアントで行うのが確実です。サーバー側で正しく見えても、クライアント側の信頼ストア配布が遅れていると、現場では「突然TLSが失敗した」に見えてしまいます。
検証コマンド例(クライアント側)
certutil -verify -urlfetch <対象証明書.cer>
チェーン構築、AIA取得、CDP取得、CRL検証まで一通り確認できるため、移行フェーズでは非常に便利です。
旧Root側でSubCA証明書を失効させる前に、必ず押さえるべき影響
質問でよく出るのが「旧Root配下のSubCA証明書は階層から外すため失効させる予定」という点です。ここが移行の成否を分けます。
旧Rootが署名したSubCA証明書(=更新前のSubCA証明書)を失効すると、クライアントが旧チェーンで検証する証明書は、チェーン上の中間CAが失効した扱いになり、既存証明書が一斉に無効化され得ます。これは「サーバー証明書がまだ期限内なのに急にエラーになる」典型パターンです。
| 旧SubCA証明書の扱い | 既存証明書(更新前発行)の動き | 現場で起きやすい事象 | 推奨アクション |
|---|---|---|---|
| 失効しない(期限まで共存) | 旧チェーンで期限まで動きやすい | 切替は段階的。旧Rootの運用は残る | 旧Root/旧SubCAのCRL公開を期限まで維持 |
| 早期に失効する | 無効化される可能性が高い | TLSエラー、認証失敗、業務停止 | 事前に置き換え計画を完了し、必要なら一斉再発行 |
| 信頼ストアから旧Rootを削除 | 旧Rootチェーンが成立しない | 結果として既存証明書が使えない | 旧Root撤去は「既存証明書の整理が終わってから」 |
「既存の証明書もそのまま動かしたい」場合の現実解
既存証明書を大きく崩さずに移行したい場合、選択肢は実質2つです。
旧Rootを信頼し続け、旧SubCA証明書を失効させずに期限まで共存する
最も事故が少ない方法です。新Root配下の新しいSubCA証明書へ切り替えた後も、旧Rootチェーンの証明書は期限まで動かし、期限が来たものから順次新チェーンへ置き換えます。
- 旧Root(必要なら中間)をクライアントの信頼ストアに残す
- 旧SubCA証明書のCRL配布(CDP)を期限まで維持する
- 自動更新(Autoenrollment)がある場合、更新ポリシーを新チェーンへ寄せる
既存証明書を新チェーンで再発行し、置き換える
監査要件などで「旧Rootを残せない」場合は、こちらが本線です。影響範囲をコントロールするため、用途別に優先順位をつけて置き換えるのがコツです。
| 証明書の用途 | 置き換え優先度 | 理由 | 置き換えの実務例 |
|---|---|---|---|
| 外部公開TLS(Web/Proxy/VPN) | 高 | 失敗が即インシデント化。クライアントも多様 | 新チェーンで再発行→サーバーにバインド→旧証明書撤去 |
| 社内TLS(業務アプリ) | 中 | 端末管理できるが、台数が多い | GPOで信頼配布→更新タイミングで自動更新を誘導 |
| クライアント証明書(ユーザー/デバイス) | 中〜高 | 802.1XやVPNで失敗すると業務影響が大きい | MDM/GPOで再配布、切替期間を設ける |
| コード署名 | 要注意 | 署名後の検証は長期間。タイムスタンプ運用も絡む | 再署名の要否を精査、必要なら新証明書で再署名計画 |
クライアント配布:新Rootの信頼ストア展開が「移行の前提条件」
新Root配下で発行した証明書は、クライアントが新Rootを信頼していなければ検証できません。移行作業の順序として、新Root(必要なら新中間)を先に配布し、浸透を確認してから新チェーンの証明書を増やすのが安全です。
Active Directoryドメイン環境での典型(GPO)
- コンピューターの構成 → ポリシー → Windows の設定 → セキュリティの設定 → 公開キーのポリシー
- 「信頼されたルート証明機関」へ新Root証明書を配布
- 必要に応じて「中間証明機関」へSubCA証明書も配布
「端末はドメイン参加しているから大丈夫」と思い込むのが危険です。テレワーク端末、VPN未接続端末、サーバーのローカルストア、Linux/ネットワーク機器、Javaキーストアなど、信頼ストアが別系統の対象が必ず混ざります。棚卸しで“非Windows”を早めに炙り出すのが、現場で効きます。
CRL/OCSPとCDP/AIA:移行で一番壊れやすいのは「到達性」
チェーンの切替そのものよりも、実際に事故が起きやすいのは失効情報の配布です。新Root配下に移行した瞬間、クライアントは新Root/新SubCAのCRL取得に動きます。CDP/AIAが到達できなければ、アプリによっては即エラーになります。
よくある落とし穴
- 社内HTTP配布先のURLを変えたが、DNS/FW/プロキシの例外設定が追従していない
- オフラインRootのCRL公開作業が手順化されておらず、CRLが期限切れになる
- LDAP配布を前提にしていたが、拠点間の到達性が悪くクライアントがタイムアウトする
- OCSPレスポンダを使っていたが、新チェーン向けの署名証明書や公開設定が未整備
移行前に、テスト端末から「新Root/新SubCAのAIA/CDPへ到達できること」「CRLがダウンロードでき、署名検証できること」を確認しておくと、切替後の混乱が激減します。
運用の注意点:SubCA更新後も“古いCA証明書”は捨てない
SubCAを新鍵で更新すると、SubCAサーバー上には「旧CA証明書(旧鍵)」と「新CA証明書(新鍵)」が共存します。ここで旧CA証明書を安易に削除すると、過去に発行した証明書の検証や失効確認に必要な情報が欠け、トラブルになります。
- 旧鍵で署名した証明書の署名検証には、旧CA証明書(公開鍵)が必要
- 過去の監査やログ解析で、発行当時のチェーンが参照されることがある
- CRL検証で旧CA証明書が参照されるケースがある
「新チェーンへ切り替わったから旧CA証明書は不要」という判断は危険です。少なくとも、旧チェーンの証明書が残っている間は、旧CA証明書・旧Root証明書・CRL公開を維持する前提で計画します。
トラブルシューティング:移行で起きやすい症状と切り分け
新Root配下で発行したはずなのに、クライアントでチェーンが通らない
- 新Root証明書がクライアントに配布されていない(GPO未適用、端末がオフライン、別ストアを参照している)
- 中間(SubCA)証明書の取得に失敗している(AIA到達不可、ファイル名変更、HTTP 404など)
- アプリが独自の信頼ストアを使っている(Java、OpenSSL、ネットワーク機器)
失効確認で失敗してTLS/認証が落ちる
- CDPのURLへ到達できない(名前解決、FW、プロキシ、分岐ネットワーク)
- CRLが期限切れ(特にオフラインRoot)
- CRLの公開場所は見えるが、ファイルが更新されていない(公開手順の抜け)
Windowsクライアントでは、certutil -verify -urlfetchでAIA/CDP取得と失効確認のどこが詰まっているかを可視化できます。まずは「どのURLに取りに行っているか」をログで把握するのが近道です。
既存システムだけが突然エラーになった(移行後しばらくして発生)
- 旧Root側でSubCA証明書を失効した/旧Rootを信頼ストアから外した
- 旧チェーンのCRL公開が止まり、期限切れになった
- 一部アプリが失効チェックを厳格化(Fail-Closed)している
既存証明書を温存する運用では、「旧チェーンのCRL公開をいつまで維持するか」「旧Rootをいつ撤去するか」を、証明書の最長有効期限(コード署名など)に合わせて明確に決めておく必要があります。
移行後の確認チェックリスト(最終確認)
| 確認項目 | 合格ライン | 補足 |
|---|---|---|
| 新規発行のテスト証明書 | 新Rootへチェーンし、検証OK | 代表的な用途(ServerAuth/ClientAuth)でそれぞれ試す |
| CRLの公開 | 新Root/新SubCAのCRLが取得でき、有効期限内 | オフラインRootは公開手順を文書化 |
| AIA/CDP到達性 | 拠点・VPN・社外端末など、想定する経路から取得できる | HTTP/LDAP/OCSPのいずれを使うかで確認範囲が変わる |
| クライアント配布 | 新Rootが信頼ストアに入り、GPO/MDMで継続配布できている | サーバー、VDI、キオスク等の例外を洗い出す |
| 旧チェーンの扱い | 旧Root/旧SubCAの維持期限・撤去手順が決まっている | 「失効させる日」を先に決めると事故が起きやすい。置き換え完了とセットで決める |
まとめ:SubCAは“更新で付け替え”できるが、既存証明書は計画的に扱う
Enterprise Subordinate CAを別Root CA配下へ移すことは、SubCAのCA証明書を更新し、新Rootで署名してもらうことで実現できます。ポイントは新しい鍵ペアで更新すること、そして更新前に発行した既存証明書は旧Rootへチェーンし続けるため、旧SubCA証明書の失効や旧Root撤去が既存システムへ直撃し得る点です。
「作り直さずに移行」は可能でも、「既存をそのまま維持しつつ旧階層を即撤去」は難しいのがPKIの現実です。共存期間を設けるか、置き換えを前提にするかを最初に決め、信頼ストア配布とCRL/AIAの到達性を軸に、段階的に移行を進めてください。

コメント