Configurazione dei mapping dei certificati client uno-a-uno

di Robert Lucero

Sfondo

IIS 6 dispone di un'interfaccia utente per configurare ed eseguire il mapping di uno a un certificato per l'autenticazione. Agli utenti è consentito selezionare il certificato client di convalida e assegnare le credenziali utente autorizzate. Non esiste un'interfaccia utente simile in IIS 7 e versioni successive. Questa procedura dettagliata è progettata per indicare agli utenti di configurare uno a un certificato client usando l'Editor di configurazione del Pacchetto di amministrazione. Gli utenti che non dispongono di questo componente aggiuntivo possono visualizzare la sezione appendice per gli argomenti di AppCmd e gli esempi di codice C# per eseguire questa procedura dettagliata.

SCHEMA IIS 7 e versioni successive

Questo è lo schema per la funzionalità di autenticazione del mapping dei certificati client IIS in IIS 7 e versioni successive.

<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
  <attribute name="enabled" type="bool" defaultValue="false" />
  <attribute name="oneToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
  <element name="oneToOneMappings">
    <collection addElement="add" clearElement="clear">
      <attribute name="enabled" type="bool" defaultValue="true" />
      <attribute name="userName" type="string" />
      <attribute name="password" type="string" encrypted="true" />
      <attribute name="certificate" type="string" required="true" isUniqueKey="true" />
    </collection>
  </element>
</sectionSchema>

Prerequisiti

Questi sono i prerequisiti necessari per questa procedura dettagliata. Non sto coprendo come creare o fare queste cose.

  1. Modulo di mapping dei certificati client IIS installato
  2. Un sito Web con un'associazione HTTPS, configurata correttamente
  3. Un certificato Base 64 (file con estensione cer). [Nota: può essere qualsiasi certificato a 64 bit valido, ma deve essere in formato file]
  4. Installato un certificato client in un client
  5. Installazione di IIS 7 Administration Pack Technical Preview 2

Passaggio 1: Ottenere il BLOB del certificato

L'elemento dell'insieme oneToOneMappings ha un attributo denominato certificate. Il valore richiesto per questo attributo non è il certificato, ma il BLOB di certificati effettivo. Ecco come estrarlo.

  1. Fare clic con il pulsante destro del mouse sul file cer.

  2. Selezionare Apri con... nel menu di scelta rapida

  3. Selezionare Blocco note dall'elenco di Altri programmi e fare clic su OK. [Nota: Il Blocco note potrebbe essere nascosto sotto un elenco a discesa nella visualizzazione elenco Vista/Windows 2008]

  4. Questo è ciò che dovrebbe essere visualizzato nel Blocco note:

    -----BEGIN CERTIFICATE----- 
    MIIEfjCCA2agAwIBAgIKFW1IXAAAAAAAAjANBgkqhkiG9w0BAQUFADAbMRkwFwYD 
    VQQDExBJSVNSZW1vdGVNZ3JUZXN0MB4XDTA4MDIxMTIxNTk1NloXDTA5MDIxMTIy 
    MDk1NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV 
    BAcTB1JlZG1vbmQxDTALBgNVBAoTBE1TRlQxDDAKBgNVBAsTA0lJUzEVMBMGA1UE 
    AxMMUkxVQ0VSTzItSUlTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3611j 
    34q2qQgHa7ao11TcQMDYlJMrqET05MWFY1/Vso+leujLoIGTfdHOuz4IBVoeUE+y 
    mlL8r53s2BQeVFROnDtg4Jko1zJsz7AUAnQNBk/GYA1AHYmhY79Z0p1KXW/wSTJB 
    tdUn732GQOqYf4wY8jOD2zUJDUG4HXm6ib8ajwIDAQABo4IB+TCCAfUwDgYDVR0P 
    AQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMHgGCSqGSIb3DQEJDwRrMGkw 
    DgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJ 
    YIZIAWUDBAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYI 
    KoZIhvcNAwcwHQYDVR0OBBYEFHbHA+HwZcIrslklj1W3O23UFrBgMB8GA1UdIwQY 
    MBaAFMxzlGbmkp2+phhDg7TPfi83d7UVMHMGA1UdHwRsMGowaKBmoGSGL2h0dHA6 
    Ly9paXNzYjMwNS9DZXJ0RW5yb2xsL0lJU1JlbW90ZU1nclRlc3QuY3JshjFmaWxl 
    Oi8vXFxpaXNzYjMwNVxDZXJ0RW5yb2xsXElJU1JlbW90ZU1nclRlc3QuY3JsMIGe 
    BggrBgEFBQcBAQSBkTCBjjBEBggrBgEFBQcwAoY4aHR0cDovL2lpc3NiMzA1L0Nl 
    cnRFbnJvbGwvaWlzc2IzMDVfSUlTUmVtb3RlTWdyVGVzdC5jcnQwRgYIKwYBBQUH 
    MAKGOmZpbGU6Ly9cXGlpc3NiMzA1XENlcnRFbnJvbGxcaWlzc2IzMDVfSUlTUmVt 
    b3RlTWdyVGVzdC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAEsSkcx0re36IL80UphJ 
    w/srR3LBsy8sfwqxBMzMTdF7k6jYtUVpn3D2Dd4JXXVOaEVud9YNn9pr6xJL4t79 
    Zh+hJzIPA5pQLbccx4vjWB4cWEYxzcoKYCuUdZrfPFXO1a5kQAj8IZ0/6bhMceyR 
    Z7dRDoaIuAGQLFAlC/KjIBCemDi54MlWtvATQ8bmiRuEOWeneK2Vd2e0fxyezk05 
    dRqa8DEC74CQN4rQuz395ECm+M/hQnN+dHOygV8n9swd0bdNq8qypwfVUes5HIpj 
    LFmKTuGyFSVj7jv+64oTxvxtYX2QFp9q6Bi+qj0uyrX8Xjxy5rPSVPEfnxPCBg58 
    RCI= 
    -----END CERTIFICATE-----
    
  5. Rimuovere -----BEGIN CERTIFICATE----- e -----END CERTIFICATE----

  6. Formattare il BLOB del certificato in modo che sia una singola riga.

  7. Salvare il file come clientCertBlob.txt

