Condividi tramite


Aggiunta di mapping <one-to-one>

Panoramica

L'elemento <add> dell'elemento <oneToOneMappings> specifica un mapping univoco tra un singolo certificato client e un singolo account utente.

Nota

I mapping di certificati uno a uno differiscono da mapping di certificati molti a uno , che possono eseguire il mapping di più certificati a un singolo account utente.

Compatibilità

Versione Note
IIS 10.0 L'elemento <add> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <add> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <add> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <add> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <add> dell'elemento <oneToOneMappings> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <oneToOneMappings> sostituisce l'oggetto metabase IIsCertMapper iis 6.0.

Installazione

L'elemento <iisClientCertificateMappingAuthentication> non è disponibile nell'installazione predefinita di IIS 7 e versioni successive. Per installarlo, seguire questa procedura.

Windows Server 2012 o Windows Server 2012 R2

  1. Sulla barra delle applicazioni fare clic su Server Manager.
  2. In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
  4. Nella pagina Ruoliserver espandere Server Web (IIS), espandere Server Web, espandere Sicurezza e quindi selezionare Autenticazione mapping certificati client IIS. Fare clic su Avanti.
    Screenshot che mostra l'autenticazione di mapping dei certificati client I S selezionata per Windows Server 2012. .
  5. Nella pagina Selezione funzionalità fare clic su Avanti.
  6. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  7. Nella pagina Risultati fare clic su Chiudi.

Windows 8 o Windows 8.1

  1. Nella schermata Start spostare il puntatore nell'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva le funzionalità di Windows.
  3. Espandere Internet Information Services, espandere Servizi Web a livello mondiale, espandere Sicurezza e quindi selezionare Autenticazione mapping certificati client IIS.
    Screenshot che mostra l'autenticazione di mapping dei certificati client I S selezionata per Windows 8.
  4. Fare clic su OK.
  5. Fare clic su Close.

Windows Server 2008 o Windows Server 2008 R2

  1. Nella barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione e quindi fare clic su Server Manager.
  2. Nel riquadro della gerarchia di Server Manager espandere Ruoli e quindi fare clic su Server Web (IIS).
  3. Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
  4. Nella pagina Seleziona servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Autenticazione mapping certificati client IIS e quindi fare clic su Avanti.
    Screenshot che mostra l'autenticazione del mapping dei certificati client I S selezionata per Windows Server 2008.
  5. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  6. Nella pagina Risultati fare clic su Chiudi.

Windows Vista o Windows 7

  1. Nella barra delle applicazioni fare clic su Start e quindi fare clic su Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, quindi selezionare Autenticazione mapping certificati client IIS e quindi fare clic su OK.
    Screenshot che mostra l'autenticazione di mapping dei certificati client I S selezionata per Windows Vista o Windows 7.

Procedure

Non esiste un'interfaccia utente per la configurazione dell'autenticazione del mapping dei certificati client IIS per IIS 7. Per esempi di come configurare l'autenticazione del mapping dei certificati client IIS a livello di codice a livello di codice, vedere la sezione Esempi di codice di questo documento.

Configurazione

Attributi

Attributo Descrizione
certificate Attributo stringa obbligatorio.

Specifica il certificato pubblico con codifica base64 da un certificato client. IIS confronta questo certificato con la copia del certificato inviato tramite Internet da un client Web.

Le due stringhe di dati devono essere identiche per il mapping da procedere. Se un client ottiene un altro certificato, non corrisponderà all'originale, anche se la copia contiene tutte le stesse informazioni utente dell'originale. Se sono presenti interruzioni di riga nella stringa con codifica base64 del certificato client in questo attributo, è necessario rimuoverli. Le interruzioni di riga possono interferire con la possibilità del server di confrontare il certificato del server con il certificato inviato dal browser.
enabled Attributo booleano facoltativo.

Specifica se il mapping uno-a-uno è abilitato.

Il valore predefinito è true.
password Attributo stringa facoltativo.

Specifica la password dell'account usato per autenticare i client.

Nota: Per evitare di archiviare stringhe password non crittografate nei file di configurazione, usare sempre AppCmd.exe per immettere le password. Se si usano questi strumenti di gestione, le stringhe password verranno crittografate automaticamente prima che vengano scritte nei file di configurazione XML. Ciò offre una migliore sicurezza delle password rispetto all'archiviazione di password non crittografate.
username Attributo stringa facoltativo.

Specifica il nome utente dell'account usato per autenticare i client.

Elementi figlio

Nessuno.

Esempio di configurazione

L'esempio di configurazione seguente consente l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati uno a uno per il sito Web predefinito, crea un mapping di certificati uno-a-uno per un account utente e configura il sito per richiedere SSL e per negoziare i certificati client.

<location path="Default Web Site">
   <system.webServer>
      <security>
         <access sslFlags="Ssl, SslNegotiateCert" />
         <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <iisClientCertificateMappingAuthentication enabled="true"
                  oneToOneCertificateMappingsEnabled="true">
               <oneToOneMappings>
                  <add enabled="true"
                     userName="administrator"
                     password="[enc:57686f6120447564652c2049495320526f636b73:enc]"
                     certificate="Base64-Encoded-Certificate-Data" />
               </oneToOneMappings>
            </iisClientCertificateMappingAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

