Help and Support

Identificativo articolo: 901183 - Ultima modifica: giovedì 13 dicembre 2007 - Revisione: 3.2

Come chiamare un servizio Web utilizzando un certificato client per l'autenticazione in un'applicazione Web ASP.NET

In questa pagina

Espandi tutto | Chiudi tutto

Sommario

in questo articolo viene descritto come passare un certificato client a un servizio Web per l'autenticazione da un'applicazione Web ASP.NET.

Nota I passaggi descritti in questo articolo sono validi anche per quando si effettua una richiesta HTTP diretta utilizzare la classe HttpWebRequest
se non si richiama un servizio Web.

INTRODUZIONE

Spesso, servizi Web devono autenticare le applicazioni che chiamare i servizi Web. I servizi Web devono eseguire autenticazioni della chiamata applicazioni prima i servizi Web possono eseguire le autorizzazioni. Una tecnica di autenticazione consiste per richiedere le applicazioni che chiamare il servizio Web per presentare un certificato client.

Quando un'applicazione Web ASP.NET tenta di chiamare un servizio Web che utilizza l'autenticazione di certificato, potresti ricevere un messaggio di errore "Accesso negato". Quando un'applicazione console o un'applicazione di Microsoft Windows Forms chiama lo stesso servizio Web, non verranno pertanto visualizzati un messaggio di errore.

Questo comportamento si verifica perché il computer gestisce due archivi di certificati differenti:
  • archivio del computer locale : applicazione Web ASP.NET di ricerca nell'archivio per individuare i certificati client.
  • l'archivio utente locale : un'applicazione di utente interattivo ricerca nell'archivio per individuare i certificati client.
In genere, quando un'applicazione interattiva utente installa un certificato client, il certificato client è installato nell'archivio utente locale. Di conseguenza, il certificato client funziona per le applicazioni utente interattivo. Tuttavia, il certificato client non funziona per Web di ASP.NET le applicazioni.

Informazioni

Per abilitare un'applicazione Web ASP.NET utilizzare un certificato client, è necessario installare il certificato client nell'archivio del computer locale. Quando si installa un certificato client nell'archivio del computer locale, il certificato client è disponibile solo per gli account utente del gruppo Administrators e per l'utente che ha installato il certificato del client. Di conseguenza, è necessario concedere l'accesso al certificato client per l'account utente utilizzato per eseguire l'applicazione Web ASP.NET.

Nota È necessario il Microsoft .NET Framework 1.1 Service Pack 1 (SP1) installata per utilizzare client certificati nell'archivio del computer locale.

Inoltre, quando l'applicazione Web ASP.NET chiama il servizio Web, l'applicazione necessario esportare il certificato del client dall'archivio certificati e quindi aggiungere il certificato client a chiamata al servizio Web.

Installare il certificato del client e concedere l'accesso per l'account utente

Per installare il certificato client e concedere l'accesso al certificato client per l'account utente utilizzato per eseguire l'applicazione Web ASP.NET, attenersi alla seguente procedura.

Passaggio 1: installare il certificato client nell'archivio del computer locale

Se si dispone di un certificato client in un file PKCS#12 (.pfx), è possibile utilizzare lo strumento di configurazione di Microsoft Windows HTTP Services certificati WinHttpCertCfg.exe per installare il certificato del client e concedere l'accesso al certificato client altri account utente come l'account di servizio di rete. A tale scopo, attenersi alla seguente procedura:
  1. Scaricare e quindi installare Microsoft Windows HTTP strumento Configurazione di Servizi certificati. Per ottenere lo strumento, visitare il seguente sito Web di Microsoft:
    http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f (http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f)
  2. Eseguire il comando seguente al prompt dei comandi:
    winhttpcertcfg -i PFXFile - c LOCAL_MACHINE\My - a IWAM_TESTMACHINE -p PFXPassword
    Nota PfxFile è il nome del file PFX. Password è. Se il file non richiede una password, omettere l'-p parametro.

    In genere, il file WinHttpCertCfg.exe si trova nella cartella seguente:
    C:\Programmi\Microsoft Files\Windows risorse Kits\Tools
