次の方法で共有


証明書の検証で脆弱な暗号化アルゴリズムを無効にする

この記事では、Windows および Windows Server のポリシーを使用して脆弱な暗号化アルゴリズムを無効にする方法について説明します。 これらのポリシーは X.509 証明書の検証にのみ適用されます。Windows が TLS 接続、コード署名、およびその他のセキュリティ シナリオについてデジタル証明書をチェックする場合。

MD5 や SHA1 などの古いアルゴリズムや、セキュリティで保護するには短すぎる RSA キーを使用する証明書を拒否するように Windows を構成できます。 脆弱な証明書を拒否すると、セキュリティ侵害や偽造が容易になる可能性のある証明書から環境を保護できます。 これらのポリシーを使用すると、次のことができます。

  • 各ポリシーを個別にオプトインまたはオプトアウトします。

  • (他のポリシーとは無関係に) ポリシーごとにログ記録を有効にします。 既定では、ログ記録はオフになっています。

  • 無効な証明書をコピーする場所を指定します。

  • ハッシュ アルゴリズムと非対称アルゴリズムの両方のポリシーを構成します。

ポリシー構文

暗号化アルゴリズム ポリシーは Windows レジストリで定義され、レジストリ エディター または certutilを使用して設定されます。 管理者は、次のレジストリ キーでポリシーを設定します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config

ポリシーは、次の構文を使用して定義されます。

Weak<CryptoAlg><ConfigType><ValueType>

CryptoAlgConfigType、および ValueType は、すべてのポリシー名に存在します。

たとえば、WeakMD5ThirdPartyFlags または WeakRSAAllMinBitLength です。

ポリシーごとに、次の値を設定できます。

  • CryptoAlg 指定できる値:

    • Md5 - MD5 ハッシュ アルゴリズム。
    • Sha1 - SHA1 ハッシュ アルゴリズム。
    • Rsa - RSA 非対称アルゴリズム。
    • Dsa - DSA 非対称アルゴリズム。
    • Ecdsa - ECDSA 非対称アルゴリズム。
  • ConfigType 指定できる値:

    • ThirdParty - ポリシーは、サード パーティのルートの証明書にのみ適用されます。
    • All - ポリシーは、エンタープライズ ルートの下でも、すべての証明書に適用されます。
  • ValueType 指定できる値:

    • フラグ - REG_DWORD ハッシュ アルゴリズムを無効にするか、キーの最小長を有効にするように設定できるデータ型。 フラグの計算方法の詳細については、次のセクションで説明します。

    • MinBitLength - REG_DWORD 最小公開キーの長さをビット単位で指定するデータ型。 MinBitLength は、キー アルゴリズム ポリシーにのみ適用されます。 最小キー長の 10 進値としてビット単位で指定します。 たとえば、1024 は 1,024 ビットの最小キー長を表します。

    • AfterTime - REG_BINARY 8 バイトの FILETIME を含むデータ型。 この時刻より前のタイムスタンプ付きファイルでは、脆弱な暗号化アルゴリズムのチェックが無効になっています。 この構成値は、タイムスタンプ チェーンには適用されません。

    • Sha256Allow - REG_SZ または REG_MULTI_SZ、ASCII_HEX形式の証明書 SHA256 拇印のリストを含み、明示的に許可する弱い証明書を識別するデータ型です。 文字列内のASCII_HEX以外の文字はスキップされ、埋め込みスペースを使用できます。

値型フラグ

脆弱な暗号アルゴリズム ポリシーのフラグを定義するには、次の REG_DWORD 値を使用できます。 これらのフラグは、暗号化アルゴリズム ポリシーの特定の動作を有効または無効にするために使用されます。

ビットごとの OR 演算を使用してこれらのフラグを組み合わせて、複数の動作を表す複合フラグ値を作成できます。

たとえば、ログ記録を有効にし、すべての EKU のアルゴリズムを無効にするには、 CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG フラグと CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG フラグを組み合わせることができます。 これらのフラグを組み合わせるには、値を 0x80010004 ( 0x80000000 | 0x00010000 | 0x00000004) に設定します。

