Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel Message Security Anonymous menunjukkan cara menerapkan aplikasi Windows Communication Foundation (WCF) yang menggunakan keamanan tingkat pesan tanpa autentikasi klien tetapi memerlukan autentikasi server menggunakan sertifikat X.509 server. Semua pesan aplikasi antara klien dan server ditandatangani dan dienkripsi. Sampel ini didasarkan pada sampel WSHttpBinding . Sampel ini terdiri dari program konsol klien (.exe) dan pustaka layanan (.dll) yang dihosting oleh Internet Information Services (IIS). Layanan ini menerapkan kontrak yang mendefinisikan pola komunikasi balasan permintaan.
Nota
Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.
Sampel ini menambahkan operasi baru ke antarmuka kalkulator yang mengembalikan True jika klien tidak diautentikasi.
public class CalculatorService : ICalculator
{
public bool IsCallerAnonymous()
{
// ServiceSecurityContext.IsAnonymous returns true if the caller is not authenticated.
return ServiceSecurityContext.Current.IsAnonymous;
}
...
}
Layanan ini mengekspos satu titik akhir untuk berkomunikasi dengan layanan, yang ditentukan menggunakan file konfigurasi (Web.config). Titik akhir terdiri dari alamat, pengikatan, dan kontrak. Pengikatan dikonfigurasi dengan pengikatan wsHttpBinding . Mode keamanan default untuk pengikatan wsHttpBinding adalah Message. Atribut clientCredentialType diatur ke None.
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<!-- This configuration defines the security mode as Message and -->
<!-- the clientCredentialType as None. This mode provides -->
<!-- server authentication only using the service certificate. -->
<binding>
<security mode="Message">
<message clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
</bindings>
...
</system.serviceModel>
Kredensial yang akan digunakan untuk autentikasi layanan ditentukan dalam <perilaku>. Sertifikat server harus berisi nilai yang sama untuk SubjectName sebagai nilai yang ditentukan untuk findValue atribut seperti yang ditunjukkan dalam kode sampel berikut.
<behaviors>
<serviceBehaviors>
<behavior>
<!--
The serviceCredentials behavior allows you 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" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
Konfigurasi titik akhir klien terdiri dari alamat absolut untuk titik akhir layanan, pengikatan, dan kontrak. Mode keamanan klien untuk pengikatan wsHttpBinding adalah Message. Atribut clientCredentialType diatur ke None.
<system.serviceModel>
<client>
<endpoint name=""
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
behaviorConfiguration="ClientCredentialsBehavior"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<!--This configuration defines the security mode as -->
<!--Message and the clientCredentialType as None. -->
<binding name="Binding1">
<security mode = "Message">
<message clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
...
</system.serviceModel>
Sampel mengatur CertificateValidationMode ke PeerOrChainTrust untuk mengautentikasi sertifikat layanan. Ini dilakukan dalam file App.config klien di bagian behaviors. Ini berarti bahwa jika sertifikat berada di penyimpanan Orang Tepercaya pengguna, sertifikat tersebut dipercaya tanpa melakukan validasi rantai pengeluar sertifikat. Pengaturan ini digunakan di sini untuk kenyamanan sehingga sampel dapat dijalankan tanpa memerlukan sertifikat yang dikeluarkan oleh otoritas sertifikasi (CA). Pengaturan ini kurang aman daripada default, ChainTrust. Implikasi keamanan dari pengaturan ini harus dipertimbangkan dengan cermat sebelum menggunakan PeerOrChainTrust dalam kode produksi.
Implementasi klien menambahkan panggilan ke metode IsCallerAnonymous dan selain itu tidak berbeda dari contoh WSHttpBinding.
// Create a client with a client endpoint configuration.
CalculatorClient client = new CalculatorClient();
// Call the GetCallerIdentity operation.
Console.WriteLine("IsCallerAnonymous returned: {0}", client.IsCallerAnonymous());
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
...
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Console.WriteLine();
Console.WriteLine("Press <ENTER> to terminate client.");
Console.ReadLine();
Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan klien.
IsCallerAnonymous returned: True
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.
File batch Setup.bat yang disertakan dengan sampel Message Security Anonymous memungkinkan Anda mengonfigurasi server dengan sertifikat yang relevan untuk menjalankan aplikasi yang dihosting yang memerlukan keamanan berbasis sertifikat. File batch dapat dijalankan dalam dua mode. Untuk menjalankan file batch dalam mode komputer tunggal, ketik setup.bat di baris perintah. Untuk menjalankannya dalam mode layanan, ketik setup.bat service. Gunakan mode ini saat menjalankan sampel di seluruh komputer. Lihat prosedur penyiapan di akhir topik ini untuk detailnya.
Berikut ini memberikan gambaran singkat tentang berbagai bagian file batch:
Membuat sertifikat server.
Baris berikut dari file batch Setup.bat membuat sertifikat server yang akan digunakan.
echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -peVariabel %SERVER_NAME% menentukan nama server. Sertifikat disimpan di penyimpanan LocalMachine. Jika file batch penyiapan dijalankan dengan argumen layanan (seperti
setup.bat service) %SERVER_NAME% berisi nama domain komputer yang sepenuhnya memenuhi syarat. Jika tidak, akan default ke localhost.Menginstal sertifikat server ke penyimpanan sertifikat tepercaya klien.
Baris berikut menyalin sertifikat server ke penyimpanan orang tepercaya klien. Langkah ini diperlukan karena sertifikat yang dihasilkan oleh Makecert.exe tidak dipercaya secara implisit oleh sistem klien. Jika Anda sudah memiliki sertifikat yang berakar pada sertifikat akar tepercaya klien—misalnya, sertifikat yang dikeluarkan Microsoft—langkah mengisi penyimpanan sertifikat klien dengan sertifikat server tidak diperlukan.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeopleMemberikan izin pada kunci privat sertifikat.
Baris berikut dalam file batch Setup.bat membuat sertifikat server yang disimpan di penyimpanan LocalMachine dapat diakses oleh akun proses pekerja ASP.NET.
echo ************ echo setting privileges on server certificates echo ************ for /F "delims=" %%i in ('"%MSSDK%\bin\FindPrivateKey.exe" My LocalMachine -n CN^=%SERVER_NAME% -a') do set PRIVATE_KEY_FILE=%%i set WP_ACCOUNT=NT AUTHORITY\NETWORK SERVICE (ver | findstr "5.1") && set WP_ACCOUNT=%COMPUTERNAME%\ASPNET echo Y|cacls.exe "%PRIVATE_KEY_FILE%" /E /G "%WP_ACCOUNT%":R iisreset
Nota
Jika Anda menggunakan non-A.S. Windows edisi bahasa Inggris Anda harus mengedit file Setup.bat dan mengganti NT AUTHORITY\NETWORK SERVICE nama akun dengan setara regional Anda.
Untuk menyiapkan, mengompilasi, dan menjalankan sampel
Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.
Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.
Untuk menjalankan sampel pada komputer yang sama
Pastikan jalur menyertakan folder tempat Makecert.exe dan FindPrivateKey.exe berada.
Jalankan Setup.bat dari folder penginstalan sampel di Prompt Perintah Pengembang untuk Visual Studio yang dijalankan dengan hak istimewa administrator. Ini menginstal semua sertifikat yang diperlukan untuk menjalankan sampel.
Nota
File batch penyiapan dirancang untuk dijalankan dari Command Prompt Pengembang untuk Visual Studio. Ini mengharuskan variabel lingkungan jalur menunjuk ke direktori tempat SDK diinstal. Variabel lingkungan ini secara otomatis diatur dalam Perintah Pengembang untuk Visual Studio.
Verifikasi akses ke layanan menggunakan browser dengan memasukkan alamat
http://localhost/servicemodelsamples/service.svc.Luncurkan Client.exe dari \client\bin. Aktivitas klien ditampilkan pada aplikasi konsol klien.
Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.
Untuk menjalankan contoh program di berbagai komputer
Buat direktori pada komputer layanan. Buat aplikasi virtual bernama servicemodelsamples untuk direktori ini dengan menggunakan alat manajemen Internet Information Services (IIS).
Salin file program layanan dari \inetpub\wwwroot\servicemodelsamples ke direktori virtual di komputer layanan. Pastikan Anda menyalin file di subdirektori \bin. Salin juga file Setup.bat dan Cleanup.bat ke komputer layanan.
Buat direktori di komputer klien untuk biner klien.
Salin file program klien ke direktori klien di komputer klien. Salin juga file Setup.bat, Cleanup.bat, dan ImportServiceCert.bat ke klien.
Di server, jalankan
setup.bat servicedi Prompt Perintah Pengembang untuk Visual Studio yang dibuka dengan hak istimewa administrator. Menjalankansetup.batdengan argumenservicemembuat sertifikat layanan dengan nama domain komputer yang sepenuhnya memenuhi syarat dan mengekspor sertifikat layanan ke file bernama Service.cer.Edit Web.config untuk mencerminkan nama sertifikat baru (dalam
findValueatribut di <serviceCertificate>), yang sama dengan nama domain komputer yang sepenuhnya memenuhi syarat.Salin file Service.cer dari direktori layanan ke direktori klien di komputer klien.
Dalam file Client.exe.config di komputer klien, ubah nilai alamat titik akhir agar sesuai dengan alamat baru layanan Anda.
Pada klien, jalankan ImportServiceCert.bat di Prompt Perintah Pengembang untuk Visual Studio yang dibuka dengan privilese administrator. Ini mengimpor sertifikat layanan dari file Service.cer ke penyimpanan CurrentUser - TrustedPeople.
Di komputer klien, jalankan Client.exe dari jendela perintah. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.
Untuk membersihkan setelah pengujian sampel
- Jalankan Cleanup.bat di folder sampel setelah Anda selesai menjalankan sampel.
Nota
Skrip ini tidak menghapus sertifikat layanan pada klien saat menjalankan sampel ini di seluruh komputer. Jika Anda telah menjalankan sampel Windows Communication Foundation (WCF) yang menggunakan sertifikat di seluruh komputer, pastikan untuk menghapus sertifikat layanan yang telah diinstal di penyimpanan CurrentUser - TrustedPeople. Untuk melakukan ini, gunakan perintah berikut: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Misalnya: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.