Aracılığıyla paylaş


Özel Bağlama Güvenliği

Bu örnek, özel bağlama kullanarak güvenliği yapılandırmayı gösterir. İleti düzeyinde güvenliği güvenli bir aktarımla birlikte etkinleştirmek için özel bağlamanın nasıl kullanılacağını gösterir. bu, iletilerin istemci ve hizmet arasında iletilmesi için güvenli bir aktarım gerektiğinde ve iletilerin aynı anda ileti düzeyinde güvenli olması gerektiğinde kullanışlıdır. Bu yapılandırma, sistem tarafından sağlanan bağlamalar tarafından desteklenmez.

Bu örnek bir istemci konsol programından (EXE) ve bir hizmet konsolu programından (EXE) oluşur. Hizmet çift yönlü bir sözleşme uygular. Sözleşme, matematik işlemlerini (Ekleme, Çıkarma, Çarpma ve Bölme) kullanıma sunan arabirim tarafından ICalculatorDuplex tanımlanır. Arabirim, ICalculatorDuplex istemcinin bir oturum üzerinden çalışan bir sonucu hesaplayarak matematik işlemleri gerçekleştirmesine olanak tanır. Bağımsız olarak, hizmet arabirimde ICalculatorDuplexCallback sonuç döndürebilir. İstemci ile hizmet arasında gönderilen ileti kümesini ilişkilendirmek için bir bağlam oluşturulması gerektiğinden çift yönlü sözleşme oturum gerektirir. Çift yönlü iletişimi destekleyen ve güvenli bir özel bağlama tanımlanır.

Not

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Hizmet yapılandırması aşağıdakileri destekleyen bir özel bağlama tanımlar:

  • TLS/SSL protokolü kullanılarak korunan TCP iletişimi.

  • Windows ileti güvenliği.

Özel bağlama yapılandırması, ileti düzeyi güvenliği aynı anda etkinleştirerek güvenli aktarım sağlar. Her biri kanal yığınındaki bir katmanı temsil ettiğinden bağlama öğelerinin sıralanması özel bağlama tanımlamada önemlidir (bkz . Özel Bağlamalar). Özel bağlama, aşağıdaki örnek yapılandırmada gösterildiği gibi hizmet ve istemci yapılandırma dosyalarında tanımlanır.

<bindings>
  <!-- Configure a custom binding. -->
  <customBinding>
    <binding name="Binding1">
      <security authenticationMode="SecureConversation"
                 requireSecurityContextCancellation="true">
      </security>
      <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>
      <sslStreamSecurity requireClientCertificate="false"/>
      <tcpTransport/>
    </binding>
  </customBinding>
</bindings>

Özel bağlama, hizmetin kimliğini aktarım düzeyinde doğrulamak ve istemci ile hizmet arasında iletim sırasında iletileri korumak için bir hizmet sertifikası kullanır. Bu, bağlama öğesi tarafından sslStreamSecurity gerçekleştirilir. Hizmetin sertifikası, aşağıdaki örnek yapılandırmada gösterildiği gibi bir hizmet davranışı kullanılarak yapılandırılır.

<behaviors>
    <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
        <serviceMetadata />
        <serviceDebug includeExceptionDetailInFaults="False" />
        <serviceCredentials>
        <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
        </serviceCredentials>
    </behavior>
    </serviceBehaviors>
</behaviors>

Ayrıca özel bağlama, Windows kimlik bilgisi türüyle ileti güvenliğini kullanır. Bu, varsayılan kimlik bilgisi türüdür. Bu, bağlama öğesi tarafından security gerçekleştirilir. Kerberos kimlik doğrulama mekanizması kullanılabiliyorsa hem istemci hem de hizmetin kimlik doğrulaması ileti düzeyi güvenlik kullanılarak gerçekleştirilir. Örnek Active Directory ortamında çalıştırılırsa bu durum ortaya çıkar. Kerberos kimlik doğrulama mekanizması kullanılamıyorsa NTLM kimlik doğrulaması kullanılır. NTLM, istemcinin kimliğini hizmette doğrular, ancak istemcide hizmetin kimliğini doğrulamaz. security Bağlama öğesi kullanacak SecureConversation authenticationTypeşekilde yapılandırılır ve bu da hem istemcide hem de hizmette bir güvenlik oturumu oluşturulmasına neden olur. Bu, hizmetin çift yönlü sözleşmesinin çalışmasını sağlamak için gereklidir.