Se non si dispone di accesso in un file PFX è stato installato Servizi certificati in un computer in cui è in esecuzione Microsoft Windows Server 2003 o Microsoft Windows 2000 Server, è possibile richiedere e installare il certificato client direttamente nell'archivio computer locale. A tale scopo, attenersi alla seguente procedura:
  1. Accedere al computer client utilizzando un account utente che disponga delle credenziali di amministratore.
  2. In Microsoft Internet Explorer, visitare l'autorità di certificazione (CA) di sito. Ad esempio, se il server della CA è denominato CAServer, visitare il seguente sito Web:
    http://CAServer/certsrv
  3. In Selezionare un'operazione , fare clic su Richiedi un certificato e quindi fare clic su Richiesta avanzata di certificati .
  4. Fare clic su creare e inviare una richiesta a questa CA .
  5. Nella richiesta di certificato avanzata modulo, immettere un nome e un indirizzo di posta elettronica.
  6. In tipo di certificato richiesto sezione, scegliere certificato di autenticazione client .
  7. Nella sezione Opzioni chiave , fare clic per selezionare la casella di controllo Memorizza il certificato nell'archivio certificati del computer locale e quindi fare clic su Invia .

    Si noti l'ID richiesta per il certificato del client.
  8. In Potenziale violazione dello script finestra di dialogo fare clic su .
  9. Dopo che l'autorità di CERTIFICAZIONE ha emesso il certificato di client, fare clic su Home e quindi Visualizza lo stato di una richiesta di certificato in sospeso .
  10. Fare clic su inviato nel passaggio 7 la richiesta di certificato in Selezionare la richiesta di certificato che si desidera visualizzare .
  11. Fare clic su Installa questo certificato e fare clic quindi su nella finestra di dialogo Potenziale violazione dello script .

Passaggio 2: configurazione accesso il certificato del client

In questo passaggio è necessario concedere autorizzazioni per l'account ASP.NET accedere al certificato client archiviato in un archivio del computer locale. L'account di servizio di rete è l'account predefinito per l'esecuzione di applicazioni Web su Windows Server 2003. Di conseguenza, è necessario concedere l'accesso al certificato per l'account di servizio di rete. Se è stato configurato un account personalizzato per eseguire ASP.NET, è necessario concedere l'accesso per l'account personalizzato.

Nota In Microsoft Internet Information Server (IIS) 5.0, ASP.NET viene eseguito in ASP.NET il conto e non incluso nel servizio di rete del conto. Di conseguenza, è necessario per concedere autorizzazioni per l'account ASPNET in un computer in cui è in esecuzione IIS 5.0.

Per concedere l'accesso per un account utente specifico, eseguire il comando seguente al prompt dei comandi:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s " IssuedToName " - a " AccountName "
Nota AccountName è il nome di un account computer locale o un account di dominio. IssuedToName è il nome della società o del dominio a cui è stato rilasciato il certificato client. Questo comando contiene una stringa di ricerca senza distinzione tra maiuscole e minuscole. La stringa di ricerca trova il primo certificato enumerato ha un nome di oggetto che contiene la stringa.

Il seguente comando da riga di comando è un esempio di come concedere l'accesso al certificato client per l'account di servizio di rete in Microsoft Internet Information Services (IIS) 6.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s " IssuedToName " - a "NetworkService"
Il seguente comando da riga di comando è un esempio su come concedere l'accesso al certificato client l'account ASPNET in IIS 5.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s " IssuedToName " - a "Aspnet"
Nota Quando si utilizza lo strumento di configurazione di Windows HTTP Services certificati, è possibile combinare il processo di importazione il certificato del client e il processo di configurazione dell'accesso al certificato client in un passaggio. Ad esempio, il comando della riga di comando che segue consente di eseguire entrambi i processi:
Winhttpcertcfg.exe -i PFXFile - c LOCAL_MACHINE\My - a ? AccountName ?

Passaggio 3: copia il certificato del client dall'archivio utente locale all'archivio del computer locale

Se un'applicazione interattiva ad esempio un'applicazione Windows Form o un'applicazione da riga di comando è possibile accedere al certificato client, il certificato client è già memorizzato nell'archivio utente locale. Se invece un'applicazione di servizio ad esempio un'applicazione Web ASP.NET non può accedere il certificato del client stesso, il certificato client potrebbe non essere memorizzato nell'archivio del computer locale.

