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

Traduzione articoli Traduzione articoli
Identificativo articolo: 901183 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

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 anche validi per quando si effettua una richiesta HTTP diretta utilizzando la classe di HttpWebRequest , se non richiama un servizio Web.

INTRODUZIONE

Servizi Web devono spesso autenticare applicazioni che chiamano i servizi Web. I servizi Web č necessario eseguire autenticazioni della chiamata di applicazioni prima che i servizi Web č possono eseguire le autorizzazioni. Una tecnica di autenticazione consiste nel richiedere applicazioni che chiamano il servizio Web per presentare un certificato client.

Quando un'applicazione Web ASP.NET tenta di chiamare un servizio Web che utilizza l'autenticazione basata su certificati, potresti ricevere un messaggio di errore di "accesso negato". Quando un'applicazione console o un'applicazione Microsoft Windows Form chiama lo stesso servizio Web, non visualizzato un messaggio.

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

Informazioni

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

Nota Č necessario disporre di Microsoft .NET Framework 1.1 Service Pack 1 (SP1) per poter utilizzare i certificati client di archivio del computer locale.

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

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

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

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

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 per concedere l'accesso al certificato client per altri account utente ad esempio l'account servizio di rete. Per effettuare questa operazione, attenersi alla seguente procedura:
  1. Scaricare e installare Microsoft Windows HTTP strumento di configurazione di Servizi certificati. Per ottenere lo strumento, il seguente sito Microsoft Web:
    http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f
  2. Eseguire il comando seguente al prompt dei comandi:
    winhttpcertcfg PFXFile -i - c LOCAL_MACHINE\My - a IWAM_TESTMACHINE -p PFXPassword
    Nota PfxFile č il nome del file pfx. Password č la password per il file pfx. Se il file non richiede una password, omettere il -p parametro.

    In genere, il file WinHttpCertCfg.exe si trova nella seguente cartella:
    C:\Programmi\Windows Resource Kits\Tools
Se non hanno accesso a un file PFX e avere installato Servizi certificati Microsoft in un computer che esegue Microsoft Windows Server 2003 o Microsoft Windows 2000 Server, č possibile richiedere e installare il certificato client direttamente nell'archivio computer locale. Per effettuare questa operazione, attenersi alla seguente procedura:
  1. Accedere al computer client con un account utente che dispone di 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, 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. Nel Tipo di certificato richiesto sezione, fare clic su Certificato di autenticazione client .
  7. Nella sezione Opzioni chiave , fare clic per selezionare la casella di controllo Archivia certificato nell'archivio certificati del computer locale e quindi fare clic su Invia .

    Annotare l'ID richiesta del certificato client.
  8. Nel Potenziale violazione dello script di finestra di dialogo fare clic su .
  9. Dopo che la CA ha rilasciato il certificato client, fare clic su Home e quindi scegliere Visualizza lo stato di una richiesta di certificato in sospeso .
  10. Fare clic su richiesta di certificato inviate nel passaggio 7 in Selezionare la richiesta di certificato che si desidera visualizzare .
  11. Fare clic su Installa questo certificato e quindi fare clic su nella finestra di dialogo Potenziale violazione dello script .

Passaggio 2: Configurare accesso il certificato client

In questo passaggio, č necessario concedere le autorizzazioni per l'account ASP.NET accedere al certificato client memorizzato nell'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 account di servizio di rete. Se č stato configurato un account personalizzato per l'esecuzione di ASP.NET, č necessario concedere l'accesso per l'account personalizzato.

Nota In Microsoft Internet Information Server (IIS) 5.0, viene eseguito ASP.NET sotto il ASPNET account e non sono sotto il servizio di rete dell'account. Di conseguenza, č necessario per concedere autorizzazioni per l'account ASPNET in un computer che esegue IIS 5.0.

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

Il comando della riga di comando riportato di seguito č un esempio di come concedere l'accesso al certificato client per l'account servizio di rete in Microsoft Internet Information Services (IIS) 6.0:
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "NetworkService"
Il comando della riga di comando riportato di seguito č un esempio su come concedere l'accesso al certificato client per 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 del certificato client e il processo di configurazione dell'accesso al certificato client in un passaggio. Ad esempio, il comando della riga di comando riportato di seguito esegue entrambi i processi:
Winhttpcertcfg.exe PFXFile -i - c LOCAL_MACHINE\My - a ? AccountName ?

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

Se un'applicazione interattiva, ad esempio un'applicazione di Windows Form o di un'applicazione della riga di comando č possibile accedere il certificato client, il certificato di client giā viene memorizzato nell'archivio utente locale. Tuttavia, se un'applicazione di servizio come un'applicazione Web ASP.NET non č in grado di accedere lo stesso certificato client, il certificato del client potrebbe non essere archiviato nell'archivio locale del computer.

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

Nota Se il certificato client č giā nell'archivio locale del computer o se č possibile installare il certificato client direttamente nell'archivio computer locale come nel passaggio 1, andare al passaggio 4. Tuttavia, se si utilizza il passaggio 3, č necessario quindi tornare al passaggio 2 per concedere accesso il certificato client.

