Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio MessageSecurity dimostra come implementare un'applicazione che utilizza basicHttpBinding e la sicurezza dei messaggi. Questo esempio si basa sull'Introduzione che implementa un servizio calcolatrice.
Annotazioni
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.
La modalità di sicurezza di basicHttpBinding può essere impostata sui valori seguenti: Message, TransportTransportWithMessageCredential, TransportCredentialOnly e None. Nel seguente file di servizio di esempio App.config, la definizione dell'endpoint specifica basicHttpBinding e fa riferimento a una configurazione di associazione denominata Binding1, come illustrato nella configurazione di esempio seguente:
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by -->
<!-- host: http://localhost:8000/ServiceModelSamples/service.-->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
...
</system.serviceModel>
La configurazione dell'associazione imposta l'attributo mode della <sicurezza> su Message e imposta l'attributo clientCredentialType del <messaggio> su Certificate come illustrato nella configurazione di esempio seguente:
<bindings>
<basicHttpBinding>
<!--
This configuration defines the SecurityMode as Message and
the clientCredentialType as Certificate.
-->
<binding name="Binding1" >
<security mode = "Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
Il certificato usato dal servizio per l'autenticazione al client viene impostato nella sezione comportamenti del file di configurazione sotto l'elemento serviceCredentials . La modalità di convalida che si applica al certificato usato dal client per l'autenticazione al servizio viene impostata anche nella sezione comportamenti dell'elemento clientCertificate .
<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--The serviceCredentials behavior allows one to define a -->
<!--service certificate. A service certificate is used by a -->
<!--client to authenticate the service and provide message -->
<!-- protection. This configuration references the "localhost"-->
<!--certificate installed during the setup instructions. -->
<serviceCredentials>
<serviceCertificate findValue="localhost"
storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!-- Setting the certificateValidationMode to -->
<!-- PeerOrChainTrust means that if the certificate -->
<!--is in the user's Trusted People store, then it is -->
<!-- trusted without performing a validation of the -->
<!-- certificate's issuer chain. This setting is used -->
<!-- here for convenience so that the sample can be run -->
<!-- without having to have certificates issued by a -->
<!-- certification authority (CA). -->
<!-- This setting is less secure than the default, -->
<!-- ChainTrust. The security implications of this -->
<!-- setting should be carefully considered before using -->
<!-- PeerOrChainTrust in production code. -->
<authentication
certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Gli stessi dettagli di associazione e sicurezza vengono specificati nel file di configurazione del client.
L'identità del chiamante viene visualizzata nella finestra della console del servizio usando il codice seguente:
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per chiudere il client.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Per configurare e compilare l'esempio
Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.
Per compilare l'edizione C# o Visual Basic .NET della soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.
Per eseguire l'esempio nello stesso computer
Eseguire Setup.bat dalla cartella di installazione di esempio. Vengono installati tutti i certificati necessari per l'esecuzione dell'esempio.
Annotazioni
Il Setup.bat file batch è progettato per l'esecuzione da un prompt dei comandi di Windows SDK. Richiede che la variabile di ambiente MSSDK punti alla directory in cui è installato l'SDK. Questa variabile di ambiente viene impostata automaticamente all'interno di un prompt dei comandi di Windows SDK.
Eseguire l'applicazione di servizio da \service\bin.
Eseguire l'applicazione client da \client\bin. L'attività client viene visualizzata nell'applicazione console client.
Se il client e il servizio non sono in grado di comunicare, vedere Suggerimenti per la risoluzione dei problemi per gli esempi WCF.
Rimuovere i certificati eseguendo Cleanup.bat al termine dell'esempio. Altri esempi di sicurezza usano gli stessi certificati.
Per eseguire l'esempio tra computer
Creare una directory nel computer del servizio per i file binari del servizio.
Copia i file del programma di servizio nella directory del servizio sul server. Copiare anche i file Setup.bat, Cleanup.bate ImportClientCert.bat nel server.
Creare una directory nel computer client per i file binari del client.
Copiare i file di programma client nella directory client nel computer client. Copiare anche i file Setup.bat, Cleanup.bate ImportServiceCert.bat nel client.
Nel server eseguire
setup.bat service. L'esecuzionesetup.batcon l'argomentoservicecrea un certificato del servizio con il nome di dominio completo del computer ed esporta il certificato del servizio in un file denominato Service.cer.Modificare Service.exe.config in modo da riflettere il nuovo nome del certificato (nell'attributo nell'elemento
findValue<serviceCertificate> ) che corrisponde al nome di dominio completo del computer. Modificare anche il valore dell'indirizzo di base per specificare un nome di computer completo anziché localhost.Copiare il file Service.cer dalla directory del servizio alla directory client nel computer client.
Nel client eseguire
setup.bat client. L'esecuzione disetup.batcon l'argomentoclientcrea un certificato client denominato client.com ed esporta il certificato client in un file denominato Client.cer.Nel file Client.exe.config sul computer del client, modifica il valore dell'indirizzo dell'endpoint per farlo corrispondere al nuovo indirizzo del tuo servizio. Per fare ciò, sostituire localhost con il nome di dominio completo del server. Modificare anche l'attributo
findValuedi <defaultCertificate> con il nuovo nome del certificato del servizio, ovvero il nome di dominio completo del server.Copiare il file Client.cer dalla directory client alla directory del servizio nel server.
Nel client eseguire ImportServiceCert.bat. Questo importa il certificato del servizio dal file Service.cer nell'archivio CurrentUser - TrustedPeople.
Nel server eseguire ImportClientCert.bat, importa il certificato client dal file Client.cer nell'archivio LocalMachine - TrustedPeople.
Nella macchina del servizio eseguire Service.exe da un prompt dei comandi.
Sulla macchina client, avvia Client.exe da una finestra del prompt dei comandi.
- Se il client e il servizio non sono in grado di comunicare, vedere Suggerimenti per la risoluzione dei problemi per gli esempi WCF.
Per eseguire la pulizia dopo l'esempio
Eseguire Cleanup.bat nella cartella samples dopo aver completato l'esecuzione dell'esempio.
Annotazioni
Questo script non rimuove i certificati del servizio in un client durante l'esecuzione di questo esempio tra computer. Se hai eseguito esempi di Windows Communication Foundation (WCF) che utilizzano certificati tra diverse macchine, assicurati di cancellare i certificati di servizio installati nell'archivio CurrentUser - TrustedPeople. A tale scopo, usare il comando seguente: Ad esempio:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com