Compartilhar via


Desabilitar algoritmos criptográficos fracos na validação de certificado

Este artigo descreve como desabilitar algoritmos criptográficos fracos usando políticas no Windows e no Windows Server. Essas políticas se aplicam apenas à 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. Rejeitar certificados fracos ajuda a proteger seu ambiente contra certificados que podem ser facilmente comprometidos ou forjados. Usando essas políticas, você pode:

  • Aderir ou cancelar adesão a cada política de forma independente.

  • Habilite o registro de logs por política (independentemente de outras políticas). O registro está desativado por padrão.

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

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

Sintaxe de 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ítica.

Por exemplo, WeakMD5ThirdPartyFlags ou WeakRSAAllMinBitLength.

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

  • CryptoAlg valores possíveis:

    • MD5 – algoritmo de hash MD5.
    • SHA-1 - Algoritmo de hash SHA-1.
    • 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 em raízes de terceiros.
    • Tudo – A política é aplicada a todos os certificados, mesmo em ambientes empresariais.
  • ValueType valores possíveis:

    • Sinalizadores - REG_DWORD tipo de dados que pode ser definido para desabilitar o algoritmo de hash ou habilitar um comprimento mínimo de chave. Um detalhamento de como calcular os sinalizadores é 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 é aplicável somente à política de algoritmos de 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 algoritmos criptográficos fracos está desabilitada para arquivos com carimbo de data/hora antes deste momento. Esse valor de configuração não é aplicável a cadeias de timestamps.

    • Sha256Allow - REG_SZ ou REG_MULTI_SZ tipo de dados que contém a lista de impressões digitais SHA256 de certificados formatadas em 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 embutidos.

Marcadores de tipos de valor

Para definir os sinalizadores para uma política de algoritmo criptográfica fraca, você pode usar os valores a seguir REG_DWORD . 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 habilitar o log e desabilitar o algoritmo para todas as EKUs, você 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 (ou seja 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áficas fracas:

Habilitar 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áfica específica. Esse sinalizador é essencial para controlar como algoritmos fracos são tratados no processo de criação da cadeia de certificados.

Valor hexadecimal: 0x80000000

Aqui estão alguns exemplos para ilustrar como o CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG sinalizador (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 dessa 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 política definidas no registro substituem o comportamento padrão do sistema operacional para esse tipo de configuração e algoritmo criptográfico.

  • Se o sinalizador estiver definido na Weak<CryptoAlg>AllFlags política, o resultado Weak<CryptoAlg>ThirdPartyFlags será uma combinação dos valores definidos em ambos Weak<CryptoAlg>ThirdPartyFlags e Weak<CryptoAlg>AllFlags, com exceção dos sinalizadores relacionados ao registro em log, 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 cedo entre Weak<CryptoAlg>AllAfterTime e Weak<CryptoAlg>ThirdPartyAfterTime (se ambos forem definidos e não zero). Da mesma forma, o resultante 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 "All" e "ThirdParty" são definidas.

Habilitar registro

Quando esse sinalizador é definido, certificados fracos identificados durante o processo de construção da cadeia de certificados são registrados no diretório especificado pelo valor do registro CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME. O registro em log permite que os administradores examinem e tomem medidas sobre certificados fracos que podem representar riscos de segurança.

Valor hexadecimal: 0x00000004

Registro apenas de auditoria

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

Valor hexadecimal: 0x00000008

Desabilitar todas as EKUs

O sinalizador CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG é usado para desabilitar 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 sua EKU.

Valor hexadecimal: 0x00010000

Desabilitar EKUs de Autenticação de Servidor Opt-In

O CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG flag é usado para desabilitar o algoritmo correspondente à política para EKUs de Autenticação de Servidor, mas apenas para aplicativos que adotam essa alteração por meio da configuração CERT_CHAIN_OPT_IN_WEAK_SIGNATURE. A política de assinatura fraca permite que os administradores exerciam um controle mais granular sobre os aplicativos afetados.

Valor hexadecimal: 0x00040000

EKUs de autenticação de servidor desabilitadas

O sinalizador CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG é usado para desabilitar o algoritmo correspondente à política para EKUs de Autenticação de Servidor. O que significa que 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

Desabilitar EKUs de Assinatura de Código

O sinalizador CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG é usado para desabilitar o algoritmo correspondente à política para assinar por código os Usos Avançados de Chave (EKUs). O que significa que o algoritmo criptográfico especificado não será usado para nenhum certificado de assinatura de código.

Valor hexadecimal: 0x00400000

Desabilitar EKUs de Assinatura de Código para binários baixados da Web

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

Valor hexadecimal: 0x00800000

Desativar EKUs de carimbo de data e hora

O sinalizador CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG é usado para desabilitar o algoritmo correspondente à política para todos os Usos Avançados de Chave (EKUs) de carimbo de data/hora. O que significa que o algoritmo criptográfico especificado não será usado para nenhum certificado de carimbo de data/hora.

Valor hexadecimal: 0x04000000

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

O sinalizador CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG é usado para desabilitar o algoritmo correspondente à política para EKUs de carimbo de data/hora, mas somente quando o binário é baixado da web.

Valor hexadecimal: 0x08000000

Pré-requisitos

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

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

  • (Opcional) Um diretório de log designado se estiver habilitando o registro de de detecçã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 da chave necessário (por exemplo, 1.024 bits para RSA).

  • Se a política deve se aplicar a certificados que se encadeiam em CAs raiz de terceiros ou a todos os certificados.

  • O horário antes do qual a verificação da política é desabilitada (para certificados de assinatura de códigos usados em binários assinados com carimbo de data/hora).

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

    • Todos os certificados

    • Autenticação do Servidor EKU

    • EKU de assinatura de código

    • EKU de carimbo de data/hora

  • Se a política se aplica somente 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áfica fraca, você pode usar a certutil ferramenta de linha de comando ou modificar o Registro do Windows diretamente. Selecione o método que melhor atende às suas necessidades.

Para configurar uma política de algoritmo criptográfica fraca, você pode usar a certutil -setreg chain ferramenta de linha de comando. Essa ferramenta permite que você exiba, configure e remova configurações fracas de política de algoritmo criptográfico. Para saber mais sobre a certutil ferramenta de linha de comando, 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, terceiros ou todos) usando os sinalizadores e valores descritos na seção Sintaxe De política . Execute uma operação OR bit a bit para combinar os sinalizadores conforme necessário e registrar o valor resultante.

  2. Abra uma prompt de comando com privilégios de 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> pelos valores apropriados para sua política.

    Por exemplo, para desabilitar o MD5 para todos os certificados de autenticação do 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> pelos valores apropriados para sua política.

    Por exemplo, para desabilitar 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> pelos 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 fracas configuradas no momento, você pode usar a certutil ferramenta de linha de comando ou o Editor do Registro do Windows. Selecione o método que melhor atende às suas necessidades.

Para exibir as políticas de algoritmo de criptografia fracas configuradas no momento usando a certutil ferramenta de linha de comando, siga estas etapas:

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

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

    certutil -getreg chain\default
    
  3. Para exibir as políticas de algoritmo de criptografia fracas configuradas no momento, execute o seguinte comando:

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

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

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

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

    certutil -getreg chain
    

Habilitar registro de log

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

Você pode habilitar o logging usando a ferramenta de linha de comando certutil ou modificando diretamente o Registro do Windows. Selecione o método que melhor atende às suas necessidades.

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

  1. Crie um diretório de log em que os certificados fracos são registrados. Por exemplo, crie um diretório 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 em log, defina o sinalizador de registro em log 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 da EKU, você pode usar o seguinte comando:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80010004