Compartir a través de


Deshabilitación de algoritmos criptográficos débiles en la validación de certificados

En este artículo se describe cómo deshabilitar algoritmos criptográficos débiles mediante directivas en Windows y Windows Server. Estas directivas solo se aplican a la validación de certificados X.509: cuando Windows comprueba certificados digitales para conexiones TLS, firma de código y otros escenarios de seguridad.

Puede configurar Windows para rechazar certificados que usen algoritmos obsoletos, como MD5 y SHA1, o claves RSA que sean demasiado cortas para ser seguras. Rechazar certificados débiles ayuda a proteger su entorno de certificados que podrían comprometerse o falsificarse fácilmente. Con estas directivas, puede hacer lo siguiente:

  • Aceptar o rechazar cada política de forma independiente.

  • Habilite el registro por directiva (independientemente de otras directivas). El registro está desactivado de forma predeterminada.

  • Especificar una ubicación en la que copiar los certificados deshabilitados.

  • Configure directivas para algoritmos hash y algoritmos asimétricos.

Sintaxis de directiva

La directiva de algoritmo criptográfico se define en el Registro de Windows y se establece mediante el Editor del Registro o certutil. El administrador establece la directiva en la siguiente clave del Registro:

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

Las directivas se definen mediante la sintaxis siguiente:

Weak<CryptoAlg><ConfigType><ValueType>

CryptoAlg, ConfigTypey ValueType están presentes en todos los nombres de directiva.

Por ejemplo, WeakMD5ThirdPartyFlags o WeakRSAAllMinBitLength.

Para cada directiva, se pueden establecer los siguientes valores:

  • CryptoAlg valores posibles:

    • Md5 : algoritmo hash MD5.
    • Sha1 : algoritmo hash SHA1.
    • Rsa : algoritmo asimétrico RSA.
    • Dsa : algoritmo asimétrico DSA.
    • Ecdsa : algoritmo asimétrico ECDSA.
  • ConfigType valores posibles:

    • ThirdParty: la directiva es válida únicamente para los certificados en raíces de terceros.
    • Todo: la directiva es válida para todos los certificados, incluso los que estén en raíces empresariales.
  • ValueType valores posibles:

    • Indicadores - REG_DWORD tipos de datos que pueden establecerse para deshabilitar el algoritmo hash o habilitar una longitud mínima de clave. En la sección siguiente se proporciona un desglose de cómo calcular las marcas.

    • MinBitLength - REG_DWORD tipo de datos que especifica la longitud mínima de clave pública en bits. MinBitLength solo es aplicable a la directiva de algoritmos clave. Se especifica como un valor decimal de la longitud mínima de clave en bits. Por ejemplo, 1024 representa una longitud mínima de clave de 1024 bits.

    • AfterTime - REG_BINARY tipo de datos que contiene un FILETIME de 8 bytes. La comprobación del algoritmo criptográfico débil está deshabilitada para los archivos con marca de tiempo antes de esta hora. Este valor de configuración no es aplicable a las cadenas de marca de tiempo.

    • Sha256Allow - REG_SZ o REG_MULTI_SZ tipo de datos que contiene la lista de huellas digitales SHA256 del certificado (con formato ASCII_HEX) que identifican certificados débiles que se permiten explícitamente. Se omiten los caracteres no ASCII_HEX de la cadena, lo que permite espacios incrustados.

Marcas de tipo de valor

Para definir las marcas de una directiva de algoritmo criptográfico débil, puede usar los siguientes REG_DWORD valores. Estas marcas se usan para habilitar o deshabilitar comportamientos específicos para las directivas de algoritmo criptográfico.

Puede combinar estas marcas mediante una operación OR bit a bit para crear un valor de marca compuesto que represente varios comportamientos.

Por ejemplo, para habilitar el registro y deshabilitar el algoritmo para todas las EKU, puede combinar las marcas CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG y CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG . Para combinar estas marcas, establecería el valor en 0x80010004 (que es 0x80000000 | 0x00010000 | 0x00000004).

