Panoramica dell'aggiunta di certificati enterprise
L'aggiunta di certificati aziendali è una funzionalità di Windows per la memorizzazione (aggiunta), un'autorità di certificazione emittente radice o un certificato di entità finale a un nome di dominio.
La funzionalità consente di ridurre gli attacchi man-in-the-middle proteggendo i nomi di dominio interni dal concatenamento a certificati indesiderati o rilasciati in modo fraudolento.
Nota
I nomi di domini esterni, in cui il certificato rilasciato per questi domini viene emesso da un'autorità di certificazione pubblica, non sono l'ideale per l'associazione dei certificati aziendali.
Le API del certificato Windows (CertVerifyCertificateChainPolicy e WinVerifyTrust) vengono aggiornate per verificare se la catena del sito che autentica i server corrisponde a un set limitato di certificati.
Le restrizioni sono incapsulate in un elenco di attendibilità dei certificati delle regole di aggiunta (CTL, Pin Rules Certificate Trust List) configurato e distribuito nei dispositivi Windows.
Tutti i certificati del sito che attivano una mancata corrispondenza del nome fanno sì che Windows scriva un evento nel registro eventi CAPI2 e impedisce all'utente di esplorare il sito Web.
Nota
L'attivazione della funzionalità Per l'aggiunta di certificati enterprise non causa il blocco della connessione da parte di client diversi da Microsoft Edge.
Distribuzione
Per distribuire l'associazione del certificato Enterprise, è necessario:
- Creare un file XML delle regole di associazione del certificato nel formato corretto
- Creare un file di elenco scopi consentiti ai certificati di regole di associazione dal file XML
- Applicare il file di elenco scopi consentiti ai certificati di regole di associazione a un computer di riferimento amministrativo
- Distribuire la configurazione del Registro di sistema nel computer di riferimento tramite Criteri di gruppo
Creare un file XML delle regole pin
Il file delle regole di associazione basato su XML è costituito da una sequenza di elementi PinRule. Ogni elemento PinRule contiene una sequenza di uno o più elementi Site e una sequenza di zero o più elementi 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
L'elemento PinRules può avere gli attributi seguenti. Per informazioni sulla formattazione delle regole di aggiunta, vedere Rappresentare una data in XML o Rappresentare una durata in XML.
Attributo | Descrizione | Obbligatorio |
---|---|---|
Duration o NextUpdate | Specifica quando scadono le regole pin. Uno è obbligatorio.
NextUpdate ha la precedenza se vengono specificati entrambi. La durata, rappresentata come tipo di dati TimeSpan XML, non consente anni e mesi. L'attributo NextUpdate viene rappresentato come tipo di dati DateTime XML in formato UTC. |
Obbligatorio? Sì. Almeno uno è obbligatorio. |
LogDuration o LogEndDate | Configura il controllo solo per prorogare oltre la scadenza l'applicazione delle regole di associazione. LogEndDate, rappresentato come tipo di dati XML DateTime in formato UTC, ha la precedenza se vengono specificati entrambi. Si rappresenta LogDuration come tipo di dati TIMESpan XML, che non consente anni e mesi. Se non viene specificato alcun attributo, la scadenza del controllo usa gli attributi Duration o NextUpdate . |
No. |
ListIdentifier | Fornisce un nome descrittivo per un elenco di regole di associazione. Windows non usa questo attributo per l'imposizione dell'aggiunta di certificati; tuttavia, viene incluso quando le regole pin vengono convertite in un elenco di attendibilità del certificato (CTL). | No. |
Elemento PinRule
L'elemento PinRule può avere gli attributi seguenti.
Attributo | Descrizione | Obbligatorio |
---|---|---|
Name | Identifica in modo univoco l'elemento PinRule. Windows usa l'attributo per identificare l'elemento per un errore di analisi o per l'output dettagliato. L'attributo non è incluso nell'elenco di attendibilità del certificato generato (CTL). | Sì. |
Error | Descrive l'azione che viene eseguita da Windows quando rileva una mancata corrispondenza del PIN. È possibile scegliere tra i valori di stringa riportati di seguito: - Revoked - Windows segnala il certificato di protezione del sito come se fosse stato revocato. In genere, ciò impedisce all'utente di accedere al sito. - InvalidName : Windows segnala il certificato che protegge il sito come se il nome nel certificato non corrispondesse al nome del sito. Ciò comporta in genere la richiesta di conferma dell'utente prima dell'accesso al sito. - None - Valore predefinito. Non viene restituito alcun errore. È possibile usare l'impostazione per controllare le regole pin senza introdurre alcun attrito dell'utente. |
No. |
Log | Un valore booleano rappresenta una stringa uguale a true o false. Per impostazione predefinita, la registrazione è attivata (true). | No. |
Elemento Certificate
L'elemento Certificate può avere gli attributi seguenti.
Attributo | Descrizione | Obbligatorio |
---|---|---|
File | Percorso di un file contenente uno o più certificati. La posizione in cui i certificati possono essere codificati come: - singolo certificato - p7b - sst Questi file possono anche essere in formato Base64. Tutti gli elementi Site inclusi nello stesso elemento PinRule possono corrispondere a uno qualsiasi di questi certificati. |
Sì (File, Directory o Base64 deve essere presente). |
Directory | Percorso di una directory contenente uno o più dei file di certificato precedenti. Ignora i file che non contengono certificati. | Sì (File, Directory o Base64 deve essere presente). |
Base64 | Certificati in codifica Base64. La posizione in cui i certificati possono essere codificati come: - singolo certificato - p7b - sst In questo modo i certificati possono essere inclusi nel file XML senza una dipendenza di directory di file. Nota: Puoi usare certutil -encode per convertire un file CER in base64. Quindi puoi usare il Blocco note per copiare e incollare il certificato codificato in base64 nella regola di associazione. |
Sì (File, Directory o Base64 deve essere presente). |
EndDate | Ti consente di configurare una data di scadenza per la validità del certificato nella regola di associazione. Se si sta passando a una nuova radice o ca, è possibile impostare EndDate per consentire la corrispondenza dei certificati di questo elemento. Se l'ora corrente è successiva a EndDate, durante la creazione dell'elenco di attendibilità del certificato (CTL) il parser genera un messaggio di avviso ed esclude i certificati dalla regola pin nell'elenco CTL generato. Per informazioni sulla formattazione delle regole di aggiunta, vedere Rappresentare una data in XML. |
No. |
Elemento Site
L'elemento Site può avere gli attributi seguenti.
Attributo | Descrizione | Obbligatorio |
---|---|---|
Domain | Contiene il nome DNS da corrispondere per questa regola di associazione. Quando si crea l'elenco di attendibilità del certificato, il parser normalizza il valore della stringa del nome di input come indicato di seguito: - Se il nome DNS ha un "*" iniziale, viene rimosso. - Il nome DNS non ASCII viene convertito in codice ASCII Puny. - I caratteri ASCII maiuscoli vengono convertiti in minuscoli. Se il nome normalizzato ha un carattere ".", la corrispondenza delle etichette con caratteri jolly a sinistra è abilitata. Ad esempio, ".xyz.com" potrebbe corrispondere a "abc.xyz.com". |
Sì. |
AllSubdomains | Per impostazione predefinita, la corrispondenza delle etichette con caratteri jolly a sinistra è limitata a una singola etichetta a sinistra. Questo attributo può essere impostato su "true" per abilitare la corrispondenza con caratteri jolly di tutte le etichette a sinistra. Ad esempio, impostando questo attributo al valore di dominio ".xyz.com" potrebbe corrispondere anche a "123.abc.xyz.com". |
No. |
Creare un elenco di attendibilità dei certificati delle regole pin
Il comando Certutil.exe include l'argomento generatePinRulesCTL . L'argomento analizza il file XML e genera l'elenco di attendibilità del certificato codificato (CTL) aggiunto al dispositivo Windows di riferimento e quindi distribuito. La sintassi è:
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
- Gli stessi certificati possono verificarsi in più elementi PinRule
- Lo stesso dominio può verificarsi in più elementi PinRule
- Certutil unisce questi elementi nell'elenco di attendibilità dei certificati delle regole pin risultanti
- Certutil.exe non applica rigorosamente la definizione di XML Schema
Certutil esegue le operazioni seguenti per consentire ad altri strumenti di aggiungere/utilizzare i propri elementi e attributi specifici:
- Ignora gli elementi prima e dopo l'elemento PinRules
- Ignora qualsiasi elemento che non corrisponde a Certificate o Site all'interno dell'elemento PinRules
- Ignora gli attributi che non corrispondono ai nomi precedenti per ogni tipo di elemento
Utilizza il comando certutil con l'argomento generatePinRulesCTL insieme al file XML contenente le regole di associazione del certificato. Infine, specifica il nome di un file di output che includerà le regole di associazione del certificato sotto forma di un elenco scopi consentiti ai certificati.
certutil -generatePinRulesCTL certPinRules.xml pinrules.stl
Applicare regole di aggiunta di certificati a un computer di riferimento
Ora che le regole di associazione del certificato sono in formato elenco scopi consentiti ai certificati, devi applicare le impostazioni a un computer di riferimento come prerequisito per la distribuzione dell'impostazione nell'azienda. Per semplificare la configurazione della distribuzione, è consigliabile applicare le regole di aggiunta del certificato a un computer in cui la console di gestione Criteri di gruppo è inclusa in Strumenti di amministrazione remota del server.
Usa certutil.exe per applicare le regole di associazione del certificato al computer di riferimento usando l'argomento setreg.
L'argomento setreg accetta un argomento secondario che determina la posizione della scrittura delle regole di associazione del certificato da parte di certutil.
L'argomento secondario è chain\PinRules.
L'ultimo argomento specificato è il nome del file che contiene le regole di aggiunta del certificato nel formato dell'elenco di attendibilità del certificato (.stl
).
Passare il nome del file come ultimo argomento. È necessario anteporre al nome del file il @
simbolo come nell'esempio seguente:
Certutil -setreg chain\PinRules @pinrules.stl
Nota
È necessario eseguire il comando da un prompt dei comandi con privilegi elevati.
Certutil scrive le informazioni binarie nel seguente percorso di registrazione:
Nome | Valore |
---|---|
Chiave | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Nome | PinRules |
Valore | Binario contenente l'elenco di attendibilità del file di elenco scopi consentiti ai certificati delle regole di associazione certificati |
Tipo di dati | REG_BINARY |
Distribuire le impostazioni delle regole pin dell'organizzazione usando Criteri di gruppo
Dal file XML è stato creato un file dell'elenco di attendibilità per l'aggiunta di certificati. È stato quindi applicato il contenuto del file al dispositivo di riferimento da cui è possibile eseguire la console di gestione Criteri di gruppo.
Il passaggio successivo consiste nel configurare un oggetto Criteri di gruppo che include le impostazioni delle regole di aggiunta del certificato applicate e distribuirlo nell'ambiente.
Accedi al computer di riferimento utilizzando le credenziali equivalenti di amministratore di dominio.
- Avvia la Console Gestione Criteri di gruppo (gpmc.msc)
- Nel riquadro di spostamento espandere il nodo della foresta e quindi espandere il nodo di dominio
- Espandere il nodo che contiene il nome di dominio di Active Directory
- Seleziona il nodo Oggetti Criteri di gruppo. Fare clic con il pulsante destro del mouse sul nodo oggetti Criteri di gruppo e scegliere Nuovo
- Nella finestra di dialogo Nuovo oggetto Criteri di gruppo digitare Enterprise Certificate Pinning Rules nella casella di testo Name (Nome) e selezionare OK
- Nel riquadro del contenuto fare clic con il pulsante destro del mouse sull'oggetto Enterprise Certificate Pinning Rules Criteri di gruppo e scegliere Modifica
- In Editor Gestione criteri di gruppo, nel riquadro di spostamento, espandi il nodo Preferenze in Configurazione computer. Espandere Impostazioni di Windows
- Fare clic con il pulsante destro del mouse sul nodo Registro di sistema e scegliere Nuovo
- Nella finestra di dialogo Nuove proprietà Registro di sistema, seleziona Aggiorna dall'elenco Azione. Selezionare HKEY_LOCAL_MACHINE dall'elenco Hive
- Per Percorso chiave selezionare ... per avviare il Browser elementi del Registro di sistema. Passare alla chiave del Registro di sistema seguente e selezionare il nome del valore del Registro di sistema PinRules:
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config
Selezionare Seleziona per chiudere il Browser elementi del Registro di sistema
- Il percorso chiave deve contenere la chiave del Registro di sistema selezionata. La configurazione nome valore deve contenere il nome del valore del Registro di sistema PinRules. Il tipo di valore deve leggere REG_BINARY e i dati valore devono contenere una lunga serie di numeri da 0 a 9 e lettere che vanno da A-F (esadecimale). Selezionare OK per salvare le impostazioni e chiudere la finestra di dialogo
- Chiudere il Editor gestione Criteri di gruppo per salvare le impostazioni
- Collegare l'oggetto Criteri di gruppo Regole di aggiunta certificati enterprise all'unità organizzativa contenente i dispositivi che si desidera configurare
Registrazione di regole aggiuntive per i pin
Per facilitare la creazione di regole di aggiunta del certificato, è possibile configurare l'impostazione PinRulesLogDir nella chiave del Registro di sistema di configurazione della catena di certificati per includere una directory padre per registrare le regole del pin.
Nome | Valore |
---|---|
Chiave | HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType0\CertDllCreateCertificateChainEngine\Config |
Nome | PinRulesLogDir |
Valore | La directory padre in cui Windows scrive i log delle regole di associazione aggiuntive |
Tipo di dati | REG_SZ |
Autorizzazione per la cartella di log delle regole di aggiunta
La cartella in cui Windows scrive i log delle regole di associazione aggiuntive deve disporre delle autorizzazioni in modo che tutti gli utenti e le applicazioni abbiano l'accesso completo. È possibile eseguire i comandi seguenti da un prompt dei comandi con privilegi elevati per ottenere le autorizzazioni appropriate.
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 un'applicazione verifica una catena di certificati TLS/SSL che contiene un nome di server corrispondente a un nome DNS nel certificato server, Windows scrive un file con estensione p7b costituito da tutti i certificati nella catena del server in una delle tre cartelle figlio:
-
AdminPinRules
: corrisponde a un sito nelle regole di aggiunta del certificato dell'organizzazione -
AutoUpdatePinRules
: corrisponde a un sito nelle regole di aggiunta del certificato gestite da Microsoft -
NoPinRules
: non corrisponde ad alcun sito nelle regole del pin del certificato
Il nome del file di output è costituito dalle otto cifre esadecimali ASCII iniziali dell'identificazione personale SHA1 della radice seguita dal nome del server. Ad esempio:
D4DE20D0_xsi.outlook.com.p7b
DE28F4A4_www.yammer.com.p7b
Se è presente una regola pin del certificato aziendale o una regola pin del certificato Microsoft non corrispondente, Windows scrive il file con estensione p7b nella cartella figlio MismatchPinRules . Se le regole di associazione sono scadute, Windows scrive il file con estensione p7b nella cartella figlio ExpiredPinRules.
Rappresentare una data in XML
Molti attributi all'interno del file XML delle regole di associazione sono costituiti da date.
Le date devono essere formattate correttamente ed essere rappresentate nel formato UTC.
Puoi utilizzare Windows PowerShell per formattare le date.
Puoi copiare e incollare l'output del cmdlet nel file XML.
Per semplicità, puoi troncare il separatore decimale (.) e i numeri dopo di esso. Tuttavia, assicurarsi di aggiungere la "Z" maiuscola alla fine della stringa di data XML.
2015-05-11T07:00:00.2655691Z
2015-05-11T07:00:00Z
Convertire una data XML
È anche possibile usare Windows PowerShell per convalidare e convertire una data XML in una data leggibile per verificare che sia la data corretta.
Rappresentare una durata in XML
Alcuni elementi possono essere configurati per utilizzare una durata anziché una data. Devi rappresentare la durata come tipo di dati timespan XML. Puoi usare Windows PowerShell per formattare e convalidare correttamente le durate (timespan) e copiarle e incollarle in file XML.
Convertire una durata XML
È possibile convertire un intervallo di tempo formattato XML in una variabile di intervallo di tempo che è possibile leggere.
Definizione xml schema dell'elenco di attendibilità dei certificati (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>