Partilhar via


Desativar algoritmos criptográficos fracos na validação de certificados

Este artigo descreve como desativar algoritmos criptográficos fracos usando políticas no Windows e no Windows Server. Essas políticas só se aplicam à validação de certificado X.509 - quando o Windows verifica certificados digitais para conexões TLS, assinatura de código e outros cenários de segurança.

Você pode configurar o Windows para rejeitar certificados que usam algoritmos desatualizados, como MD5 e SHA1, ou chaves RSA que são muito curtas para serem seguras. A rejeição de certificados fracos ajuda a proteger seu ambiente contra certificados que podem ser facilmente comprometidos ou falsificados. Usando essas políticas, você pode:

  • Ativar ou desativar cada política de forma independente.

  • Ative o registo de eventos para cada política (independentemente de outras políticas). O registro em log está desativado por padrão.

  • Especifique um local para o qual os certificados desativados são copiados.

  • Configure políticas para algoritmos de hash e algoritmos assimétricos.

Sintaxe da política

A política de algoritmo criptográfico é definida no Registro do Windows e definida usando o Editor do Registro ou certutil. O administrador define a política na seguinte chave do Registro:

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

As políticas são definidas usando a seguinte sintaxe:

Weak<CryptoAlg><ConfigType><ValueType>

CryptoAlg, ConfigTypee ValueType estão presentes em todos os nomes de políticas.

Por exemplo, WeakMD5ThirdPartyFlags ou WeakRSAAllMinBitLength.

Para cada política, os seguintes valores podem ser definidos:

  • CryptoAlg Valores possíveis:

    • Md5 - Algoritmo de hash MD5.
    • Sha1 - Algoritmo de hash SHA1.
    • Rsa - Algoritmo assimétrico RSA.
    • Dsa - Algoritmo assimétrico DSA.
    • Ecdsa - Algoritmo assimétrico ECDSA.
  • ConfigType Valores possíveis:

    • ThirdParty - A política só é aplicada a certificados de raízes de terceiros.
    • Tudo - A política é aplicada a todos os certificados, mesmo sob as raízes da empresa.
  • ValueType Valores possíveis:

    • Bandeiras - REG_DWORD tipo de dados que pode ser definido para desativar o algoritmo de hash ou habilitar um comprimento mínimo de chave. Um detalhamento de como calcular as bandeiras é fornecido na próxima seção.

    • MinBitLength - REG_DWORD tipo de dados que especifica o comprimento mínimo da chave pública em bits. MinBitLength só é aplicável à política de algoritmos chave. Especificado como um valor decimal do comprimento mínimo da chave em bits. Por exemplo, 1024 representa um comprimento mínimo de chave de 1.024 bits.

    • AfterTime - REG_BINARY tipo de dados que contém um FILETIME de 8 bytes. A verificação de algoritmo criptográfico fraco é desativada para ficheiros marcados com carimbo de data e hora antes dessa data. Esse valor de configuração não é aplicável a cadeias de carimbo de data/hora.

    • Sha256Permitir - REG_SZ ou REG_MULTI_SZ tipo de dados que contém a lista de impressões digitais SHA256 dos certificados (no formato ASCII_HEX) identificando certificados fracos que devem ser explicitamente permitidos. Caracteres não ASCII_HEX na cadeia de caracteres são ignorados, o que permite espaços incorporados.

Sinalizadores de tipo de valor

Para definir os sinalizadores para uma política de algoritmo criptográfico fraca, você pode usar os seguintes REG_DWORD valores. Esses sinalizadores são usados para habilitar ou desabilitar comportamentos específicos para as políticas de algoritmo criptográfico.

Você pode combinar esses sinalizadores usando uma operação OR bit a bit para criar um valor de sinalizador composto que representa vários comportamentos.

Por exemplo, para ativar o registo e desativar o algoritmo para todos os EKUs, pode combinar os sinalizadores CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG e CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG. Para combinar esses sinalizadores, você definiria o valor como 0x80010004 (que é 0x80000000 | 0x00010000 | 0x00000004).

Expanda as seções a seguir para ver uma descrição dos sinalizadores que podem ser definidos para políticas de algoritmo criptográfico fraco:

Ativar configurações criptográficas fracas

O CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG sinalizador é usado para habilitar ou desabilitar configurações fracas de algoritmo criptográfico para uma política de algoritmo criptográfico específica. Esse sinalizador é essencial para controlar como algoritmos fracos são manipulados no processo de construção da cadeia de certificados.

Valor hexadecimal: 0x80000000

