証明書の署名ハッシュ アルゴリズムを SHA-2 に変更する方法

Last Update: feedback 共有

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

今回は Active Directory 証明書 サービス (AD CS) で構築した認証局(CA) が発行する
証明書の署名ハッシュアルゴリズムを SHA-1 から SHA-2 に変更する方法についてご紹介となります。


署名ハッシュ アルゴリズムを SHA-1 から SHA-2 に変更できるか確認する

SHA-2 の署名を利用するには、 SHA-2 に対応した暗号化プロバイダー(Microsoft Software Key Storage Provider)が CA で利用されている必要があります。
CA が現在利用している暗号化プロバイダーと署名ハッシュアルゴリズムは以下の手順で確認できます。

■ 確認手順:

  1. [証明機関] 管理コンソールを開きます。
  2. <CA名> を右クリックし、[プロパティ] を選択します。
  3. [全般] タブが選択されていることを確認し、”暗号化の設定” にて “プロバイダー” と “ハッシュ アルゴリズム”を確認します。

※ この画像の例では、暗号化プロバイダーは Microsoft Strong Cryptographic Provider、ハッシュ アルゴリズムは SHA-1 となっており、このプロバイダーは SHA-2 に対応しておりません。

もし SHA-2 に対応した暗号化プロバイダーではない場合は、先に ご利用の暗号化プロバイダーが CSP の場合について の手順に従って、SHA-2 に対応した暗号化プロバイダー (Microsoft Software Key Storage Provider) に変更してから SHA-2 への変更を実施ください。

もしサードパーティーベンダーの暗号化プロバイダーをご利用の場合は、サードパーティーベンダーに対応状況などご確認ください。

補足: 暗号化プロバイダーについて

Windows では暗号化アルゴリズムやキー生成といった関数を実装する暗号化プロバイダーと呼ばれるモジュールがあり、大きく分けて、Cryptographic Service Provider (CSP) と Key Storage Provider (KSP) の 2 種類が提供されています。
これらのうち、KSP が SHA-2 に対応します。
Windows 既定では、KSP は主に Microsoft Software Key Storage Provider と Microsoft Smart Card Key Storage Provider がありますが、
Microsoft Smart Card Key Storage Provider は基本的にスマート カードで利用される暗号化 プロバイダーとなります。

参考:


SHA-2 への変更手順

ここでは、 CA から発行される証明書の署名ハッシュ アルゴリズムの変更手順と、CA 証明書の署名ハッシュ アルゴリズムを変更する手順を記載します。

署名アルゴリズムを SHA-2 に変更する

SHA256 に変更することを例に以下に変更手順を記載します。

  1. CA に管理者ユーザーでログオンします。
  2. コマンド プロンプトを管理者権限で起動します。
  3. 下記コマンドを実行します。
    1
    certutil -setreg ca\csp\CNGHashAlgorithm SHA256
  4. 下記コマンドを実行し、証明書サービスを再起動し、変更した設定を反映させます。
    1
    net stop certsvc && net start certsvc

サービス起動後、署名ハッシュ アルゴリズムを SHA-1 から SHA-2 に変更できるか確認する の確認手順にて、”ハッシュ アルゴリズム” が SHA256 となっていることをご確認ください。

SHA-1 署名の CA 証明書を SHA-2 署名に書き換え

手順実施後に発行される証明書から、署名ハッシュ アルゴリズムが SHA-2 となるため、CA 証明書の署名ハッシュ アルゴリズムも、CA 証明書の書き換えを行わない限り SHA-1 のままとなります。

※上記画像は、署名アルゴリズムを SHA-2 に変更するの手順実施直後のプロパティ画面となりますが、証明書#数字で一番数字の大きい証明書を選択して、[証明書の表示] から証明書を確認すると、署名ハッシュ アルゴリズムは sha1 のままであることが確認できます。

もし CA 証明書の署名を SHA-2 とする場合は、CA 証明書の更新が必要です。
ルート CA の場合は、以下の手順で CA 証明書を更新することで、
自身のルート CA 証明書の署名ハッシュ アルゴリズムを SHA-2 とすることができます。

  1. 画面の左ペインより、[証明機関 (ローカル)] - [<CA 名>] を右クリックして [すべてのタスク] - [CA 証明書の書き換え] をクリックします。
  2. AD 証明書サービスを一時停止されることを警告するメッセージが表示されたら、[はい] をクリックします。
  3. [CA 証明書の書き換え] にてキーペアの書き換えの有無を確認するメッセージが表示されたら、[ いいえ ] を選択して [OK] をクリックします。
  4. CA 証明書の更新が完了したら、Active Directory 証明書サービスが起動します。

