Introducción al anclaje de certificados empresariales

El anclaje de certificados empresariales es una característica de Windows para recordar (anclar), una entidad de certificación emisora raíz o un certificado de entidad final a un nombre de dominio.
La característica ayuda a reducir los ataques man-in-the-middle mediante la protección de los nombres de dominio internos del encadenamiento a certificados no deseados o emitidos fraudulentamente.

Nota

Los nombres de dominio externo, donde entidad de certificación pública emite el certificado emitido para estos dominios, no son ideales para la asignación de certificados de empresa.

Las API de certificados de Windows (CertVerifyCertificateChainPolicy y WinVerifyTrust) se actualizan para comprobar si la cadena del sitio que autentica los servidores coincide con un conjunto restringido de certificados.
Las restricciones se encapsulan en una lista de confianza de certificados de reglas de anclaje (CTL) que se configura e implementa en dispositivos Windows.
Cualquier certificado de sitio que desencadene una falta de coincidencia de nombres hace que Windows escriba un evento en el registro de eventos CAPI2 e impide que el usuario examine el sitio web.

Nota

El desencadenamiento de características de anclaje de certificados empresariales no hace que clientes que no sean Microsoft Edge bloqueen la conexión.

Implementación

Para implementar la asignación de certificados de empresa, debes:

  • Crear un archivo XML de reglas de asignación de certificados con formato correcto.
  • Crear un archivo de lista de certificados de confianza de reglas de asignación a partir del archivo XML.
  • Aplicar el archivo de lista de certificados de confianza de reglas de asignación a un equipo administrador de referencia.
  • Implementación de la configuración del Registro en el equipo de referencia mediante la directiva de grupo

Creación de un archivo XML de reglas de anclaje

El archivo de reglas de asignación basado en XML consta de una secuencia de elementos PinRule. Cada elemento PinRule contiene una secuencia de uno o más elementos Site y una secuencia de cero o más elementos Certificate.

<PinRules ListIdentifier="PinRulesExample" Duration="P28D">

  <PinRule Name="AllCertificateAttributes" Error="None" Log="true">
    <Certificate File="Single.cer"/>
    <Certificate File="Multiple.p7b"/>
    <Certificate File="Multiple.sst"/>
    <Certificate Directory="Multiple"/>
    <Certificate Base64="MIIBy … QFzuM"/>
    <Certificate File="WillExpire.cer" EndDate="2015-05-12T00:00:00Z"/>
    <Site Domain="xyz.com"/>
  </PinRule>

  <PinRule Name="MultipleSites" Log="false">
    <Certificate File="Root.cer"/>
    <Site Domain="xyz.com"/>
    <Site Domain=".xyz.com"/>
    <Site Domain="*.abc.xyz.com" AllSubdomains="true"/>
    <Site Domain="WillNormalize.com"/>
  </PinRule>

</PinRules>

Elemento PinRules

El elemento PinRules puede tener los atributos siguientes. Para obtener ayuda con el formato de las reglas de anclaje, vea Representación de una fecha en XML o Representación de una duración en XML.

Atributo Descripción Requerido
Duration o NextUpdate Especifica cuándo expiran las reglas de anclaje. Uno es obligatoria. NextUpdate tiene prioridad si se especifican ambos.
La duración, representada como un tipo de datos TimeSpan XML, no permite años y meses. El atributo NextUpdate se representa como un tipo de datos DateTime XML en UTC.
¿Es obligatorio? Sí. Al menos uno es obligatorio.
LogDuration o LogEndDate Configura que la auditoría solo se extenderá más allá de la expiración del cumplimiento de las reglas de asignación.
LogEndDate, declarado como una tipo de datos XML DateTime en hora UTC, tiene precedencia si se especifican ambos.
Representa LogDuration como un tipo de datos TimeSpan XML, lo que no permite años y meses.
Si no se especifica ninguno de los atributos, la auditoría de expiración usa los atributos Duration o NextUpdate .
No.
ListIdentifier Proporciona un nombre descriptivo para la lista de reglas de asignación. Windows no usa este atributo para la aplicación de anclaje de certificados; sin embargo, se incluye cuando las reglas de anclaje se convierten en una lista de confianza de certificados (CTL). No.

Elemento PinRule

El elemento PinRule puede tener los atributos siguientes:

Atributo Descripción Obligatorio
Name Identifica la PinRule de manera exclusiva. Windows usa el atributo para identificar el elemento para un error de análisis o para una salida detallada. El atributo no se incluye en la lista de confianza de certificados (CTL) generada. Sí.
Error Describe la acción que realiza Windows cuando encuentra un error de coincidencia de PIN. Puede elegir entre los siguientes valores de cadena:
- Revoked: Windows denuncia el certificado que protege el sitio como si estuviera revocado. Normalmente esto impide que el usuario acceda al sitio.
- InvalidName : Windows informa del certificado que protege el sitio como si el nombre del certificado no coincide con el nombre del sitio. Normalmente esto hace que se pregunte al usuario antes de acceder al sitio.
- None: el valor predeterminado. No se devuelve ningún error. Puede usar la configuración para auditar las reglas de anclaje sin introducir ninguna fricción del usuario.
No.
Log Un valor booleano representa una cadena que es igual a true o false. De manera predeterminada, el registro está habilitado (true). No.

