Descrição geral da afixação de certificados empresariais
A afixação de certificados empresariais é uma funcionalidade do Windows para memorizar (afixar), uma autoridade de certificação de emissão de raiz ou um certificado de entidade final, para um nome de domínio.
A funcionalidade ajuda a reduzir os ataques man-in-the-middle ao proteger os nomes de domínio internos de encadear a certificados indesejados ou emitidos de forma fraudulenta.
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 numa Lista de Confiança de Certificados (CTL) de Regras de Afixação que está configurada e implementada em dispositivos Windows.
Qualquer certificado de site que acione um erro de correspondência de nomes faz com que o Windows escreva um evento no registo de eventos CAPI2 e impede o utilizador de navegar no site.
Observação
O acionamento da funcionalidade Afixação de Certificados de Empresa não faz com que os clientes que não o Microsoft Edge bloqueiem a ligaçã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
- Implementar a configuração do registo no computador de referência através da política de grupo
Criar um ficheiro XML de regras de pin
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 Afixação, veja 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 Afixação expiram. É necessário um dos dois.
NextUpdate tem precedência se ambos estiverem especificados. A duração, representada como um tipo de dados timeSpan XML, não permite anos e meses. 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. Representa LogDuration como um tipo de dados timeSpan XML, que não permite anos e meses. Se "nenhum dos atributos for especificado, a expiração da auditoria utiliza os atributos Duration ou NextUpdate . |
Não. |
ListIdentifier | Fornece um nome amigável para a lista de regras de pin. O Windows não utiliza este atributo para a imposição de afixação de certificados; no entanto, é incluído quando as regras de pin são convertidas numa lista de confiança de certificados (CTL). | 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 utiliza 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 lista de confiança do certificado gerado (CTL). | 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 comunica 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. Pode utilizar a definição para auditar as regras de pin sem introduzir qualquer atrito do utilizador. |
Não. |
Log | Um valor Booleano representa uma cadeia que é igual a verdadeiro ou falso. 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 (o Ficheiro, Diretório ou Base64 tem de estar presente). |
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 (o Ficheiro, Diretório ou Base64 tem de estar presente). |
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 (o Ficheiro, Diretório ou Base64 tem de estar presente). |
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 estiver a mudar para uma nova raiz ou AC, pode definir o EndDate para permitir a correspondência dos certificados deste elemento. Se a hora atual já passou do EndDate, ao criar a lista de fidedignidade do certificado (CTL), o analisador produz uma mensagem de aviso e exclui os certificados da Regra de Pin na CTL gerada. Para obter ajuda com a formatação de Regras de Afixação, veja Representar uma data em 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 cria a lista de fidedignidade do certificado, o analisador normaliza o valor da cadeia de nome de entrada da seguinte forma: - Se o nome DNS tiver um "*" à esquerda, será removido. - O nome DNS não ASCII é convertido em Código Puny ASCII. - Os caracteres ASCII em maiúsculas são convertidos em minúsculas. Se o nome normalizado tiver um ".", a correspondência de etiquetas do lado esquerdo do caráter universal está ativada. Por exemplo, ". xyz.com" corresponderia a "abc.xyz.com". |
Sim. |
AllSubdomains | Por predefinição, a correspondência de etiquetas do lado esquerdo do caráter universal está restrita a uma única etiqueta do lado 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 fidedignidade do certificado de regras de pin
O comando Certutil.exe inclui o argumento generatePinRulesCTL . O argumento analisa o ficheiro XML e gera a lista de confiança do certificado codificado (CTL) que adiciona ao seu dispositivo Windows de referência e, em seguida, implementa. 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
- O mesmo(s) certificado(s) pode ocorrer em vários elementos PinRule
- O mesmo domínio pode ocorrer em vários elementos pinRule
- Certutil associa-os na lista de confiança de certificados de regras de pin 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 os 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 quaisquer atributos que não correspondam 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 afixação de certificados 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 da implementação, é melhor aplicar as regras de afixação de certificados a um computador que tenha a Consola de Gestão de Política de Grupo (GPMC) incluída nas Ferramentas de Administração Remota do Servidor (RSAT).
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 fornecido é o nome do ficheiro que contém as regras de afixação do certificado no formato de lista de fidedignidade do certificado (.stl
).
Transmite o nome do ficheiro como o último argumento. Tem de atribuir o prefixo ao nome do ficheiro com o @
símbolo, tal como no exemplo seguinte:
Certutil -setreg chain\PinRules @pinrules.stl
Observação
Tem de executar o comando a partir de uma linha de comandos elevada.
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 |
Implementar definições de regra de pin empresarial com a política de grupo
A partir do ficheiro XML, criou um ficheiro de lista de fidedignidade de afixação de certificado. Em seguida, aplicou o conteúdo do ficheiro ao seu dispositivo de referência a partir do qual pode executar a Consola de Gestão do Política de Grupo.
O passo seguinte consiste em configurar um objeto de política de grupo que inclui as definições da regra de pin de certificado aplicada e implementá-lo no seu ambiente.
Entre no computador de referência usando credenciais equivalentes de administrador do domínio.
- Inicie o Console de Gerenciamento de Política de Grupo (gpmc.msc)
- No painel de navegação, expanda o nó de floresta e, em seguida, expanda o nó de domínio
- Expanda o nó que contém o nome de domínio do Active Directory
- Selecione o nó objetos de política de grupo. Clique com o botão direito do rato no nó Política de Grupo objetos e selecione Novo
- Na caixa de diálogo Novo GPO , escreva Regras de Afixação de Certificados Empresariais na caixa de texto Nome e selecione OK
- No painel de conteúdo, clique com o botão direito do rato no objeto Regras de Afixação de Certificados de Empresa Política de Grupo e selecione Editar
- 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 Definições do Windows
- Clique com o botão direito do rato no nó Registo e selecione Novo
- Na caixa de diálogo Novas Propriedades do Registro, selecione Atualização da lista Ação. Selecione HKEY_LOCAL_MACHINE na lista do Hive
- Para o Caminho da Chave, selecione ... para iniciar o Browser de Itens de Registo. 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 Browser de Itens de Registo
- O Key Path deve conter a chave do registro selecionada. A configuração do Nome do valor deve conter o nome do valor de registo 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 vão de A-F (hexadecimal). Selecione OK para guardar as definições e fechar a caixa de diálogo
- Feche a Editor de Gestão de Política de Grupo para guardar as suas definições
- Ligar o GPO das Regras de Afixação de Certificados Empresariais à UO que contém os dispositivos que pretende configurar
Registo de regras de pin adicionais
Para ajudar a construir regras de afixação de certificados, pode configurar a definição PinRulesLogDir na chave de registo de configuração da cadeia de certificados para incluir um diretório principal para registar regras de pin.
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 registo de regras de pin
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. Pode executar os seguintes comandos a partir de uma linha de comandos elevada 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 uma aplicação verifica uma cadeia de certificados TLS/SSL que contém um nome de servidor que corresponde a um nome DNS no certificado de servidor, o Windows escreve um ficheiro .p7b que consiste em todos os certificados na cadeia do servidor para uma das três pastas subordinadas:
-
AdminPinRules
: correspondeu a um site nas regras de afixação de certificados empresariais -
AutoUpdatePinRules
: correspondeu a um site nas regras de afixação de certificados geridas pela Microsoft -
NoPinRules
: não correspondia a nenhum site nas regras de pin do certificado
O nome do ficheiro de saída consiste nos oito dígitos hexadecimais ASCII à esquerda do thumbprint SHA1 da raiz, seguido do nome do servidor. Por exemplo:
D4DE20D0_xsi.outlook.com.p7b
DE28F4A4_www.yammer.com.p7b
Se existir uma regra de pin de certificado empresarial ou um erro de correspondência da regra de pin de certificado da Microsoft, o Windows escreve o ficheiro .p7b na pasta subordinada MismatchPinRules . Se as regras de pin tiverem expirado, então, o Windows grava o .p7b na pasta filho ExpiredPinRules.
Representar uma data em 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.
Para simplificar, você pode truncar o ponto decimal (.) e os números depois dele. No entanto, certifique-se de que acrescenta a maiúscula "Z" ao fim da cadeia de data XML.
2015-05-11T07:00:00.2655691Z
2015-05-11T07:00:00Z
Converter uma data XML
Também pode utilizar Windows PowerShell para validar e converter uma data XML numa data legível por humanos para validar que é a data correta.
Representar uma duração em 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.
Converter uma duração XML
Pode converter um período de tempo formatado XML numa variável de intervalo de tempo que pode ler.
Definição de esquema XML (XSD) da lista de fidedignidade do certificado
<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>