Passaggio 2: Abilitazione dell'autenticazione del mapping dei certificati client IIS e uno a un mapping dei certificati per un sito Web

I passaggi successivi illustrano come abilitare la funzionalità Autenticazione mapping certificati client, One to One Certificate Mapping e aggiunta una voce di mapping.

  1. Avviare Inetmgr, l'interfaccia utente di Gestione IIS
  2. Selezionare il sito Web SSL configurato e aprire l'editor di configurazione
  3. Digitare "system.webServer/security/authentication/iisClientCertificateMappingAuthentication" nell'elenco a discesa Sezione .
  4. Selezionare il campo abilitato e modificare il valore in true
  5. Selezionare la voce della griglia delle proprietà oneToOneCertificateMappingsEnabled e impostare il valore su true
  6. Selezionare la voce della griglia delle proprietà oneToOneMappings e fare clic su Modifica elementi nel riquadro attività Azioni
  7. Fare clic su Aggiungi nell'elenco attività Editor raccolta
  8. Copiare il BLOB del certificato a stringa singola dall'alto e incollarlo nel campo certificato
  9. Impostare userName e password che i client verranno autenticati come .
  10. Impostare il campo abilitato su true
  11. Chiudi editor raccolta
  12. Fare clic su Applica nel riquadro attività Azioni [Nota: Fare clic su Generazione script prima di fare clic su Applica per ottenere script per questo processo]

Al termine, il server verrà configurato per gestire l'autenticazione del mapping dei certificati client IIS con una sola voce di mapping dei certificati.

Passaggio 3: Abilitazione dell'autenticazione del certificato client per un sito Web tramite SSL

Dopo aver creato un mapping e aver abilitato la funzionalità, è necessario configurare un sito per l'uso dei certificati client.

  1. Dall'interno di Inetmgr, l'interfaccia utente di Gestione IIS selezionare il sito Web SSL che si vuole usare i certificati client
  2. Selezionare il modulo dell'interfaccia utente SSL
  3. In Certificati client: selezionare il pulsante di opzione Accetta
  4. Fare clic su Applica nel riquadro attività Azioni

Il sito Web è ora configurato per accettare e autenticare i client in base ai certificati client.

Passaggio 4: Verifica di tutto il funzionamento

Il client che sta tentando di accedere alla pagina Web SSL richiede che il certificato client sia installato correttamente. Se un client tenta di richiedere una pagina senza il certificato 401 verrà servito. Una volta installato correttamente il certificato client, la pagina verrà servita come di consueto.

Provare a usare diverse combinazioni di regole di autorizzazione in base alle proprie esigenze.

Riepilogo

Sono stati configurati i mapping dei certificati client IIS e un solo mapping di un certificato a uno.

Appendice

Questi sono i frammenti di codice per eseguire la procedura dettagliata 2 e 3. Tutto questo è stato generato usando la generazione di script dell'editor di configurazione.

Istruzioni specifiche di AppCmd

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication 
    /enabled:"True" /oneToOneCertificateMappingsEnabled:"True"  /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication 
    /+"oneToOneMappings.[userName='testUser',password='securePassWord!1',certificate='CERTIFICATE_BLOB']" /commit:apphost

appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, Ssl128"  /commit:apphost

Codice 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["userName"] = @"testUser";
            addElement["password"] = @"securePassWord!1";
            addElement["certificate"] = @"CERTIFICATE_BLOB";
            oneToOneMappingsCollection.Add(addElement);
            
            serverManager.CommitChanges();
        }
    }
}

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 accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
            accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, Ssl128";
            
            serverManager.CommitChanges();
        }
    }
}