Per copiare il certificato client in archivio del computer locale, attenersi alla seguente procedura:
  1. Fare clic su Start , scegliere Esegui , digitare mmc e quindi fare clic su OK .
  2. Scegliere Aggiungi/Rimuovi snap-in dal menu file , quindi Aggiungi .
  3. Nella finestra di dialogo Aggiungi snap-in autonomo fare clic su certificati fare clic su Aggiungi , selezionare account del computer , fare clic su Avanti e quindi fare clic su Fine .
  4. Nella finestra di dialogo Aggiungi snap-in autonomo 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 quindi fare clic su OK .
  6. Per esportare il certificato 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 fare clic su Tutte le attivitā , fare clic su Esporta e quindi fare clic su Avanti .
    3. L'opzione Esporta la chiave privata non č disponibile, l'applicazione Web ASP.NET non possibile utilizzare il certificato client. Č necessario ottenere un altro certificato client. Per effettuare questa operazione, seguire le istruzioni nel passaggio 1 e nel passaggio 2. 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 finestra di dialogo fare clic su OK .
  7. Per importare il certificato 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 specificati nel passaggio 6 d e quindi fare clic su Avanti due volte.
    5. Fare clic su Fine e quindi fare clic su 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ā stato installato il certificato principale per la CA, č possibile omettere il passaggio 4.

Per impostazione predefinita, Windows ha i certificati principali di molte CA esterne giā preinstallato nell'archivio certificati radice attendibili.
Verificare che sia installato il certificato principale
Per verificare che il certificato principale per la CA č installato, attenersi alla seguente procedura:
  1. Fare clic su Start , scegliere Esegui , digitare mmc e quindi fare clic su OK .
  2. Scegliere Aggiungi/Rimuovi snap-in dal menu file , quindi Aggiungi .
  3. Nella finestra di dialogo Aggiungi snap-in autonomo fare clic su certificati fare clic su Aggiungi , selezionare account del computer , fare clic su Avanti e quindi fare clic su Fine .
  4. Fare clic su Chiudi e quindi fare clic su OK .
  5. Espandere certificati (computer locale) , espandere Autoritā di certificazione fonti attendibili e quindi fare clic su certificati .
  6. Nel riquadro di destra verificare che l'opzione il certificato principale dell'autoritā di certificazione che si desidera utilizzare sia elencato.
Installare il certificato principale
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 č stato emesso per l'utente in un file di certificato ad esempio un file con estensione cer, un file DER o un file pfx, attenersi alla seguente procedura:
  1. Espandere certificati (computer locale) , fare clic con il pulsante destro del mouse Autoritā di certificazione principale attendibili , fare clic su Tutte le attivitā e quindi fare clic su Importa .
  2. Nell' Importazione guidata certificati fare clic su Avanti , nella finestra di dialogo e quindi nella casella nome file digitare il nome del file di certificato e scegliere Avanti due volte.
  3. Fare clic su Fine e quindi fare clic su OK .
Richiesta del certificato principale
Se la CA che si desidera utilizzare č incluso nel database di installazione di Servizi certificati Microsoft, č possibile richiedere il certificato principale. Per effettuare questa operazione, attenersi alla seguente procedura:
  1. In Internet Explorer, visitare il sito Web di CA. Ad esempio, se il server della CA č denominato CAServer, il seguente sito Web:
    http://CAServer/certsrv
  2. Fare clic su Scarica un certificato CA, catena di certificati o CRL e quindi su Download CA certificato .
  3. Nella finestra di dialogo Download File fare clic su Salva .
  4. Nella casella finestra di dialogo immettere il percorso in cui si desidera salvare il file di certificato e scegliere Salva .
  5. Dopo aver salvato il file del certificato principale, utilizzare i passaggi nella sezione "Installare il certificato principale" per installare il file del certificato nell'archivio del autoritā di certificazione principale attendibili.

Chiamare il servizio Web

Dopo aver installato il certificato client nell'archivio del computer locale o l'archivio utente locale, č possibile accedere il certificato client dall'applicazione Web ASP.NET per chiamare il servizio Web. La procedura per accedere al certificato client č lo stesso 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 con codifica DER. Č necessario esportare la chiave perché la classe System.Security.Cryptography.X509Certificates.X509Certificate non contiene metodi per accedere direttamente i dettagli di un certificato da un archivio certificati. Di conseguenza, l'applicazione deve leggere il dei dettagli di un certificato da un file con codifica DER.

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

Nel codice di esempio C# riportato di seguito viene 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 con i protocolli pių recenti dei servizi Web. Questi protocolli includono:
  • WS-Security
  • Specifica WS-SecureConversation
  • Ws-trust
  • WS-Policy
  • Specifica WS-SecurityPolicy
  • WS-Addressing
  • WS-Attachments
Nota WSE non č incluso come parte di .NET Framework. Per ottenere WSE, il seguente sito Microsoft Web:
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 dei certificati client. Č possibile tuttavia 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 č necessario esportare il certificato in un file.

Il codice di esempio C# riportato di seguito viene illustrato come trovare il certificato primo č denominato SecureMathClient nell'archivio locale del computer. Quindi, questo codice di esempio utilizza il certificato per chiamare il metodo Add del servizio Web math. Il servizio Web math richiede 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 MSDN (informazioni in lingua inglese):
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 numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
817854FIX: Applicazione Web ASP.NET non puō inviare un certificato client a un sito Web con protezione avanzata

Proprietā

Identificativo articolo: 901183 - Ultima modifica: giovedė 13 dicembre 2007 - Revisione: 3.2
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 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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 901183
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.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com