Partilhar via


Visão geral de fixação de certificado empresarial

A fixação de certificado empresarial é um recurso do Windows para lembrar (fixar), uma autoridade de certificado de emissão raiz ou certificado de entidade final, em um nome de domínio.
O recurso ajuda a reduzir ataques de homem no meio, protegendo nomes de domínio internos de encadeamento a certificados indesejados ou emitidos fraudulentamente.

Observação

Nomes de domínio externo, nos quais o certificado emitido para esses domínios é emitido por uma autoridade de certificação pública, não são ideais para a anexação de certificado empresarial.

As APIs de Certificado do Windows (CertVerifyCertificateChainPolicy e WinVerifyTrust) são atualizadas para marcar se a cadeia do site que autentica servidores corresponder a um conjunto restrito de certificados.
As restrições são encapsuladas em uma CTL (Lista de Confiança de Certificado de Regras de Pin) configurada e implantada em dispositivos Windows.
Todos os certificados de site que disparam uma incompatibilidade de nome fazem com que o Windows escreva um evento no log de eventos CAPI2 e impede que o usuário navegue pelo site.

Observação

O acionamento do recurso de fixação de certificado empresarial não faz com que clientes diferentes do Microsoft Edge bloqueiem a conexão.

Implantação

Para implantar a anexação de certificado empresarial, você precisa:

  • Criar um arquivo XML de regras de anexação de certificado bem-formatado
  • Criar um arquivo de lista de certificados confiáveis de regras de PIN do arquivo XML
  • Aplicar o arquivo de lista de certificados confiáveis de regras de PIN a um computador administrativo de referência
  • Implantar a configuração do registro no computador de referência por meio da política de grupo

Criar um arquivo XML de regras de fixação

O arquivo de regras de PIN com base em XML consiste em uma sequência de elementos PinRule. Cada elemento PinRule contém uma sequência de um ou mais elementos Site e uma sequência de zero ou mais 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

O elemento PinRules pode ter os seguintes atributos. Para obter ajuda com a formatação de Regras de Pino, consulte Representar uma data em XML ou Representar uma duração em XML.

Atributo Descrição Necessário
Duration ou NextUpdate Especifica quando as Regras de Fixação expiram. É necessário um dos dois. NextUpdate tem precedência se ambos estiverem especificados.
A duração, representada como um tipo de dados XML TimeSpan, não permite anos e meses. Você representa o atributo NextUpdate como um tipo de dados XML DateTime em UTC.
Obrigatório? Sim. Pelo menos um é obrigatório.
LogDuration ou LogEndDate Configura a auditoria apenas para se estender além da expiração da aplicação das Regras de Pin.
LogEndDate, representado como um tipo de dados DateTime XML em UTC, tem precedência se ambos estiverem especificados.
Você representa LogDuration como um tipo de dados XML TimeSpan, que não permite anos e meses.
Se 'nenhum dos atributos for especificado, a expiração de auditoria usará atributos Duração ou NextUpdate .
Não.
ListIdentifier Fornece um nome amigável para a lista de regras de pin. O Windows não usa esse atributo para a imposição de fixação de certificado; no entanto, ele é incluído quando as regras de fixação são convertidas em uma CTL (lista de confiança de certificado). Não.

Elemento PinRule

O elemento PinRule pode ter os seguintes atributos.

Atributo Descrição Obrigatório
Nome Identifica de modo único o PinRule. O Windows usa o atributo para identificar o elemento para um erro de análise ou para saída verbosa. O atributo não está incluído na CTL (lista de confiança de certificado gerada). Sim.
Erro Descreve a ação que o Windows realiza quando encontra um PIN incompatível. É possível escolher os seguintes tipos valores de cadeia:
- Revoked: o Windows relata o certificado que protege o site como se fosse revogado. Isso normalmente impede que o usuário acesse o site.
- InvalidName – o Windows relata o certificado que protege o site como se o nome no certificado não correspondesse ao nome do site. Isso geralmente resulta em avisar o usuário antes de acessar o site.
- None: o valor padrão. Nenhum erro será retornado. Você pode usar a configuração para auditar as regras de fixação sem introduzir nenhum atrito do usuário.
Não.
Log Um valor booliano representa uma cadeia de caracteres igual a true ou false. Por padrão, o registro em log é habilitado (true). Não.

Elemento Certificate

O elemento Certificado pode ter os seguintes atributos.