Expanda las secciones siguientes para ver una descripción de las marcas que se pueden establecer para directivas de algoritmo criptográfico débiles:

Habilitación de la configuración criptográfica débil

La CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG marca se usa para habilitar o deshabilitar la configuración de algoritmo criptográfico débil para una directiva de algoritmo criptográfico específica. Esta marca es esencial para controlar cómo se controlan los algoritmos débiles en el proceso de creación de la cadena de certificados.

Valor hexadecimal: 0x80000000

Estos son algunos ejemplos para ilustrar cómo la marca CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG (0x80000000) afecta al comportamiento de la directiva:

  • Si esta marca no está establecida para una directiva determinada Weak<CryptoAlg><ConfigType>Flags , se omiten todas las demás marcas y valores del Registro de esa directiva. Por ejemplo, si configura otras marcas para WeakMD5ThirdPartyFlags pero no establece 0x80000000, esas opciones no tienen ningún efecto.

  • Cuando un administrador establece esta marca para una directiva específica Weak<CryptoAlg><ConfigType>Flags , la configuración de directiva definida en el Registro invalida el comportamiento predeterminado del sistema operativo para ese tipo de configuración y algoritmo criptográfico.

  • Si la marca se establece en Weak<CryptoAlg>AllFlags, el resultado Weak<CryptoAlg>ThirdPartyFlags es una combinación de los valores definidos tanto en Weak<CryptoAlg>ThirdPartyFlags como en Weak<CryptoAlg>AllFlags, excepto para las marcas relacionadas con el registro de datos, que no se combinan. Por ejemplo, las marcas efectivas de terceros se calculan como:
    ThirdPartyFlags |= AllFlags & ~(CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG | CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG);

  • En la configuración basada en tiempo y longitud de clave, el resultado Weak<CryptoAlg>ThirdPartyAfterTime es el valor más temprano entre Weak<CryptoAlg>AllAfterTime y Weak<CryptoAlg>ThirdPartyAfterTime (si ambos están definidos y son distintos de cero). Del mismo modo, el resultante Weak<KeyCryptoAlg>ThirdPartyMinBitLength es el valor más grande entre Weak<KeyCryptoAlg>AllMinBitLength y Weak<KeyCryptoAlg>ThirdPartyMinBitLength.

Estos ejemplos muestran cómo la bandera determina si se aplica la configuración de directiva personalizada. En el ejemplo también se explica cómo se calculan los valores combinados cuando se definen las configuraciones "All" y "ThirdParty".

Habilitación del registro

Cuando se establece esta bandera, los certificados débiles que se identifican durante el proceso de construcción de la cadena de certificados se registran en el directorio especificado por el valor del Registro CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME. El registro permite a los administradores revisar y tomar medidas en certificados débiles que podrían suponer riesgos de seguridad.

Valor hexadecimal: 0x00000004

Registro solo para auditoría

Cuando se establece la marca CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG, solo se registran errores de firma débiles y no se devuelven errores de creación de cadenas. En este modo, no se devuelven errores de firma débiles, lo que permite un modo de solo auditoría en el que se registran certificados débiles sin afectar al proceso de creación de la cadena.

Valor hexadecimal: 0x00000008

Deshabilitar todas las EKU

La marca CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG se usa para deshabilitar el algoritmo correspondiente a la política para todos los Usos Avanzados de Clave (EKU). Esto significa que el algoritmo criptográfico especificado no se usará para ningún certificado, independientemente de su EKU.

Valor hexadecimal: 0x00010000

Deshabilitar las EKU de autenticación de servidor de participación

La marca CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG se usa para deshabilitar el algoritmo correspondiente a las directivas de EKUs de autenticación del servidor, pero solo para las aplicaciones que opten por este cambio mediante la configuración CERT_CHAIN_OPT_IN_WEAK_SIGNATURE. La directiva de firma débil permite a los administradores ejercer un control más granular sobre las aplicaciones afectadas.