Aqui estão alguns exemplos para ilustrar como o sinalizador CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG (0x80000000) afeta o comportamento da política.

  • Se esse sinalizador não estiver definido para uma determinada Weak<CryptoAlg><ConfigType>Flags política, todos os outros sinalizadores e valores do Registro para essa política serão ignorados. Por exemplo, se você configurar outros sinalizadores para WeakMD5ThirdPartyFlags mas não definir 0x80000000, essas configurações não terão efeito.

  • Quando um administrador define esse sinalizador para uma política específica Weak<CryptoAlg><ConfigType>Flags , as configurações de diretiva definidas no Registro substituem o comportamento padrão do sistema operacional para esse algoritmo criptográfico e tipo de configuração.

  • Se o indicador estiver definido na política Weak<CryptoAlg>AllFlags, o resultado Weak<CryptoAlg>ThirdPartyFlags será uma combinação dos valores definidos em Weak<CryptoAlg>ThirdPartyFlags e Weak<CryptoAlg>AllFlags, exceto para os indicadores relacionados ao registro, que não são combinados. Por exemplo, os sinalizadores de terceiros efetivos são calculados como:
    ThirdPartyFlags |= AllFlags & ~(CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG | CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG);

  • Para configurações baseadas em tempo e comprimento de chave, o resultado Weak<CryptoAlg>ThirdPartyAfterTime é o valor mais antigo entre Weak<CryptoAlg>AllAfterTime e Weak<CryptoAlg>ThirdPartyAfterTime (se ambos forem definidos e diferentes de zero). Da mesma forma, o resultado Weak<KeyCryptoAlg>ThirdPartyMinBitLength é o maior valor entre Weak<KeyCryptoAlg>AllMinBitLength e Weak<KeyCryptoAlg>ThirdPartyMinBitLength.

Estes exemplos mostram como o sinalizador determina se as configurações de política personalizadas são aplicadas. O exemplo também explica como os valores combinados são calculados quando as configurações "Todos" e "Terceiros" são definidas.

Ativar registo

Quando este sinalizador é definido, os certificados fracos identificados durante o processo de construção da cadeia de certificados são registados no diretório especificado pelo valor do registo CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME. O registro em log permite que os administradores analisem e tomem medidas em relação a certificados fracos que possam representar riscos à segurança.

Valor hexadecimal: 0x00000004

Registo de auditoria apenas

Quando o CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG indicador é definido, apenas erros de assinatura fraca são registados, e nenhum erro de construção de cadeia é retornado. Nesse modo, erros de assinatura fraca não são retornados, permitindo um modo somente auditoria em que certificados fracos são registrados sem afetar o processo de construção da cadeia.

Valor hexadecimal: 0x00000008

Desativar todos os EKUs

O CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG sinalizador é usado para desativar o algoritmo correspondente à política para todos os Usos Avançados de Chave (EKUs). Isso significa que o algoritmo criptográfico especificado não será usado para nenhum certificado, independentemente de seu EKU.

Valor hexadecimal: 0x00010000

Desativar EKUs de autenticação de servidor Opt-In

O CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG indicador é usado para desativar o algoritmo correspondente à política para EKUs de autenticação de servidor, mas apenas para aplicações que optarem por esta alteração utilizando a configuração CERT_CHAIN_OPT_IN_WEAK_SIGNATURE. A política de assinatura fraca permite que os administradores exerçam um controle mais granular sobre os aplicativos afetados.

Valor hexadecimal: 0x00040000

EKUs de autenticação de servidor desativados

O CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG sinalizador é usado para desabilitar o algoritmo correspondente à política para EKUs de Autenticação de Servidor. Ou seja, o algoritmo criptográfico especificado não será usado para nenhum certificado com EKUs de Autenticação de Servidor, independentemente de os aplicativos aceitarem ou não.

Valor hexadecimal: 0x00100000

Desativar EKUs de assinatura de código

O CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG sinalizador é usado para desativar o algoritmo correspondente à política de assinatura de código Enhanced Key Usages (EKUs). Ou seja, o algoritmo criptográfico especificado não será usado para nenhum certificado de assinatura de código.

Valor hexadecimal: 0x00400000

Desativar EKUs de assinatura de código para binários baixados da Web

O CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG flag é usado para desativar o algoritmo correspondente à política de assinatura de código EKUs, mas somente quando o binário é descarregado da web.

Valor hexadecimal: 0x00800000

Desativar EKUs de Timestamp

A flag CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG é usado para desativar o algoritmo correspondente à política de uso melhorado de chaves (EKUs) para carimbo de data/hora. Ou seja, o algoritmo criptográfico especificado não será usado para nenhum certificado de carimbo de data/hora.

Valor hexadecimal: 0x04000000

Desativar EKUs de carimbo de data/hora para binários baixados da Web

O CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG flag é usado para desativar o algoritmo correspondente à política para EKUs temporais, mas somente quando o binário é baixado da web.

Valor hexadecimal: 0x08000000

Pré-requisitos

Para configurar políticas de algoritmo criptográfico fraco, você precisa dos seguintes pré-requisitos:

  • Acesso administrativo local para modificar as configurações do Registro.

  • (Opcional) Um diretório de registo designado caso habilite o registo para deteção de certificados fracos.

