ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Windows2016のADCSで作成した証明書テンプレートの有効期限が短い

インフラエンジニアの仕事をしていて、WEBサーバなどに接続する場合に、信頼されないルート証明書のWEB証明書を使っている場合、証明書の警告画面が出ることがあります。それを回避したい場合などに、認証機関を構築することになりますが、Windows Server 2016にて、証明書を発行したい場合は、ローカル認証局を構築することになります。


ローカル認証局(ADCS)を構築する場合、スタンドアロンCAとエンタープライズCAが選べますが、便宜性を考慮すると、当然、エンタープライズCAを選択することになります。


そして、組織にエンタープライズCAを導入する場合、証明機関の有効期限に関して、知識が必要です。これを知らないと間違いなくトラブルを引き起こしますというか、ある意味、トラップなので注意が必要です。


以前もマイクロソフトのSEに教えてもらったことがあるんですが、証明書の有効期限を短くしている場合、担当者が変わるタイミングでしっかりと引継ぎをしないとトラブルの原因になるそうです。某大手企業でも大トラブルになったそうで・・・ゾッとしますよね。


Windows Server 2016にて、エンタープライズCAをインストール後、サーバー証明書をテンプレートから作成し、例えば有効期限を「10年」で作成し、証明書を発行しても、サーバー証明書の有効期限は「2年」で発行されます。
※上記はルートCA(発行CA)の有効期限を10年に設定。


証明書テンプレートの有効期限を「10年」に設定したのに、「2年」で発行されるのには理由があります。


「エーっ、確かにサーバー証明書を10年で設定したはずなのに、どうして2年になるの???知ルート証明書の有効期限も10年だし・・・。」


実は、エンタープライズCAにおいて、証明書の有効期限を決める要素は以下の3つがあり、その中の最小値が適用されます。

①ルートCAの有効期限
②証明書テンプレートの有効期限
③CAがインストールされたサーバーのレジストリ値(デフォルト2年)


今回、③が原因で「2年」が適用されています。つまり、デフォルトではレジストリで設定されている値が「2年」であるということです。


場所は、レジストリエディタを開き、以下の場所に移動します。

>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\CertSvc\Configuration\


右画面の [ValidityPeriodUnits]の値をデフォルト値から任意の値に変更します。


変更後は、証明書サービスをWindows PowerShell コマンドを実行することで再起動できます。

>restart-service certsvc

つまり、証明機関の有効期限とレジストリ値は同一にするのがいいと考えられます。これ、Windows Server 2003もなんですが、レジストリ変更が必要な仕様ってなんとかしてほしいですね。間違いなくトラブルの原因になりますから・・・。


近々、Windows Server 2019でもエンタープライズCAを入れてみて、どういった動作になるかはチェックしてみようと思います。そろそろ現場でも2019が出現しているころだと思いますので。