次のセクションを展開して、脆弱な暗号アルゴリズム ポリシーに設定できるフラグの説明を表示します。

脆弱な暗号化設定を有効にする

CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG フラグは、特定の暗号アルゴリズム ポリシーの脆弱な暗号アルゴリズム設定を有効または無効にするために使用されます。 このフラグは、証明書チェーン構築プロセスでの弱いアルゴリズムの処理方法を制御するために不可欠です。

16 進数の値: 0x80000000

CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG (0x80000000) フラグがポリシーの動作にどのように影響するかを示す例をいくつか次に示します。

  • 特定の ポリシーに対してこのフラグがWeak<CryptoAlg><ConfigType>Flags場合、そのポリシーの他のすべてのフラグとレジストリ値は無視されます。 たとえば、 WeakMD5ThirdPartyFlags に対して他のフラグを構成しても、 0x80000000設定しない場合、それらの設定は無効になります。

  • 管理者が特定の ポリシーにWeak<CryptoAlg><ConfigType>Flagsすると、レジストリで定義されているポリシー設定によって、その暗号化アルゴリズムと構成の種類に対する既定のオペレーティング システムの動作がオーバーライドされます。

  • Weak<CryptoAlg>AllFlagsポリシーでフラグが設定されている場合、結果のWeak<CryptoAlg>ThirdPartyFlagsは、Weak<CryptoAlg>ThirdPartyFlagsWeak<CryptoAlg>AllFlagsの両方で定義された値の組み合わせになりますが、ログ関連のフラグは結合されません。 たとえば、有効なサード パーティのフラグは次のように計算されます。
    ThirdPartyFlags |= AllFlags & ~(CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG | CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG);

  • 時間ベースおよびキー長の設定の場合、結果の Weak<CryptoAlg>ThirdPartyAfterTime は、 Weak<CryptoAlg>AllAfterTimeWeak<CryptoAlg>ThirdPartyAfterTime の間の最も早い値になります (両方が定義され、0 以外の場合)。 同様に、結果の Weak<KeyCryptoAlg>ThirdPartyMinBitLength は、 Weak<KeyCryptoAlg>AllMinBitLengthWeak<KeyCryptoAlg>ThirdPartyMinBitLengthの間の最大値です。

これらの例は、フラグによってカスタム ポリシー設定が適用されるかどうかを決定する方法を示しています。 この例では、"All" 構成と "ThirdParty" 構成の両方が定義されている場合に、結合された値がどのように計算されるかについても説明します。

ログ記録を有効にする

このフラグを設定すると、証明書チェーンの構築プロセス中に識別される脆弱な証明書は、 CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME レジストリ値で指定されたディレクトリに記録されます。 ログ記録を使用すると、管理者はセキュリティ リスクを引き起こす可能性がある脆弱な証明書を確認して対処できます。

16 進数の値: 0x00000004

監査のみのログ記録

CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG フラグを設定すると、弱い署名エラーのみがログに記録され、チェーン構築エラーは返されません。 このモードでは、弱い署名エラーは返されず、チェーン構築プロセスに影響を与えずに弱い証明書がログに記録される監査専用モードが可能になります。

16 進数の値: 0x00000008

すべての EKU を無効にする

CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG フラグは、すべての拡張キー使用法 (EKU) のポリシーに対応するアルゴリズムを無効にするために使用されます。 つまり、指定された暗号アルゴリズムは、EKU に関係なく、どの証明書にも使用されません。

16 進数の値: 0x00010000

Opt-In サーバー認証 EKU を無効にする

CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG フラグは、サーバー認証 EKU のポリシーに対応するアルゴリズムを無効にするために使用されますが、CERT_CHAIN_OPT_IN_WEAK_SIGNATURE設定を使用してこの変更をオプトインするアプリケーションに対してのみ使用されます。 弱い署名ポリシーを使用すると、管理者は影響を受けるアプリケーションをより細かく制御できます。