Você também precisa ter as seguintes informações prontas para configurar as políticas:

  • O nome do algoritmo criptográfico (por exemplo, MD5, SHA256, RSA, DSA, ECDSA).

  • Para algoritmos assimétricos, o tamanho mínimo de chave requerido (por exemplo, 1.024 bits para RSA).

  • Se a política deve ser aplicada a todos os certificados ou apenas aos que estão ligados a CAs raiz de terceiros.

  • A hora antes da qual a verificação de política é desativada (para certificados de assinatura de código usados em binários assinados com marca temporal).

  • Os tipos de certificados ou Usos Avançados de Chave (EKUs) aos quais a política se aplica, como:

    • Todos os certificados

    • EKU de autenticação de servidor

    • Assinatura de código EKU

    • Carimbo de data/hora EKU

  • Se a política se aplica apenas a binários baixados da Web ou a todos os binários.

  • Quaisquer exceções para certificados específicos de assinatura de código ou carimbo de data/hora, identificados pela impressão digital SHA2.

Configurar uma política de algoritmo criptográfico fraca

Para configurar uma política de algoritmo criptográfico fraca, você pode usar a certutil ferramenta de linha de comando ou modificar o registro do Windows diretamente. Selecione o método que melhor se adapta às suas necessidades.

Para configurar uma política de algoritmo criptográfico fraco, podes usar a ferramenta de linha de comando certutil -setreg chain. Essa ferramenta permite que você exiba, configure e remova configurações fracas de política de algoritmo criptográfico. Para saber mais sobre a ferramenta de linha de certutil comandos, consulte certutil.

Para configurar uma política de algoritmo criptográfico fraca, siga estas etapas:

  1. Determine o algoritmo criptográfico que você deseja desabilitar e o tipo de configuração (por exemplo, de terceiros ou todos) usando os sinalizadores e valores descritos na seção Sintaxe da política . Execute uma operação OR bit a bit para combinar os sinalizadores conforme necessário e registrar o valor resultante.

  2. Abra um prompt de comando com privilégios administrativos.

  3. Para criar uma nova política baseada em sinalizador de algoritmo criptográfico fraco, use o seguinte comando:

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

    Substitua <CryptoAlg>, <ConfigType>e <value> com os valores apropriados para sua política.

    Por exemplo, para desabilitar o MD5 para todos os certificados de autenticação de servidor SSL em CAs raiz de terceiros, você pode usar os seguintes comandos:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80100000
    
  4. Para criar uma nova política de algoritmo assimétrico, use o seguinte comando:

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

    Substitua <CryptoAlg>, <ConfigType>e <value> com os valores apropriados para sua política.

    Por exemplo, para desativar o RSA 1024 em CAs raiz de terceiros, você pode usar os seguintes comandos:

    certutil -setreg chain\WeakRSAThirdPartyMinBitLength 1024
    
  5. Para criar uma nova política baseada em tempo, use o seguinte comando:

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

    Substitua <CryptoAlg>, <ConfigType>e <value> com os valores apropriados para sua política.

    Por exemplo, para desabilitar o MD5 para todos os certificados de autenticação de servidor SSL em CAs raiz de terceiros antes de 1º de março de 2009, você pode usar os seguintes comandos:

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

Exibir políticas configuradas

Para exibir as políticas de algoritmo criptográfico fraco configuradas atualmente, você pode usar a certutil ferramenta de linha de comando ou o Editor do Registro do Windows. Selecione o método que melhor se adapta às suas necessidades.

Para exibir as políticas de algoritmo criptográfico fraco atualmente configuradas usando a certutil ferramenta de linha de comando, siga estas etapas:

  1. Abra um prompt de comando com privilégios administrativos.

  2. Para ver o comportamento padrão do sistema operacional para algoritmos criptográficos fracos, execute o seguinte comando:

    certutil -getreg chain\default
    
  3. Para exibir as políticas de algoritmo criptográfico fraco configuradas atualmente, execute o seguinte comando:

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

    Substitua <CryptoAlg> e <ConfigType> com os valores apropriados para sua política.

    Por exemplo, para exibir os sinalizadores de terceiros MD5, você pode usar o seguinte comando:

    certutil -getreg chain\WeakMD5ThirdPartyFlags
    
  4. Para exibir todas as políticas de algoritmo criptográfico fraco configuradas, você pode executar o seguinte comando:

    certutil -getreg chain
    

Ativar log

A estrutura Weak Crypto no Windows fornece um mecanismo para registrar certificados criptográficos fracos. Esse mecanismo permite que os administradores monitorem e tomem medidas em certificados considerados fracos de acordo com as configurações configuradas.

Você pode ativar os registos usando a ferramenta de linha de certutil comando ou modificando diretamente o registo do Windows. Selecione o método que melhor se adapta às suas necessidades.

Para ativar o registo em log para certificados criptográficos fracos usando a ferramenta de linha de comando certutil, siga estas etapas:

  1. Crie um diretório de log onde os certificados fracos são registrados. Por exemplo, crie um diretório em C:\Log e verifique se ele tem as permissões corretas.

  2. Para definir o diretório de log, use o seguinte comando:

    certutil -setreg chain\WeakSignatureLogDir c:\log
    
  3. Para habilitar o registro, defina o sinalizador de registro para uma política de criptografia fraca existente. Combine o CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG (0x00000004) ou CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG (0x00000008) com os sinalizadores existentes para a política. Por exemplo, para habilitar o registro em log para todos os certificados de terceiros MD5 fracos do EKU, você pode usar o seguinte comando:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80010004