認証局 (CA) の証明書の鍵長を変更する方法

Last Update: feedback 共有

こんにちは。Windows Commercial Support Directory Services チームです。

今回は Active Directory 証明書 サービス (AD CS) で構築した認証局(CA) の CA 証明書の鍵長を変更する手順のご紹介です。


署名アルゴリズムと鍵長の確認

CA では署名アルゴリズムとして RSA と ECDSA を選択できます。それぞれの署名アルゴリズムによって選択可能な鍵長が異なりますのでご注意ください。

署名アルゴリズム 選択可能な鍵長の例 (bits)
RSA 2048, 4096
ECDSA 256, 384, 521

現在の署名アルゴリズムと鍵長は以下の手順で確認ができます。

  1. [Windows 管理ツール] より [証明機関] を開きます。

  2. [証明機関] - [<CA 名>] を右クリックして [プロパティ] をクリックします。

  3. [全般] タブにて、[CA 証明] の項目にある “証明書#<数字>” の一覧から数字が一番大きいものを選択して、[表示] をクリックします。

  4. CA 証明書の詳細タブより、[公開キー] の項目を確認します。例えば、RSA で鍵長 1024 Bits の場合は以下のような表示になっております。

ECDSA_P256 の場合は、以下のようになります。[公開キー] の項目で鍵長が、[公開キーのパラメーター] で署名アルゴリズムが表示されております。


CA 証明書の鍵長を変更する手順について

CA で利用されている署名アルゴリズムによって、鍵長の変更手順が少々異なります。

RSA の場合

RSA をご利用で鍵長を変更したい場合、例えば 2048 bits とする場合は以下のような手順となります。

  1. CAPolicy.inf ファイルを作成し、以下の内容を記述します。

    1
    2
    3
    4
    5
    [Version]
    Signature= "$Windows NT$"

    [Certsrv_Server]
    RenewalKeyLength=2048
  2. %systemroot% (既定は C:\Windows) に CAPolicy.inf を配置します

  3. CA 証明書の書き換えでキーペアの再作成を行います。

既定では CAPolicy.inf は存在しないため、通常は新規作成が必要ですが、もし構築時に作成しているなどして、すでに %systemroot% 配下に CAPolicy.inf というファイルが存在する場合には、そちらで [Certsrv_Server] のセクションに RenewalKeyLength を設定いただければ問題ございません。

ECDSA の場合

ECDSA の場合は、追加で CNGPublicKeyAlgorithm のレジストリ設定を、変更する鍵長のパラメーターに合わせて変更する必要があります。この点だけが RSA と異なります。

certutil -setreg ca\csp\CNGPublicKeyAlgorithm ECDSA_PXXX (XXX には RenewalKeyLength で指定する鍵長) とコマンドを実行することで CNGPublicKeyAlgorithm を書き換えることができます。
例えば 256 bits から 384 bits に変更を行う場合 (RenewalKeyLength=384 とする場合) 、以下のような手順となります。

  1. CAPolicy.inf ファイルを作成し、以下の内容を記述します。

    1
    2
    3
    4
    5
    [Version]
    Signature= "$Windows NT$"

    [Certsrv_Server]
    RenewalKeyLength=384
  2. %systemroot% (既定は C:\Windows) に CAPolicy.inf を配置します

  3. 以下のコマンドを実行して CNGPublicKeyAlgorithm のレジストリ設定を変更します。

    1
    certutil -setreg ca\csp\CNGPublicKeyAlgorithm ECDSA_P384
  4. CA 証明書の書き換えでキーペアの再作成を行います。

CNGPublicKeyAlgorithm のレジストリは以下のキー配下にあります。<CA 名>には構築されている CA の名前が入ります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA 名>\CSP

(例) エンタープライズ ルート CA の場合の CA 証明書の鍵長変更手順