もし下位 CA 証明書の署名ハッシュ アルゴリズムを SHA-2 とする場合、下位 CA の CA 証明書に署名をするのは上位 CA のため、
上位 CA を SHA-2 に変更し、下位 CA 証明書の更新行うことで下位 CA 証明書の署名ハッシュ アルゴリズムを SHA-2 とすることができます 。

※CA 証明書の書き換えについては 証明機関の CA 証明書の書き換えについて の内容もご参照ください。
今回は CA 証明書の署名の書き換えを目的としているため、キーペアの書き換えは [いいえ] を選択しています。

署名ハッシュ アルゴリズムを変更する場合の影響について

現在サポートされている Windows OS では SHA-2 に対応しておりますので、OS としては基本的に SHA-2 変更による影響は想定されません。

一方で、サービスやアプリケーションといった証明書を利用する機能によっては、SHA-2 で署名された使用する証明書ための設定や構成の変更が必要となる場合もございます。
特に、CA 証明書を SHA-2 に書き換える更新を行った場合、キーペアは変わらないものの、SHA-2 更新後の新たな証明書 (別の拇印を持つ CA 証明書) が作成されることになります。
そのため、使用する証明書の更新や差し替え手順など、ご利用のサービス・アプリケーションといった製品観点からも必要な作業を確認いただくこと、ご検討ください。


ご利用の暗号化プロバイダーが CSP の場合について

もし CA が CryptoAPI Cryptographic Service Providers ( CSP ) の一覧にある暗号化プロバイダーをご利用の場合は、Software Key Storage Provider ( KSP ) へ移行いただく必要がございます。

CSP から KSP への移行は以下の公開情報にまとまっておりますので、ご参照いただければ幸いです。Optional の手順も実行することで、CA 証明書の署名ハッシュ アルゴリズムを SHA-2 にすることもできます。

Migrating a Certification Authority Key from a Cryptographic Service Provider (CSP) to a Key Storage Provider (KSP)

※証明機関の暗号化プロバイダーを CSP から KSP へ移行する作業において、発行済みの証明書に対する影響はございません。

上記公開情報をもとに、日本語での手順を以下におまとめしておりますのでご参考になれば幸いです。

留意事項

  • 各手順に記載の、[以下のコマンドを実行] という項目に関しては、管理者権限で PowerShell を開き、実行を前提としております。
    (スタートメニューをクリックし、[Windows PowerShell] を右クリックし、[管理者として実行] を選択します)
  • SHA-2 に対応するための変更後の暗号プロバイダーは、 “Microsoft Software Key Storage Provider” を利用する前提で記載しております。
  • 保存するファイル名やフォルダは暫定的に名前を記載しておりますが、お客様にてご変更頂いても問題ございません。

手順

(1) CA データベース、秘密キー付き CA 証明書、レジストリのバックアップ

本手順では、切戻しを想定して、暗号プロバイダーの変更作業に必要な証明書のバックアップに加え、CA データベース、レジストリについてもバックアップ対象としております。

  1. 事前に作業ディレクトリを作成します。ここでは、C:\ 直下に、SHA-1 という名前のフォルダを作成しております。

  2. 以下のコマンドを実行し、CA データベース、秘密キー付き CA 証明書をバックアップします。

    1
    Backup-CARoleService -path "C:\SHA-1"
  3. 以下のコマンドを実行し、CA 関連のレジストリをバックアップします。

    1
    reg export "HKLM\SYSTEM\CurrentControlSet\services\CertSvc C:\SHA-1\CAreg.reg"

(2) 暗号プロバイダーの変更手順

事前に、前述の手順でバックアップした以下のファイルを確認しておきます。

1
2
C:\SHA-1\ 直下:
<CA 名>.p12

-手順

  1. 以下のコマンドを実行し、CA サービスを停止します。

    1
    Stop-service certsvc
  2. 以下のコマンドを実行して CA 証明書の詳細を取得し、<Cert ハッシュ> の値を記録しておきます。後述の手順で必要となります。

    1
    Certutil -store my <CA 名>