Elemento Certificate

El elemento Certificate puede tener los atributos siguientes:

Atributo Descripción Obligatorio
Archivo Ruta de acceso a un archivo que contiene uno o más certificados. Donde los certificados pueden codificarse como:
-.Certificado único
- p7b
- sst
Estos archivos también pueden tener el formato Base64. Todos los elementos Site que se incluyen en el mismo elemento PinRule pueden coincidir con cualquiera de estos certificados.
Sí (Archivo, Directorio o Base64 deben estar presentes).
Directory Ruta de acceso a un directorio que contiene uno o varios de los archivos de certificado anteriores. Omite los archivos que no contienen ningún certificado. Sí (Archivo, Directorio o Base64 deben estar presentes).
Base64 Certificados codificados con Base64. Donde los certificados pueden codificarse como:
-.Certificado único
- p7b
- sst
Esto permite incluir los certificados en el archivo XML sin una dependencia del directorio de archivos.
Nota:
Puedes usar certutil-encode para convertir un archivo .cer en base64. A continuación, puedes usar el Bloc de notas para copiar el certificado codificado en base64 y pegarlo en la regla de asignación.
Sí (Archivo, Directorio o Base64 deben estar presentes).
EndDate Te permite configurar una fecha de expiración para cuando el certificado ya no sea válido en la regla de asignación.
Si está en proceso de cambiar a una nueva entidad de certificación o raíz, puede establecer EndDate para permitir la coincidencia de los certificados de este elemento.
Si la hora actual supera endDate, al crear la lista de confianza de certificados (CTL), el analizador genera un mensaje de advertencia y excluye los certificados de la regla de anclaje en el CTL generado.
Para obtener ayuda con el formato de las reglas de anclaje, consulte Representación de una fecha en XML.
No.

Elemento Site

El elemento Site puede tener los atributos siguientes:

Atributo Descripción Obligatorio
Domain Contiene el nombre DNS que debe coincidir para esta regla de asignación. Al crear la lista de confianza de certificados, el analizador normaliza el valor de cadena de nombre de entrada de la siguiente manera:
- Si el nombre DNS tiene un "*" inicial, se quita.
- El nombre DNS no ASCII se convierte en código puny ASCII.
- Los caracteres ASCII en mayúsculas se convierten en minúsculas.
Si el nombre normalizado tiene un ".", se habilita la coincidencia de etiquetas con carácter comodín a la izquierda. Por ejemplo, ".xyz.com" coincidirá con "abc.xyz.com".
Sí.
AllSubdomains De forma predeterminada, la coincidencia de etiquetas con caracteres comodín de la izquierda está restringida a una sola etiqueta izquierda. Este atributo se puede establecer en "true" para habilitar comodines que coincidan con todas las etiquetas izquierdas.
Por ejemplo, al establecer este atributo también se hará que "123.abc.xyz.com" coincida con el valor de dominio ".xyz.com".
No.

Creación de una lista de confianza de certificados de reglas de anclaje

El comandoCertutil.exe incluye el argumento generatePinRulesCTL . El argumento analiza el archivo XML y genera la lista de confianza de certificados codificados (CTL) que se agrega al dispositivo Windows de referencia y, a continuación, se implementa. La sintaxis es:

CertUtil [Options] -generatePinRulesCTL XMLFile CTLFile [SSTFile]
  Generate Pin Rules CTL
    XMLFile -- input XML file to be parsed.
    CTLFile -- output CTL file to be generated.
    SSTFile -- optional .sst file to be created.
         The .sst file contains all of the certificates
         used for pinning.

Options:
  -f                -- Force overwrite
  -v                -- Verbose operation
  • Los mismos certificados pueden producirse en varios elementos PinRule
  • El mismo dominio puede producirse en varios elementos PinRule
  • Certutil los combina en la lista de confianza de certificados de reglas de anclaje resultantes.
  • Certutil.exe no aplica estrictamente la definición de esquema XML

Certutil realiza lo siguiente para permitir que otras herramientas agreguen o consuman sus propios elementos y atributos específicos:

  • Omite los elementos antes y después del elemento PinRules
  • Omite cualquier elemento que no coincida con Certificate o Site dentro del elemento PinRules .
  • Omite los atributos que no coinciden con los nombres anteriores para cada tipo de elemento.