Questo passaggio viene illustrato come copiare un certificato client nell'archivio utente locale nell'archivio del computer locale di utilizzando Esportazione guidata certificati.

Nota Se il certificato client è già nell'archivio del computer locale o se è possibile installare il certificato client direttamente nell'archivio computer locale come nel passaggio 1, eseguire il passaggio 4. Tuttavia, se si utilizza il passaggio 3, è necessario restituisce al passaggio 2 per concedere accesso il certificato del client.

Per copiare il certificato del client in archivio del computer locale, attenersi alla seguente procedura:
  1. Fare clic sul pulsante Start , scegliere Esegui , digitare mmc e quindi fare clic su OK .
  2. Dal menu File , scegliere Aggiungi/Rimuovi snap-in e scegli Aggiungi .
  3. Nella finestra di dialogo Add Standalone Snap-ins i componenti aggiuntivi , fare clic su certificati , fare clic su Aggiungi , fare clic su account del computer , fare clic su Avanti e quindi fare clic su Fine .
  4. Nella finestra di dialogo Add Standalone Snap-ins i componenti aggiuntivi , fare clic su certificati , fare clic su Aggiungi , fare clic su account utente e quindi fare clic su Fine .
  5. Fare clic su Chiudi e scegli OK .
  6. Per esportare il certificato del client dall'archivio utente locale, attenersi alla seguente procedura:
    1. Espandere certificati - utente corrente , espandere personale e quindi fare clic su certificati .
    2. Fare clic con il pulsante destro del mouse sul certificato client, scegliere Tutte le attività , fare clic su Esporta e quindi fare clic su Avanti .
    3. Se l'opzione Sì, Esporta la chiave privata non è disponibile, l'applicazione Web ASP.NET non può utilizzare il certificato del client. È necessario ottenere un altro certificato client. A tale scopo, seguire le istruzioni in passaggio 1 e 2 di passaggio. In caso contrario, fare clic su Esporta la chiave privata e quindi fare clic su Avanti due volte.
    4. Nella casella password e nella casella Conferma password , digitare una password e quindi fare clic su Avanti .
    5. Nella casella Nome file digitare un nome di file. Fare clic su Avanti e quindi fare clic su Fine .
    6. Nell' Esportazione guidata certificati finestra di dialogo fare clic su OK .
  7. Per importare il certificato del client in archivio del computer locale, attenersi alla seguente procedura:
    1. Espandere Certificati (computer locale) e quindi espandere personale .
    2. Fare clic con il pulsante destro del mouse su certificati , fare clic su Tutte le attività , fare clic su Importa e quindi fare clic su Avanti .
    3. Nella casella Nome file digitare il nome del file specificato nel passaggio 6e e quindi fare clic su Avanti .
    4. Nella casella password digitare la password è specificato nel passaggio 6 d e quindi fare clic su Avanti due volte.
    5. Fare clic su Fine , quindi OK .

Passaggio 4: installare il certificato principale dell'autorità di CERTIFICAZIONE

Se il certificato client già è firmato da una CA esterna, ad esempio VeriSign, o se è già installato il certificato principale per l'autorità di CERTIFICAZIONE, è possibile omettere passaggio 4.

Per impostazione predefinita, Windows ha i certificati radice delle molte CA esterne preinstallato già nell'archivio certificati radice attendibili.
Verificare che sia installato il certificato radice
Per verificare che il certificato principale per l'autorità di CERTIFICAZIONE è installato, eseguire la procedura seguente:
  1. Fare clic sul pulsante Start , scegliere Esegui , digitare mmc e quindi fare clic su OK .
  2. Dal menu File , scegliere Aggiungi/Rimuovi snap-in e scegli Aggiungi .
  3. Nella finestra di dialogo Add Standalone Snap-ins i componenti aggiuntivi , fare clic su certificati , fare clic su Aggiungi , fare clic su account del computer , fare clic su Avanti e quindi fare clic su Fine .
  4. Fare clic su Chiudi e scegli OK .
  5. Espandere Certificati (computer locale) , espandere Autorità di certificazione principale attendibili e quindi fare clic su certificati .
  6. Nella finestra riquadro a destra, confermare che sia elencato il certificato principale dell'autorità di CERTIFICAZIONE che si desidera utilizzare.