16 進数の値: 0x00040000

無効なサーバー認証 EKU

CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG フラグは、サーバー認証 EKU のポリシーに対応するアルゴリズムを無効にするために使用されます。 つまり、アプリケーションがオプトインするかどうかに関係なく、サーバー認証 EKU を使用する証明書には、指定された暗号化アルゴリズムが使用されません。

16 進数の値: 0x00100000

コード署名 EKU を無効にする

CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG フラグは、コード署名拡張キー使用法 (EKU) のポリシーに対応するアルゴリズムを無効にするために使用されます。 つまり、指定された暗号アルゴリズムは、コード署名証明書には使用されません。

16 進数の値: 0x00400000

Web からダウンロードしたバイナリのコード署名 EKU を無効にする

CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG フラグは、バイナリが Web からダウンロードされた場合にのみ、コード署名 EKU のポリシーに対応するアルゴリズムを無効にするために使用されます。

16 進数の値: 0x00800000

タイムスタンプ EKUs を無効にする

CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG フラグは、タイムスタンプ拡張キー使用法 (EKU) のポリシーに対応するアルゴリズムを無効にするために使用されます。 つまり、指定された暗号アルゴリズムはタイムスタンプ証明書には使用されません。

16 進数の値: 0x04000000

Web からダウンロードされたバイナリのタイムスタンプ EKU を無効にする

CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG フラグは、タイムスタンプ EKU のポリシーに対応するアルゴリズムを無効にするために使用されますが、バイナリが Web からダウンロードされる場合にのみ使用されます。

16 進数の値: 0x08000000

[前提条件]

脆弱な暗号アルゴリズム ポリシーを構成するには、次の前提条件が必要です。

  • レジストリ設定を変更するためのローカル管理アクセス。

  • (省略可能)弱い証明書検出のログ記録を有効にする場合は、指定されたログ ディレクトリ。

また、ポリシーを構成するには、次の情報を準備する必要があります。

  • 暗号化アルゴリズムの名前 (MD5、SHA256、RSA、DSA、ECDSA など)。

  • 非対称アルゴリズムの場合、必要な最小キー サイズ (RSA の場合は 1,024 ビットなど)。

  • ポリシーがサードパーティのルートCAにチェーンする証明書に適用されるべきか、またはすべての証明書に適用されるべきか。

  • ポリシー チェックが無効になる前の時刻 (タイムスタンプ付きの署名付きバイナリで使用されるコード署名証明書の場合)。

  • ポリシーが適用される証明書または拡張キー使用法 (EKU) の種類を次に示します。

    • すべての証明書

    • サーバー認証 EKU

    • コード署名 EKU

    • タイムスタンプ EKU

  • ポリシーが Web からダウンロードされたバイナリにのみ適用されるか、すべてのバイナリに適用されるか。

  • SHA2 拇印によって識別される、特定のコード署名証明書またはタイム スタンプ証明書の例外。

脆弱な暗号アルゴリズム ポリシーを構成する

脆弱な暗号アルゴリズム ポリシーを構成するには、 certutil コマンドライン ツールを使用するか、Windows レジストリを直接変更します。 ニーズに最も適した方法を選択します。

脆弱な暗号アルゴリズム ポリシーを構成するには、 certutil -setreg chain コマンドライン ツールを使用できます。 このツールを使用すると、脆弱な暗号アルゴリズム ポリシー設定を表示、構成、および削除できます。 certutil コマンドライン ツールの詳細については、certutil を参照してください。