Usa el comando certutil con el argumento generatePinRulesCTL junto con el archivo XML que contiene tus reglas de asignación de certificados. Por último, proporciona el nombre de un archivo de salida que incluya las reglas de asignación de certificados en forma de una lista de certificados de confianza.

certutil -generatePinRulesCTL certPinRules.xml pinrules.stl

Aplicación de reglas de anclaje de certificados a un equipo de referencia

Ahora que las reglas de asignación de certificados tienen el formato de lista de certificados de confianza, debes aplicar la configuración a un equipo de referencia como requisito previo para implementar la configuración en la empresa. Para simplificar la configuración de implementación, es mejor aplicar las reglas de anclaje de certificados a un equipo que tenga la consola de administración de directiva de grupo (GPMC) incluida en las Herramientas de administración remota del servidor (RSAT).

Usa certutil.exe para aplicar las reglas de asignación de certificados en el equipo de referencia con el argumento setreg.
El argumento setreg toma un argumento secundario que determina la ubicación de dónde certutil escribe las reglas de asignación de certificados.
El argumento secundario es chain\PinRules.
El último argumento que se proporciona es el nombre del archivo que contiene las reglas de anclaje de certificados en formato de lista de confianza de certificados (.stl).
El nombre del archivo se pasa como último argumento. Debe anteponer el nombre de archivo con el @ símbolo como en el ejemplo siguiente:

Certutil -setreg chain\PinRules @pinrules.stl

Nota

Debe ejecutar el comando desde un símbolo del sistema con privilegios elevados.

Certutil escribe la información binaria en la ubicación del Registro siguiente:

Nombre Valor
Clave HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Nombre PinRules
Valor Contenido binario del archivo de lista de certificados de confianza de las reglas de asignación de certificados
Tipo de datos REG_BINARY

Información binaria del Registro.

Implementación de la configuración de la regla de pin empresarial mediante la directiva de grupo

Desde el archivo XML, ha creado un archivo de lista de confianza de anclaje de certificados. A continuación, ha aplicado el contenido del archivo al dispositivo de referencia desde el que puede ejecutar la consola de administración de directiva de grupo.

El siguiente paso consiste en configurar un objeto de directiva de grupo que incluye la configuración de la regla de anclaje de certificado aplicada e implementarla en el entorno.

Inicia sesión en el equipo de referencia con credenciales equivalente a la de administrador de dominio.

  1. Inicia la Consola de administración de directivas de grupo (gpmc.msc).
  2. En el panel de navegación, expanda el nodo de bosque y, a continuación, expanda el nodo de dominio.
  3. Expanda el nodo que contiene el nombre de dominio de Active Directory.
  4. Selecciona el nodo Objetos de directiva de grupo. Haga clic con el botón derecho en el nodo directiva de grupo objetos y seleccione Nuevo.
  5. En el cuadro de diálogo Nuevo GPO, escriba Reglas de anclaje de certificados de empresa en el cuadro de texto Nombre y seleccione Aceptar.
  6. En el panel de contenido, haga clic con el botón derecho en el objeto Reglas de anclaje de certificados de empresa directiva de grupo y seleccione Editar.
  7. En el Editor de administración de directivas de grupo, en el panel de navegación, expande el nodo Preferencias bajo Configuración del equipo. Expandir configuración de Windows
  8. Haga clic con el botón derecho en el nodo Registro y seleccione Nuevo.
  9. En el cuadro de diálogo Nuevas propiedades de Registro, selecciona Actualizar de la lista Acción. Seleccione HKEY_LOCAL_MACHINE en la lista de Hive .
  10. En Ruta de acceso de clave, seleccione ... para iniciar el Explorador de elementos del Registro. Navega a la siguiente clave de registro y selecciona el nombre del valor de registro PinRules:

HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config

Seleccione Seleccionar para cerrar el Explorador de elementos del Registro.

  1. La Ruta de la clave debe contener la clave del Registro seleccionada. La configuración de nombre de valor debe contener el nombre de valor del Registro PinRules. El tipo de valor debe leer REG_BINARY y los datos de valor deben contener una serie larga de números de 0 a 9 y letras que van desde A-F (hexadecimal). Seleccione Aceptar para guardar la configuración y cerrar el cuadro de diálogo.

Propiedades PinRules.

  1. Cierre el Editor de administración de directiva de grupo para guardar la configuración.
  2. Vincule el GPO Reglas de anclaje de certificados empresariales a la unidad organizativa que contiene los dispositivos que desea configurar.

Registro de reglas de anclaje adicionales

Para ayudar a construir reglas de anclaje de certificados, puede configurar la opción PinRulesLogDir en la clave del Registro de configuración de la cadena de certificados para incluir un directorio primario para registrar las reglas de anclaje.