Örneği çalıştırdığınızda, işlem istekleri ve yanıtları istemcinin konsol penceresinde görüntülenir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

Press <ENTER> to terminate client.
Result(100)
Result(50)
Result(882.5)
Result(441.25)
Equation(0 + 100 - 50 * 17.65 / 2 = 441.25)

Örneği çalıştırdığınızda, hizmetten gönderilen geri arama arabiriminde istemciye döndürülen iletileri görürsünüz. Her ara sonuç görüntülenir ve ardından tüm işlemler tamamlandıktan sonra denklemin tamamı görüntülenir. İstemciyi kapatmak için ENTER tuşuna basın.

Dahil edilen Setup.bat dosyası, sertifika tabanlı güvenlik gerektiren barındırılan bir uygulamayı çalıştırmak için istemciyi ve sunucuyu ilgili hizmet sertifikasıyla yapılandırmanıza olanak tanır. Bu toplu iş dosyası, bilgisayarlar arasında çalışacak veya barındırılmayan bir durumda çalışacak şekilde değiştirilmelidir.

Aşağıda, uygun yapılandırmada çalıştırılacak şekilde değiştirilebilmeleri için bu örneğe uygulanan toplu iş dosyalarının farklı bölümlerine kısa bir genel bakış sağlanır:

  • Sunucu sertifikası oluşturuluyor.

    Setup.bat dosyasındaki aşağıdaki satırlar kullanılacak sunucu sertifikasını oluşturur. %SERVER_NAME% değişkeni sunucu adını belirtir. Kendi sunucu adınızı belirtmek için bu değişkeni değiştirin. Bu toplu iş dosyası varsayılan olarak sunucu adını localhost olarak ayarlar.

    Sertifika, Web'de barındırılan hizmetler için CurrentUser deposunda depolanır.

    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 -pe
    
  • Sunucu sertifikasını istemcinin güvenilen sertifika deposuna yükleme.

    Setup.bat dosyasındaki aşağıdaki satırlar sunucu sertifikasını istemcinin güvenilen kişiler deposuna kopyalar. Makecert.exe tarafından oluşturulan sertifikalara istemci sistemi tarafından örtük olarak güvenilmediğinden bu adım gereklidir. İstemci güvenilen kök sertifikasında (örneğin, Microsoft tarafından verilen bir sertifika) köke sahip bir sertifikanız zaten varsa, istemci sertifika depoyu sunucu sertifikasıyla doldurma adımı gerekli değildir.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
    

    Not

    Setup.bat toplu iş dosyası, Visual Studio 2010 Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. MSSDK ortam değişkeninin SDK'nın yüklü olduğu dizine işaret etmelerini gerektirir. Bu ortam değişkeni, Visual Studio 2010 Komut İstemi içinde otomatik olarak ayarlanır.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek veya bilgisayarlar arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.

Örneği aynı bilgisayarda çalıştırmak için

  1. Yönetici ayrıcalıklarıyla Visual Studio için Geliştirici Komut İstemi penceresi açın ve örnek yükleme klasöründen Setup.bat çalıştırın. Bu, örneği çalıştırmak için gereken tüm sertifikaları yükler.

    Not

    Setup.bat toplu iş dosyası, Visual Studio Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. Visual Studio Komut İstemi içinde ayarlanan PATH ortam değişkeni, Setup.bat betiği tarafından gereken yürütülebilir dosyaları içeren dizine işaret eder.

  2. \service\bin konumundan Service.exe başlatın.

  3. \client\bin konumundan Client.exe başlatın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.

  4. İstemci ve hizmet iletişim kuramıyorsa bkz . WCF Örnekleri için Sorun Giderme İpuçları.