脆弱な暗号アルゴリズム ポリシーを構成するには、次の手順に従います。

  1. ポリシー構文 」セクションで説明されているフラグと値を使用して、無効にする暗号アルゴリズムと構成の種類 (サード パーティまたはすべてなど) を決定します。 ビットごとの OR 演算を実行して、必要に応じてフラグを結合し、結果の値を記録します。

  2. 管理特権でコマンド プロンプトを開きます。

  3. 新しい弱い暗号アルゴリズム フラグ ベースのポリシーを作成するには、次のコマンドを使用します。

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>Flags <value>
    

    <CryptoAlg><ConfigType>、および<value>をポリシーの適切な値に置き換えます。

    たとえば、サードパーティのルート CA のすべての SSL サーバー認証証明書に対して MD5 を無効にするには、次のコマンドを使用できます。

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80100000
    
  4. 新しい非対称アルゴリズム ポリシーを作成するには、次のコマンドを使用します。

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>MinBitLength <value>
    

    <CryptoAlg><ConfigType>、および<value>をポリシーの適切な値に置き換えます。

    たとえば、サードパーティのルート CA で RSA 1024 を無効にするには、次のコマンドを使用できます。

    certutil -setreg chain\WeakRSAThirdPartyMinBitLength 1024
    
  5. 新しい時間ベースのポリシーを作成するには、次のコマンドを使用します。

    certutil -setreg chain\Weak<CryptoAlg><ConfigType>AfterTime <value>
    

    <CryptoAlg><ConfigType>、および<value>をポリシーの適切な値に置き換えます。

    たとえば、2009 年 3 月 1 日より前にサード パーティのルート CA のすべての SSL サーバー認証証明書に対して MD5 を無効にするには、次のコマンドを使用できます。

    certutil -setreg chain\WeakMD5ThirdPartyAfterTime @03/01/2009
    

構成済みのポリシーを表示する

現在構成されている脆弱な暗号アルゴリズム ポリシーを表示するには、 certutil コマンドライン ツールまたは Windows レジストリ エディターを使用します。 ニーズに最も適した方法を選択します。

certutil コマンド ライン ツールを使用して現在構成されている脆弱な暗号アルゴリズム ポリシーを表示するには、次の手順に従います。

  1. 管理特権でコマンド プロンプトを開きます。

  2. 脆弱な暗号化アルゴリズムの既定のオペレーティング システムの動作を確認するには、次のコマンドを実行します。

    certutil -getreg chain\default
    
  3. 現在構成されている脆弱な暗号アルゴリズム ポリシーを表示するには、次のコマンドを実行します。

    certutil -getreg chain\Weak<CryptoAlg><ConfigType>Flags
    

    <CryptoAlg><ConfigType>をポリシーの適切な値に置き換えます。

    たとえば、MD5 サード パーティのフラグを表示するには、次のコマンドを使用できます。

    certutil -getreg chain\WeakMD5ThirdPartyFlags
    
  4. 構成されているすべての弱い暗号アルゴリズム ポリシーを表示するには、次のコマンドを実行します。

    certutil -getreg chain
    

ログ記録を有効にする

Windows の Weak Crypto フレームワークには、脆弱な暗号化証明書をログに記録するためのメカニズムが用意されています。 このメカニズムにより、管理者は構成された設定に従って、脆弱と見なされる証明書を監視してアクションを実行できます。

certutilコマンドライン ツールを使用するか、Windows レジストリを直接変更して、ログ記録を有効にすることができます。 ニーズに最も適した方法を選択します。

certutil コマンド ライン ツールを使用して脆弱な暗号化証明書のログ記録を有効にするには、次の手順に従います。

  1. 弱い証明書が記録されるログ ディレクトリを作成します。 たとえば、 C:\Log にディレクトリを作成し、適切なアクセス許可があることを確認します。

  2. ログ ディレクトリを設定するには、次のコマンドを使用します。

    certutil -setreg chain\WeakSignatureLogDir c:\log
    
  3. ログ記録を有効にするには、既存の弱い暗号化ポリシーのログ フラグを設定します。 CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG (0x00000004) またはCERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG (0x00000008) をポリシーの既存のフラグと組み合わせます。 たとえば、すべての EKU 弱い MD5 サード パーティ証明書のログ記録を有効にするには、次のコマンドを使用できます。

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80010004