エンタープライズ ルート CA で、RSA の CA 証明書の鍵長を 2048 bits とする場合を例に、具体的な手順を記載します。

  1. CA サーバーに管理者権限をもつユーザーでログオンします。

  2. エクスプローラーを開き、 %systemroot% (既定は C:\Windows)フォルダの配下に移動します。

  3. %systemroot% の下に、CAPolicy.inf ファイルが存在すれば、テキストエディターで開きます。(存在しない場合は、 CAPolicy.inf という名前のファイルを新規作成してください)

  4. CAPolicy.inf の [Certsrv_Server] セクションに RenewalKeyLength の設定を記入して保存します。

    1
    2
    3
    4
    5
    [Version]
    Signature= "$Windows NT$"

    [Certsrv_Server]
    RenewalKeyLength=2048
  5. [Windows 管理ツール] より [証明機関] を開きます。

  6. 画面の左ペインより [証明機関] - [<CA 名>] を右クリックして、[すべてのタスク] - [CA 証明書の書き換え] をクリックします。

  7. AD 証明書サービスを一時停止することを警告するメッセージが表示されら、[はい] をクリックします。

  8. [CA 証明書の書き換え] にて、キーペアの再作成の有無の選択肢の項目にて [はい] を選択し、[OK] をクリックします。

  9. Active Direcotry 証明書サービスが起動するまで待機します。

  10. サービスが起動したら、[証明機関] - [<CA 名>] を右クリックして [プロパティ] をクリックします。

  11. [全般] タブにて、[CA 証明] の項目にある “証明書#<数字>” の一覧から数字が一番大きいものを選択して、[表示] をクリックします。

  12. CA 証明書の詳細タブより、[公開キー] の項目を確認して、値が RSA (2048 Bits) ( RenewalKeyLength で指定した値) となっていることを確認します。

手順は以上となります。

※ ECDSA をご利用の場合は、手順 6. よりも前のタイミングで管理権限でコマンドプロンプトを起動し、certutil -setreg ca\csp\CNGPublicKeyAlgorithm ECDSA_PXXX (XXX には指定する鍵長) とコマンドを実行することになります。


CA 証明書の鍵長を変更する場合の影響について

鍵長を変更するため、鍵長変更後の新 CA 証明書では秘密鍵と公開鍵のキーペアが変更となります。
その結果、発行する証明書の信頼チェーン (※) の構成が変わってきてしまいますので、以下の場合、影響が出る可能性がございます。

  • 新旧どちらか片方の CA 証明書のみしか信頼されていない場合
    証明書の検証を行うクライアントやサーバーにて、新旧の CA 証明書を両方とも信頼する構成としていれば、基本的には特に影響は想定されません。
    一方で、CA 証明書の更新前もしくは更新後に発行された証明書のいずれかしか信頼されていない場合、その片方のみしか信頼できないとみなす構成となります。
    この場合、信頼できないほうの証明書を検証すると、証明書を利用した機能 (例えば、TLS 通信や証明書認証など) に影響が出ることになります。

  • サービスやアプリケーション側で、設定や実装として信頼する証明書を固定している場合
    ご利用のサービスやアプリケーションによっては、たとえ Windows OS の信頼されたルート証明機関のストアに新旧の CA 証明書を両方とも登録していたとしても、
    サービスやアプリケーション側で、設定や実装として信頼する証明書を固定している場合や、そもそも Windows OS の証明書ストアを参照していない場合もございます。
    そのため、Windows の観点からだけでなく、証明書の設定や構成変更について必要な作業をご利用のサービスやアプリケーションの観点からも確認いただくことをご検討ください。

(※) 信頼チェーンとは

例えば、あるルート証明機関 A の下位証明機関である B から発行された証明書 X について考えます。
証明書 X の正当性を検証する際に、発行元である証明機関 B へ辿っていき、さらに証明機関 B の上位証明機関である
証明機関 A へ辿っていきます。
この時、証明機関 A が信頼できるものであれば、証明書 X は信頼できると判断することができます。
この証明機関 A および B、X の繋がりのことを “信頼チェーン” と呼びます。

Windows OS の端末がある証明書を検証することを想定した時、検証する対象の証明書の信頼性を判断するためには、
信頼チェーンをたどっていき、最上位にあるルート証明書を信頼していたら([信頼されたルート証明機関] の
証明書ストアにインストールされていたら)、信頼できる証明書としてみなされます。
信頼チェーンを構成する際は、サブジェクトキー識別子(公開キーを一意に識別するための値)をもとに発行元を辿っていきます。

鍵長を変更すると、公開キーが変わることでこのサブジェクトキー識別子が変わってしまうため、鍵長を変更前に発行した証明書と、鍵長変更後に発行した証明書はそれぞれ異なる信頼チェーンを構成することになります。

※CA 証明書の書き換えについては 証明機関の CA 証明書の書き換えについて の内容もご参照ください。
鍵長を変更する場合、キーペア自体が変更となるため、キーペアの書き換えは [はい] を選択する必要があります。


参考

選択できる鍵長や CAPolicy.inf ファイルの記載については、以下の公開情報をご参照ください。

PKI design considerations using Active Directory Certificate Services

Certification Authority Guidance

CAPolicy.inf Syntax

Prepare the CAPolicy.inf