Örneği bilgisayarlar arasında çalıştırmak için

  1. Hizmet bilgisayarında:

    1. Hizmet bilgisayarında servicemodelsamples adlı bir sanal dizin oluşturun.

    2. \inetpub\wwwroot\servicemodelsamples hizmet programı dosyalarını hizmet bilgisayarındaki sanal dizine kopyalayın. \bin alt dizinindeki dosyaları kopyaladığınızdan emin olun.

    3. Setup.bat ve Cleanup.bat dosyalarını hizmet bilgisayarına kopyalayın.

    4. Yönetici ayrıcalıklarıyla açılan Visual Studio için Geliştirici Komut İstemi'nde aşağıdaki komutu çalıştırın: Setup.bat service. Bu, toplu iş dosyasının çalıştırıldığı bilgisayarın adıyla eşleşen konu adıyla hizmet sertifikasını oluşturur.

      Not

      Setup.bat toplu iş dosyası, Visual Studio 2010 Komut İsteminden çalıştırılacak şekilde tasarlanmıştır. Yol ortamı değişkeninin SDK'nın yüklü olduğu dizine işaret etmelerini gerektirir. Bu ortam değişkeni, Visual Studio 2010 Komut İstemi içinde otomatik olarak ayarlanır.

    5. <Service.exe.config dosyasının içindeki serviceCertificate> değerini, önceki adımda oluşturulan sertifikanın konu adını yansıtacak şekilde değiştirin.

    6. Komut isteminden Service.exe çalıştırın.

  2. İstemci bilgisayarda:

    1. \client\bin\ klasöründeki istemci program dosyalarını istemci bilgisayara kopyalayın. Ayrıca Cleanup.bat dosyasını kopyalayın.

    2. Önceki örneklerden eski sertifikaları kaldırmak için Cleanup.bat çalıştırın.

    3. Yönetim ayrıcalıklarıyla Visual Studio için Geliştirici Komut İstemi açarak ve hizmet bilgisayarında aşağıdaki komutu çalıştırarak (hizmetin çalıştığı bilgisayarın tam adıyla değiştirin %SERVER_NAME% ) hizmetin sertifikasını dışarı aktarın:

      certmgr -put -r LocalMachine -s My -c -n %SERVER_NAME% %SERVER_NAME%.cer
      
    4. %SERVER_NAME%.cer istemci bilgisayara kopyalayın (%SERVER_NAME% değerini hizmetin çalıştığı bilgisayarın tam adıyla değiştirin).

    5. Yönetim ayrıcalıklarıyla Visual Studio için Geliştirici Komut İstemi açarak ve istemci bilgisayarda aşağıdaki komutu çalıştırarak hizmetin sertifikasını içeri aktarın (%SERVER_NAME% değerini hizmetin çalıştığı bilgisayarın tam adıyla değiştirin):

      certmgr.exe -add -c %SERVER_NAME%.cer -s -r CurrentUser TrustedPeople
      

      Sertifika Bir Güvenilen Veren tarafından verildiyse c, d ve e adımları gerekli değildir.

    6. İstemcinin App.config dosyasını aşağıdaki gibi değiştirin:

      <client>
          <endpoint name="default"
              address="net.tcp://ReplaceThisWithServiceMachineName:8000/ServiceModelSamples/Service"
              binding="customBinding"
              bindingConfiguration="Binding1"
              contract="Microsoft.ServiceModel.Samples.ICalculatorDuplex"
              behaviorConfiguration="CalculatorClientBehavior" />
      </client>
      
    7. Hizmet bir etki alanı ortamında NetworkService veya LocalSystem hesabı dışında bir hesap altında çalışıyorsa, istemcinin App.config dosyasındaki hizmet uç noktasının uç nokta kimliğini, hizmeti çalıştırmak için kullanılan hesaba göre uygun UPN veya SPN'yi ayarlamak üzere değiştirmeniz gerekebilir. Uç nokta kimliği hakkında daha fazla bilgi için Hizmet Kimliği ve Kimlik Doğrulaması konusuna bakın.

    8. Komut isteminden Client.exe çalıştırın.

Örnekten sonra temizlemek için

  • Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.bat çalıştırın.