Nombre Valor
Clave HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Nombre PinRulesLogDir
Valor El directorio principal donde Windows debe escribir los registros de reglas de asignación adicionales
Tipo de datos REG_SZ

Permiso para la carpeta de registro de reglas de anclaje

La carpeta en la que Windows escribe los registros de reglas de asignación adicionales debe tener permisos para que todos los usuarios y aplicaciones tengan acceso completo. Puede ejecutar los siguientes comandos desde un símbolo del sistema con privilegios elevados para lograr los permisos adecuados.

set PinRulesLogDir=c:\PinRulesLog
mkdir %PinRulesLogDir%
icacls %PinRulesLogDir% /grant *S-1-15-2-1:(OI)(CI)(F)
icacls %PinRulesLogDir% /grant *S-1-1-0:(OI)(CI)(F)
icacls %PinRulesLogDir% /grant *S-1-5-12:(OI)(CI)(F)
icacls %PinRulesLogDir% /inheritance:e /setintegritylevel (OI)(CI)L

Cuando una aplicación comprueba una cadena de certificados TLS/SSL que contiene un nombre de servidor que coincide con un nombre DNS en el certificado de servidor, Windows escribe un archivo .p7b que consta de todos los certificados de la cadena del servidor en una de las tres carpetas secundarias:

  • AdminPinRules: coincide con un sitio en las reglas de anclaje de certificados empresariales
  • AutoUpdatePinRules: coincide con un sitio en las reglas de anclaje de certificados administradas por Microsoft
  • NoPinRules: no coincidía con ningún sitio en las reglas de anclaje de certificado

El nombre del archivo de salida consta de los ocho dígitos hexadecimales ASCII iniciales de la huella digital SHA1 de la raíz seguidos del nombre del servidor. Por ejemplo:

  • D4DE20D0_xsi.outlook.com.p7b
  • DE28F4A4_www.yammer.com.p7b

Si hay una regla de pin de certificado empresarial o una regla de pin de certificado de Microsoft que no coincide, Windows escribe el archivo .p7b en la carpeta secundaria MismatchPinRules . Si expiraron las reglas de asignación, Windows escribe el archivo. p7b en la carpeta secundaria ExpiredPinRules.

Representación de una fecha en XML

Muchos atributos dentro del archivo XML de las reglas de asignación son fechas.
Estas fechas deben tener el formato correcto y estar representadas en hora UTC.
Puedes usar Windows PowerShell para dar formato a estas fechas.
Luego puedes copiar la salida del cmdlet y pegarla en el archivo XML.

Representa una fecha.

Por cuestiones de simplicidad, puedes truncar el punto decimal (.) y los números de después de él. Sin embargo, asegúrese de anexar la "Z" mayúscula al final de la cadena de fecha XML.

2015-05-11T07:00:00.2655691Z
2015-05-11T07:00:00Z

Convertir una fecha XML

También puede usar Windows PowerShell para validar y convertir una fecha XML en una fecha legible humana para validar que es la fecha correcta.

Convertir una fecha XML.

Representación de una duración en XML

Algunos elementos pueden configurarse para usar una duración, en lugar de una fecha. Debes representar la duración como un tipo de datos TimeSpan XML. Puedes usar Windows PowerShell para dar formato y validar correctamente las duraciones (TimeSpan), copiarlas y pegarlas en el archivo XML.

Representa una duración.

Conversión de una duración XML

Puede convertir un intervalo de tiempo con formato XML en una variable de intervalo de tiempo que pueda leer.

Convertir una duración XML.

Definición de esquema XML de lista de confianza de certificados (XSD)

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="PinRules">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="PinRule" maxOccurs="unbounded" minOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Certificate" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:dateTime" name="EndDate" use="optional"/>
                      <xs:attribute type="xs:string" name="File" use="optional"/>
                      <xs:attribute type="xs:string" name="Directory" use="optional"/>
                      <xs:attribute type="xs:base64Binary" name="Base64" use="optional"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="Site" maxOccurs="unbounded" minOccurs="1">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:string" name="Domain"/>
                      <xs:attribute type="xs:boolean" name="AllSubdomains" use="optional" default="false"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:string" name="Name"/>
            <xs:attribute name="Error" use="optional" default="None">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value ="Revoked"/>
                  <xs:enumeration value ="InvalidName"/>
                  <xs:enumeration value ="None"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute type="xs:boolean" name="Log" use="optional" default="true"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute type="xs:duration" name="Duration" use="optional"/>
      <xs:attribute type="xs:duration" name="LogDuration" use="optional"/>
      <xs:attribute type="xs:dateTime" name="NextUpdate" use="optional"/>
      <xs:attribute type="xs:dateTime" name="LogEndDate" use="optional"/>
      <xs:attribute type="xs:string" name="ListIdentifier" use="optional"/>
    </xs:complexType>
  </xs:element>
</xs:schema>