Valor hexadecimal: 0x00040000

EKU de autenticación del servidor deshabilitados

La marca CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG se utiliza para deshabilitar el algoritmo correspondiente a la política de EKU para autenticación del servidor. Lo que significa que el algoritmo criptográfico especificado no se usará para ningún certificado con EKU de autenticación de servidor, independientemente de si las aplicaciones participarán o no.

Valor hexadecimal: 0x00100000

Deshabilitar las EKUs de firma de código

La CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG bandera se usa para deshabilitar el algoritmo correspondiente a la política de Usos Mejorados de Clave (EKUs) para la firma de código. Lo que significa que el algoritmo criptográfico especificado no se usará para ningún certificado de firma de código.

Valor hexadecimal: 0x00400000

Deshabilitar las EKU de firma de código para los archivos binarios descargados desde la web

La marca CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG se usa para deshabilitar el algoritmo correspondiente a la directiva para las EKU de firma de código, pero solo cuando el binario se descarga desde la web.

Valor hexadecimal: 0x00800000

Deshabilitar EKU de marca de tiempo

La marca CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG se usa para deshabilitar el algoritmo correspondiente a la política para los Usos Avanzados de Clave (EKU) de marca horaria. Lo que significa que el algoritmo criptográfico especificado no se usará para ningún certificado de marca de tiempo.

Valor hexadecimal: 0x04000000

Desactivar los EKU de marca horaria para los archivos binarios descargados de la web

La marca CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG se usa para deshabilitar el algoritmo correspondiente a la directiva para las EKU de marca horaria, pero solo cuando el binario se descarga desde la web.

Valor hexadecimal: 0x08000000

Prerrequisitos

Para configurar directivas de algoritmos criptográficos débiles, necesita los siguientes requisitos previos:

  • Acceso administrativo local para modificar la configuración del Registro.

  • (Opcional) Directorio de registro designado si habilita el registro para la detección de certificados débiles.

También debe tener la siguiente información lista para configurar las directivas:

  • Nombre del algoritmo criptográfico (por ejemplo, MD5, SHA256, RSA, DSA, ECDSA).

  • Para los algoritmos asimétricos, el tamaño de clave mínima necesaria (por ejemplo, 1.024 bits para RSA).

  • Si la directiva se debe aplicar a los certificados que se encadenan a entidades de certificación raíz de terceros o a todos los certificados.

  • El momento antes del cual se desactiva la comprobación de políticas (para los certificados de firma de código usados en archivos binarios firmados con marca de tiempo).

  • Los tipos de certificados o Usos mejorados de claves (EKU) a los que se aplica la directiva, como:

    • Todos los certificados

    • Autenticación del servidor EKU

    • EKU de firma de códigos

    • EKU de marca de tiempo

  • Si la directiva solo se aplica a los archivos binarios descargados de la web o a todos los archivos binarios.

  • Cualquier excepción para certificados específicos de firma de código o de marca de tiempo, identificados por su huella digital SHA2.

Configuración de una directiva de algoritmo criptográfico débil

Para configurar una directiva de algoritmo criptográfico débil, puede usar la certutil herramienta de línea de comandos o modificar directamente el Registro de Windows. Seleccione el método que mejor se adapte a sus necesidades.

Para configurar una directiva de algoritmo criptográfico débil, puede usar la certutil -setreg chain herramienta de línea de comandos. Esta herramienta permite mostrar, configurar y quitar opciones de directiva de algoritmo criptográfico débiles. Para obtener más información sobre la certutil herramienta de línea de comandos, consulte certutil.