Atributo Descrição Obrigatório
Arquivo Caminho para um arquivo que contém um ou mais certificados. Onde os certificados podem ser codificados como:
- certificado único
- p7b
- sst
Esses arquivos também podem ser formatados em Base64. Todos os elementos Site incluídos no mesmo elemento PinRule podem corresponder a qualquer um desses certificados.
Sim (Arquivo, Diretório ou Base64 devem estar presentes).
Diretório Caminho para um diretório que contém um ou mais dos arquivos de certificado acima. Ignora todos os arquivos que não contêm nenhum certificado. Sim (Arquivo, Diretório ou Base64 devem estar presentes).
Base64 Certificados codificados em Base64. Onde os certificados podem ser codificados como:
- certificado único
- p7b
- sst
Isso permite que os certificados sejam incluídos no arquivo XML sem uma dependência de diretório do arquivo.
Observação:
Você pode usar certutil-encode para converter um arquivo .cer em base64. Você pode usar o Bloco de notas para copiar e colar o certificado codificado em base64 na regra de pin.
Sim (Arquivo, Diretório ou Base64 devem estar presentes).
EndDate Permite que você configure uma data de validade a partir da qual o certificado não é mais válido na regra de pin.
Se você estiver no processo de alternar para uma nova raiz ou AC, poderá definir o EndDate para permitir a correspondência dos certificados desse elemento.
Se o tempo atual for passado do EndDate, ao criar a CTL (lista de confiança de certificado) o analisador produzirá uma mensagem de aviso e excluirá os certificados da Regra de Pin na CTL gerada.
Para obter ajuda com a formatação de Regras de Pin, consulte Representar uma data no XML.
Não.

Elemento Site

O elemento Site pode ter os seguintes atributos.

Atributo Descrição Obrigatório
Domínio Contém o nome DNS para correspondência para essa regra de pin. Quando você cria a lista de confiança do certificado, o analisador normaliza o valor da cadeia de caracteres de nome de entrada da seguinte maneira:
- Se o nome DNS tiver um "*" líder, ele será removido.
- O nome DNS não ASCII é convertido em AsCII Puny Code.
- Os caracteres ASCII em maiúsculas são convertidos em minúsculas.
Se o nome normalizado tiver um ".", a correspondência de rótulo esquerdo curinga será habilitada. Por exemplo, ". xyz.com" corresponderia a "abc.xyz.com".
Sim.
AllSubdomains Por padrão, a correspondência de rótulos curinga à esquerda é restrita a um único rótulo esquerdo. Esse atributo pode ser definido como "true" para habilitar a correspondência de rótulos de caracteres curingas à esquerda.
Por exemplo, definir esse atributo também corresponderia a "123.abc.xyz.com" para o valor de domínio ". xyz.com".
Não.

Criar uma lista de confiança de certificado de regras de fixação

O comando Certutil.exe inclui o argumento generatePinRulesCTL . O argumento analisa o arquivo XML e gera a CTL (lista de confiança de certificado codificada) que você adiciona ao dispositivo Windows de referência e, em seguida, implanta. A sintaxe é:

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
  • Os mesmos certificados podem ocorrer em vários elementos PinRule
  • O mesmo domínio pode ocorrer em vários elementos PinRule
  • O Certutil associa-os na lista de confiança de certificado de regras de fixação resultantes
  • Certutil.exe não impõe estritamente a definição de esquema XML

O Certutil executa o seguinte para permitir que outras ferramentas adicionem/consumam seus próprios elementos e atributos específicos:

  • Ignora elementos antes e depois do elemento PinRules
  • Ignora qualquer elemento que não corresponda a Certificado ou Site no elemento PinRules
  • Ignora todos os atributos que não correspondem aos nomes acima para cada tipo de elemento

Use o comando certutil com o argumento generatePinRulesCTL junto com seu arquivo XML que contém suas regras de anexação de certificado. Por fim, forneça o nome de um arquivo de saída que incluirá suas regras de anexação de certificado na forma de uma lista de certificados confiáveis.

certutil -generatePinRulesCTL certPinRules.xml pinrules.stl

Aplicar regras de fixação de certificado a um computador de referência

Agora que suas regras de anexação de certificado estão no formato de lista de certificados confiáveis, você precisa aplicar as configurações a um computador de referência como pré-requisito para implantar a configuração à sua empresa. Para simplificar a configuração de implantação, é melhor aplicar suas regras de fixação de certificado a um computador que tenha o GPMC (console de gerenciamento de Política de Grupo) incluído no RSAT (Remote Server Administration Tools).

Use o certutil.exe para aplicar as regras de anexação de certificado ao seu computador de referência, com o argumento setreg.
O argumento setreg obtém um argumento secundário que determina o local onde certutil grava as regras de anexação de certificado.
O argumento secundário é chain\PinRules.
O último argumento que você fornece é o nome do arquivo que contém suas regras de fixação de certificado no formato de lista de confiança de certificado (.stl).
Você passa o nome do arquivo como o último argumento. Você deve prefixar o nome do arquivo com o @ símbolo como no exemplo a seguir:

Certutil -setreg chain\PinRules @pinrules.stl

Observação

Você deve executar o comando de um prompt de comando elevado.

Certutil grava as informações binárias no seguinte local do registro:

Nome Valor
Chave HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Nome PinRules
Valor Conteúdos binários do arquivo de lista de certificados confiáveis das regras de pin do certificado
Tipo de dados REG_BINARY

Informações binárias do Registro.

Implantar configurações de regra de pin empresarial usando a política de grupo

No arquivo XML, você criou um arquivo de lista de confiança de fixação de certificado. Em seguida, você aplicou o conteúdo do arquivo ao seu dispositivo de referência do qual você pode executar o console de gerenciamento Política de Grupo.