Installare il certificato radice
Se il certificato principale dell'autorità di CERTIFICAZIONE che si desidera utilizzare non è elencato, è necessario installare il certificato principale. Se il certificato principale dell'autorità di CERTIFICAZIONE che si desidera utilizzare è stata emessa per l'utente in un file di certificato ad esempio un file cer, un file .DER o un file .pfx, eseguire la procedura seguente:
  1. Espandere Certificati (computer locale) , fare clic con il pulsante destro del mouse su Autorità di certificazione principale attendibili , fare clic su Tutte le attività e quindi fare clic su Importa .
  2. Nell' Importazione guidata certificati nella finestra di dialogo fare clic su Avanti , quindi nella casella Nome di file , digitare il nome del file di certificato e fare clic quindi su Avanti due volte.
  3. Fare clic su Fine , quindi OK .
Richiesta del certificato radice
Se autorità di CERTIFICAZIONE che si desidera utilizzare è incluso nel database di installazione di Servizi certificati Microsoft, è possibile richiedere il certificato principale. A tale scopo, attenersi alla seguente procedura:
  1. In Internet Explorer, visitare il sito Web dell'autorità di CERTIFICAZIONE. Ad esempio, se il server della CA è denominato CAServer, visitare il seguente sito Web:
    http://CAServer/certsrv
  2. Fare clic su Scarica un Autorità di CERTIFICAZIONE certificato, la catena di certificati o l'elenco di revoche di CERTIFICATI e quindi fare clic su Autorità di CERTIFICAZIONE download certificato .
  3. Nella finestra di dialogo Download file fare clic su Salva .
  4. Nella finestra di dialogo Salva con nome immettere il percorso in cui si desidera salvare il file di certificato e quindi fare clic su Salva .
  5. Dopo averli salvati il file del certificato principale, utilizzare i passaggi nella sezione "Installare il certificato principale" per installare il file di certificato nell'archivio Autorità di certificazione principale attendibili.

Chiamare il servizio Web

Dopo aver installato il certificato client nell'archivio del computer locale o nell'archivio di utente locale, è possibile accedere al certificato client dall'applicazione Web ASP.NET per chiamare il servizio Web. La procedura per accedere al certificato client è la stessa per un'applicazione Windows Form o per un Web di ASP.NET dell'applicazione.

Se si utilizza .NET Framework 1.1, è necessario esportare la chiave in un file codificato DER. È necessario esportare la chiave perché la classe System.Security.Cryptography.X509Certificates.X509Certificate non contiene metodi per accedere direttamente ai dettagli di un certificato da un archivio di certificati. Di conseguenza, l'applicazione deve informazioni dettagliate di un certificato da un file codificato DER.

Nota Web Services Enhancements 2.0 per Microsoft .NET (WSE) fornisce un modo per un'applicazione recuperare i dettagli di un certificato direttamente da un archivio certificati.

Il seguente codice di esempio C# illustrato come chiamare un servizio Web, passando un certificato client per l'autenticazione.
using System.Security.Cryptography.X509Certificates;
...

  public void CallWebService()
  {
    // TODO: Replace <C:\WSClientCert.cer> with the path of your certificate file.
    string certPath = @"<C:\WSClientCert.cer>";

    // Create an instance of the Web service proxy.
    WebSvc.math mathservice = new WebSvc.math();
    // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.
    mathservice.Url = @"<https://wsserver/securemath/math.asmx>";

    // Create an X509Certificate object from the information 
    // in the certificate export file, and then add the certificate to the 
    // ClientCertificates collection of the Web service proxy.
    mathservice.ClientCertificates.Add(
        X509Certificate.CreateFromCertFile(certPath));

    long lngResult = 0;
    try
    {
      lngResult = mathservice.Add(Int32.Parse(operand1.Text), 
          Int32.Parse(operand2.Text));
      string result = lngResult.ToString();
    }
    catch(Exception ex)
    {
      if(ex is WebException)
      {
        WebException we = ex as WebException;
        WebResponse webResponse = we.Response;
        throw new Exception("Exception calling method. " + ex.Message);
      }
    }
  }