Para configurar una directiva de algoritmo criptográfico débil, siga estos pasos:

  1. Determine el algoritmo criptográfico que desea deshabilitar y el tipo de configuración (por ejemplo, de terceros o todos) mediante las marcas y los valores descritos en la sección Sintaxis de la política. Realice una operación OR bit a bit para combinar las marcas según sea necesario y registrar el valor resultante.

  2. Abra un símbolo del sistema con privilegio de administración.

  3. Para crear una nueva directiva basada en marcas de algoritmo criptográfico débil, use el siguiente comando:

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

    Reemplaza <CryptoAlg>, <ConfigType> y <value> por los valores adecuados para la política.

    Por ejemplo, para deshabilitar MD5 para todos los certificados de autenticación del servidor SSL en ca raíz de terceros, puede usar los siguientes comandos:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80100000
    
  4. Para crear una nueva directiva de algoritmo asimétrico, use el siguiente comando:

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

    Reemplaza <CryptoAlg>, <ConfigType> y <value> por los valores adecuados para la política.

    Por ejemplo, para deshabilitar RSA 1024 en ca raíz de terceros, puede usar los siguientes comandos:

    certutil -setreg chain\WeakRSAThirdPartyMinBitLength 1024
    
  5. Para crear una nueva directiva basada en tiempo, use el siguiente comando:

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

    Reemplaza <CryptoAlg>, <ConfigType> y <value> por los valores adecuados para la política.

    Por ejemplo, para deshabilitar MD5 para todos los certificados de autenticación del servidor SSL en entidades de certificación raíz de terceros antes del 1 de marzo de 2009, puede usar los siguientes comandos:

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

Visualización de directivas configuradas

Para ver las directivas de algoritmo criptográfico no seguras configuradas actualmente, puede usar la certutil herramienta de línea de comandos o el Editor del Registro de Windows. Seleccione el método que mejor se adapte a sus necesidades.

Para ver las directivas de algoritmo criptográfico no seguras configuradas actualmente mediante la certutil herramienta de línea de comandos, siga estos pasos:

  1. Abra un símbolo del sistema con privilegio de administración.

  2. Para ver el comportamiento predeterminado del sistema operativo para algoritmos criptográficos débiles, ejecute el siguiente comando:

    certutil -getreg chain\default
    
  3. Para ver las directivas de algoritmo criptográfico no seguras configuradas actualmente, ejecute el siguiente comando:

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

    Reemplace <CryptoAlg> y <ConfigType> por los valores adecuados para la política.

    Por ejemplo, para ver las banderas de terceros MD5, puede usar el siguiente comando:

    certutil -getreg chain\WeakMD5ThirdPartyFlags
    
  4. Para ver todas las directivas de algoritmo criptográfico débil configuradas, puede ejecutar el siguiente comando:

    certutil -getreg chain
    

Habilitar registro

El marco De cifrado débil en Windows proporciona un mecanismo para registrar certificados criptográficos débiles. Este mecanismo permite a los administradores supervisar y tomar medidas en los certificados que se consideran débiles según las opciones configuradas.

Puede habilitar el registro mediante la certutil herramienta de línea de comandos o modificando directamente el registro de Windows. Seleccione el método que mejor se adapte a sus necesidades.

Para habilitar el registro de certificados criptográficos débiles mediante la certutil herramienta de línea de comandos, siga estos pasos:

  1. Cree un directorio de registro en el que se registran los certificados débiles. Por ejemplo, cree un directorio en C:\Log y asegúrese de que tiene los permisos correctos.

  2. Para establecer el directorio de registro, use el siguiente comando:

    certutil -setreg chain\WeakSignatureLogDir c:\log
    
  3. Para habilitar el registro, establezca la marca de registro para una directiva criptográfica débil existente. Combine CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG (0x00000004) o CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG (0x00000008) con las marcas existentes para la política. Por ejemplo, para habilitar el registro para todos los certificados de terceros de MD5 débiles de EKU, puede usar el siguiente comando:

    certutil -setreg chain\WeakMD5ThirdPartyFlags 0x80010004