Come recuperare la stringa codificata Base-64 da un certificato client

Nota

Per recuperare i dati del certificato codificati base-64 per tutti gli esempi in questo argomento, è possibile esportare un certificato usando la procedura seguente:

  1. Fare clic su Start, quindi su Esegui.

  2. Immettere MMC e quindi fare clic su OK.

  3. Quando si apre Microsoft Management Console, fare clic su File, quindi aggiungi/rimuovi snap-in.

  4. Nella finestra di dialogo Aggiungi o Rimuovi snap-in :

    • Evidenziare i certificati nell'elenco degli snap-in disponibili, quindi fare clic su Aggiungi.
    • Scegliere di gestire i certificati per l'account utente personale, quindi fare clic su Fine.
    • Fare clic su OK per chiudere la finestra di dialogo.
  5. Nella Console di gestione Microsoft:

    • Espandere Certificati - Utente corrente, quindi Personale, quindi Certificati.
    • Nell'elenco dei certificati fare clic con il pulsante destro del mouse sul certificato da esportare, quindi scegliere Tutte le attività e quindi fare clic su Esporta.
  6. Quando si apre l'Esportazione guidata certificati :

    • Fare clic su Avanti.
    • Scegliere No, non esportare la chiave privata, quindi fare clic su Avanti.
    • Scegliere Base-64 con codifica X.509 9 (. CER) per il formato di esportazione, quindi fare clic su Avanti.
    • Scegliere di salvare il certificato sul desktop come MyCertificate.cer, quindi fare clic su Avanti.
    • Fare clic su Fine; verrà visualizzata una finestra di dialogo che indica che l'esportazione è riuscita.
  7. Chiudere Microsoft Management Console.

  8. Aprire il file MyCertificate.cer esportato usando Il Blocco note di Windows:

    • Rimuovere "-----BEGIN CERTIFICATE-----" dall'inizio del testo.
    • Rimuovere "-----END CERTIFICATE-----" dalla fine del testo.
    • Concatenare tutte le righe in una singola riga di testo: si tratta dei dati del certificato con codifica Base 64 che verranno usati per tutti gli esempi in questo argomento.

Codice di esempio

Gli esempi di codice seguenti consentono l'autenticazione del mapping dei certificati client IIS usando il mapping di certificati uno a uno per il sito Web predefinito, creare un unico mapping di certificati uno-a-uno per un account utente e configurare il sito per richiedere SSL e negoziare i certificati client.

Nota

Per recuperare i dati del certificato con codifica Base 64 per gli esempi di codice elencati di seguito, è possibile esportare un certificato seguendo i passaggi elencati nella sezione Dettagli configurazione di questo documento.

AppCmd.exe

Nota

A causa dei caratteri nelle stringhe di certificato che non possono essere analizzate da AppCmd.exe, non è consigliabile usare AppCmd.exe per configurare i mapping dei certificati uno-a-uno di IIS.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection iisClientCertificateMappingAuthenticationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
         iisClientCertificateMappingAuthenticationSection["enabled"] = true;
         iisClientCertificateMappingAuthenticationSection["oneToOneCertificateMappingsEnabled"] = true;

         ConfigurationElementCollection oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
         ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
         addElement["enabled"] = true;
         addElement["userName"] = @"Username";
         addElement["password"] = @"Password";
         addElement["certificate"] = @"Base-64-Encoded-Certificate-Data";
         oneToOneMappingsCollection.Add(addElement);

         ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
         accessSection["sslFlags"] = @"Ssl, SslNegotiateCert";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim iisClientCertificateMappingAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site")
      iisClientCertificateMappingAuthenticationSection("enabled") = True
      iisClientCertificateMappingAuthenticationSection("oneToOneCertificateMappingsEnabled") = True

      Dim oneToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings")
      Dim addElement As ConfigurationElement = oneToOneMappingsCollection.CreateElement("add")
      addElement("enabled") = True
      addElement("userName") = "Username"
      addElement("password") = "Password"
      addElement("certificate") = "Base-64-Encoded-Certificate-Data"
      oneToOneMappingsCollection.Add(addElement)

      Dim accessSection As ConfigurationSection = config.GetSection("system.webServer/security/access", "Default Web Site")
      accessSection("sslFlags") = "Ssl, SslNegotiateCert"

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = true;
iisClientCertificateMappingAuthenticationSection.Properties.Item("oneToOneCertificateMappingsEnabled").Value = true;

var oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection;
var addElement = oneToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data";
oneToOneMappingsCollection.AddElement(addElement);

var accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site");
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = True
iisClientCertificateMappingAuthenticationSection.Properties.Item("oneToOneCertificateMappingsEnabled").Value = True

Set oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection
Set addElement = oneToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data"
oneToOneMappingsCollection.AddElement(addElement)

Set accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site")
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert"

adminManager.CommitChanges()