Web Services Enhancements 2.0 per Microsoft .NET

Web Services Enhancements 2.0 per Microsoft .NET (WSE) è un Microsoft .NET classe libreria per la creazione di servizi Web tramite i protocolli di servizi Web più recenti. Questi protocolli sono i seguenti:
  • WS-Security
  • SecureConversation WS
  • WS-trust
  • WS-criteri
  • SecurityPolicy WS
  • WS-ADDRESSING
  • Allegati WS
Nota WSE non è incluso come parte di .NET Framework. Per ottenere WSE, visitare il sito di Web Microsoft seguenti:
http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841 (http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841)
Non è necessario utilizzare uno di questi protocolli per un Web di accedere a servizio che richiede l'autenticazione del certificato client. Tuttavia, può si desidera utilizzare la classe Microsoft.Web.Services2.Security.X509 . La classe Microsoft.Web.Services2.Security.X509 contiene metodi per accedere direttamente a un certificato client nell'archivio certificati. Se si utilizzano questi metodi, non si dispone esportare il certificato in un file.

Nel codice di esempio C# seguente viene illustrato come trovare il primo certificato è denominato SecureMathClient nell'archivio del computer locale. Quindi, questo codice di esempio utilizza il certificato per chiamare il metodo Add dell'matematiche servizio Web. La matematica di servizio Web richiede i certificati client.
...
  // TODO: Replace <SecureMathClient> with the name of the client certificate.
  string certName = "<SecureMathClient>";

  // WSE 2.0 method
  X509CertificateStore store =
    X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore);
  store.OpenRead();
  // Look for the first certificate that is named SecureMathClient.
  // Look in the local machine store.
  X509CertificateCollection col= 
    (X509CertificateCollection)store.FindCertificateBySubjectString(certName);
  X509Certificate cert =null;
  try
  { 

// This sample obtains the first matching certificate from the collection.
    cert = col[0];
  } 
  catch(Exception ex)
  {
    throw new Exception("Certificate not Found!");
  }

  // Create an instance of the Web service proxy.
  math mathservice = new math();
  // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.
  mathservice.Url = @"<https://wsserver/securemath/math.asmx>";
  mathservice.ClientCertificates.Add(cert);

  long lngResult = 0;
  try
  {
    lngResult = mathservice.Add(Int32.Parse(operand1.Text), 
        Int32.Parse(operand2.Text));
    result.Text = lngResult.ToString();
  }
  catch(Exception ex)
  {
    if(ex is WebException)
    {
      WebException we = ex as WebException;
      WebResponse webResponse = we.Response;
      throw new Exception("Exception calling method. " + ex.Message);
    }
  }

Riferimenti

Per ulteriori informazioni sulla classe System.Security.Cryptography.X509Certificates.X509Certificate , visitare il seguente sito Web di MSDN (informazioni in lingua inglese):
http://msdn2.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate(vs.71).aspx)
Per ulteriori informazioni su come chiamare un sito Web con protezione avanzata utilizzando un'applicazione Web ASP.NET, fare clic sul seguente numero dell'articolo per visualizzare l'articolo della Microsoft Knowledge Base:
817854  (http://support.microsoft.com/kb/817854/ ) Correzione: applicazione Web ASP.NET non può recapitare un certificato client a un sito Web con protezione avanzata

Le informazioni in questo articolo si applicano a:
  • Microsoft .NET Framework 1.1 alle seguenti piattaforme
    • Microsoft Internet Information Services 6.0
    • Microsoft Internet Information Services 5.0
Chiavi: 
kbmt kbcode kbwebservices kbcertservices kbhowto kbinfo KB901183 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica. Nel caso in cui si riscontrino degli errori e si desideri inviare dei suggerimenti, è possibile completare il questionario riportato alla fine del presente articolo.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 901183  (http://support.microsoft.com/kb/901183/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Traduzione articoli

 

Related Support Centers