<出力結果の例>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
================ 証明書 0 ================
シリアル番号:26e3aa770841989248259e2db7b183cb
発行者:CN=CorpRootCA, DC=Contoso, DC=com
この日以降: 2014/05/09 13:18
この日以前: 2019/05/09 13:18
サブジェクト: CN=CorpSubCA, DC=Contoso, DC=com
証明書テンプレート名 (証明書の種類):SubCA
CA バージョン:V1.1
署名は公開キーと一致します
ルート証明書:サブジェクトと発行者は一致します
テンプレート:SubCA、下位の証明機関
Cert ハッシュ (SHA-1): f3 3e f1 bc c5 82 7a b2 a6 0b 15 c1 f6 82 22 09 8e c3 d3 d2 ★<<<<<<<<<<<<<<<こちらをメモします。
キー コンテナー = CorpSubCA
一意なコンテナー名: cd00cf78cfae801b6116617b93290d1d_be779d88-d7da-4fd3-8acb-a6daafc87e9f
プロバイダー = Microsoft Strong Cryptographic Provider
署名テストに合格しました
  1. 以下のコマンドを実行し、既存の暗号プロバイダー設定が紐付いた秘密キーを削除します。

    1
    2
    3
    Cd cert:\localmachine\my

    Del -deletekey "<Cert ハッシュ>"
  2. 以下のコマンドを実行し、暗号プロバイダーを指定し、秘密キー付き CA 証明書をインポートします。

    1
    certutil -csp "Microsoft Software Key Storage Provider" -importpfx "C:\SHA-1\<CA 名>.p12

    ** [PFX パスワードの入力] では、何も入力せずに Enter キーを押下します。

  3. 以下のコマンドを実行し、一度エクスポートします。

    1
    certutil -exportpfx my "<CA 名>" C:\SHA-1\export.pfx

    ** パスワードを決めて入力します。

  4. 以下のコマンドを実行し、復元を行うために再度インポートします。パスワードを聞かれますので、手順 4 で入力したパスワードを記載します。

    1
    certutil -restorekey C:\SHA-1\export.pfx
  5. 以下のコマンドを実行し、レジストリ設定を追加・変更します。

  • [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<CA 名>\CSP] への設定
    1
    2
    3
    4
    certutil -setreg ca\csp\ProviderType 0
    certutil -setreg ca\csp\Provider "Microsoft Software Key Storage Provider"
    certutil -setreg ca\csp\CNGPublicKeyAlgorithm RSA
    certutil -setreg ca\csp\CNGHashAlgorithm SHA256
  • [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<CA 名>\EncryptionCSP] への設定
    1
    2
    3
    4
    5
    certutil -setreg ca\EncryptionCSP\ProviderType 0
    certutil -setreg ca\EncryptionCSP\Provider "Microsoft Software Key Storage Provider"
    certutil -setreg ca\EncryptionCSP\CNGPublicKeyAlgorithm RSA
    certutil -setreg ca\EncryptionCSP\CNGEncryptionAlgorithm 3DES
    certutil -setreg ca\EncryptionCSP\SymmetricKeySize 168
  1. 以下のコマンドを実行し、CA サービスを開始します。
    1
    Start-service certsvc

(3) 変更の確認手順

  1. 証明機関管理コンソールを開きます。

  2. 以下のように展開し、<CA 名> を右クリックし、プロパティを開きます。

  3. [全般] タブの [暗号化の設定] に以下のように記載されていることを確認します。

    1
    2
    プロバイダー: Microsoft Software Key Storage Provider
    ハッシュ アルゴリズム: SHA256
  4. 以下のコマンドを実行します。

    1
    2
    Certutil -ping
    正常な応答: "CertUtil: - CRL コマンドは正常に完了しました。"
  5. 以下のコマンドを実行します。

    1
    Certutil -store my <CA 名>

    正常な応答には "Provider = Microsoft Software Key Storage Provider" という行が含まれます。

補足:切戻し手順について

CA 証明書の再インポートという影響度の高い作業であるため、万が一問題が発生した場合の切戻し手順を以下に記載致します。

  1. 以下のコマンドを実行し、CA サービスを停止します。

    1
    Stop-service certsvc
  2. 以下のコマンドを実行し、バックアップ データをリストアします。

    1
    certutil -restore -f C:\SHA-1

    ** C:\SHA-1\Database フォルダにデータベースのバックアップ データがあることが前提です。

  3. レジストリ エディタを開き、以下のサブ キーを選択し、右クリックより削除します。

    1
    2
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA 名>\CSP]
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA 名>\EncryptionCSP]
  4. C:\SHA-1\ 直下にある、CAreg.reg をダブルクリックし、[はい] を選択し、完了しましたら [OK] ボタンをクリックします。

  5. 以下のコマンドを実行し、CA サービスを開始します。

    1
    Start-service certsvc
  6. 最後に、以下のコマンドを実行し、CRLを再公開します。

    1
    certutil -crl

参考

PKI design considerations using Active Directory Certificate Services

Certification Authority Guidance

Migrating your Certification Authority Hashing Algorithm from SHA1 to SHA2