A próxima etapa consiste em configurar um objeto de política de grupo que inclui as configurações de regra de pin de certificado aplicada e implantá-lo em seu ambiente.

Entre no computador de referência usando credenciais equivalentes de administrador do domínio.

  1. Inicie o Console de Gerenciamento de Política de Grupo (gpmc.msc)
  2. No painel de navegação, expanda o nó florestal e expanda o nó de domínio
  3. Expanda o nó que contém o nome de domínio do Active Directory
  4. Selecione o nó objetos de política de grupo. Clique com o botão direito do mouse no nó objetos Política de Grupo e selecione Novo
  5. Na caixa de diálogo Novo GPO , digite Regras de fixação de certificado empresarial na caixa de texto Nome e selecione OK
  6. No painel de conteúdo, clique com o botão direito do mouse no objeto Regras de Fixação de Certificado empresarial Política de Grupo objeto e selecione Editar
  7. No Editor de Gerenciamento de Política de Grupo, no painel de navegação, expanda o nó Preferências sob Configuração do Computador. Expandir Configurações do Windows
  8. Clique com o botão direito do mouse no nó Registro e selecione Novo
  9. Na caixa de diálogo Novas Propriedades do Registro, selecione Atualização da lista Ação. Selecione HKEY_LOCAL_MACHINE na lista hive
  10. Para o Caminho da Chave, selecione ... para iniciar o Navegador de Itens do Registro. Navegue até a seguinte chave de registro e selecione o nome do valor de registro PinRules:

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

Selecione Selecionar para fechar o Navegador de Itens do Registro

  1. O Key Path deve conter a chave do registro selecionada. A configuração nome do valor deve conter o nome do valor do registro PinRules. O tipo de valor deve ler REG_BINARY e os dados de valor devem conter uma longa série de números de 0 a 9 e letras que variam de A-F (hexadecimal). Selecione OK para salvar suas configurações e feche a caixa de diálogo

Propriedades PinRules.

  1. Feche o Editor de Gerenciamento de Política de Grupo para salvar suas configurações
  2. Vincular o GPO de regras de fixação de certificado empresarial à OU que contém os dispositivos que você deseja configurar

Log de regras de fixação adicionais

Para ajudar a construir regras de fixação de certificado, você pode configurar a configuração PinRulesLogDir na chave de registro de configuração da cadeia de certificados para incluir um diretório pai para registrar regras de fixação.

Nome Valor
Chave HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Nome PinRulesLogDir
Valor O diretório Pai em que o Windows deve gravar os logs de regras de pin adicionais
Tipo de dados REG_SZ

Permissão para a pasta de log de regra de fixação

A pasta em que o Windows grava logs de regras de pin adicionais deve ter permissões para que todos os usuários e aplicativos tenham acesso completo. Você pode executar os comandos a seguir a partir de um prompt de comando elevado para obter as permissões adequadas.

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

Quando um aplicativo verifica uma cadeia de certificados TLS/SSL que contém um nome de servidor que corresponde a um nome DNS no certificado do servidor, o Windows grava um arquivo .p7b que consiste em todos os certificados na cadeia do servidor para uma das três pastas filho:

  • AdminPinRules: correspondeu a um site nas regras de fixação de certificado empresarial
  • AutoUpdatePinRules: correspondeu a um site nas regras de fixação de certificado gerenciadas pela Microsoft
  • NoPinRules: não correspondeu a nenhum site nas regras de fixação de certificado

O nome do arquivo de saída consiste nos oito dígitos hex ascii principais da impressão digital SHA1 da raiz seguidos pelo nome do servidor. Por exemplo:

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

Se houver uma regra de pin de certificado empresarial ou uma incompatibilidade de regra de pin de certificado da Microsoft, o Windows gravará o arquivo .p7b na pasta filho IncompatibilidadePinRules . Se as regras de pin tiverem expirado, então, o Windows grava o .p7b na pasta filho ExpiredPinRules.

Representar uma data no XML

Muitos atributos no arquivo xml de regras de pin são datas.
Essas datas devem ser formatadas corretamente e representadas no horário UTC.
Você pode usar o Windows PowerShell para formatar essas datas.
Depois, você pode copiar e colar a saída do cmdlet no arquivo XML.

Representando uma data.

Para simplificar, você pode truncar o ponto decimal (.) e os números depois dele. No entanto, certifique-se de acrescentar a maiúscula "Z" ao final da cadeia de caracteres de data XML.

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

Converter uma data XML

Você também pode usar Windows PowerShell para validar e converter uma data XML em uma data legível humana para validar sua data correta.

Convertendo uma data XML.

Representar uma duração no XML

Alguns elementos podem ser configurados para usar uma duração, em vez de uma data. Você deve representar a duração como um tipo de dados timespan XML. Você pode usar o Windows PowerShell para formatar corretamente e validar as durações (timespans) e a copiá-los e colá-los em seu arquivo XML.

Representando uma duração.

Converter uma duração XML

Você pode converter uma data/hora formatada XML em uma variável de tempo limite que você pode ler.

Convertendo uma duração XML.

Definição de esquema XML (lista de confiança de certificado XML)

<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>