Aracılığıyla paylaş


Nasıl Yapılır: X.509 Sertifikası ile Bir Hizmeti Güvenli Hale Getirme

Bir hizmetin X.509 sertifikasıyla güvenliğini sağlamak, Windows Communication Foundation'daki (WCF) bağlamaların çoğunun kullandığı temel bir tekniktir. Bu konu başlığında, X.509 sertifikasıyla şirket içinde barındırılan bir hizmeti yapılandırma adımları açıklanmaktadır.

Önkoşul, sunucunun kimliğini doğrulamak için kullanılabilecek geçerli bir sertifikadır. Sertifika, güvenilen bir sertifika yetkilisi tarafından sunucuya verilmelidir. Sertifika geçerli değilse, hizmeti kullanmaya çalışan hiçbir istemci hizmete güvenmez ve sonuç olarak hiçbir bağlantı yapılmaz. Sertifikaları kullanma hakkında daha fazla bilgi için bkz . Sertifikalarla Çalışma.

Bir hizmeti kod kullanarak sertifikayla yapılandırmak için

  1. Hizmet sözleşmesini ve uygulanan hizmeti oluşturun. Daha fazla bilgi için bkz . Hizmetleri Tasarlama ve Uygulama.

  2. Sınıfının bir örneğini WSHttpBinding oluşturun ve aşağıdaki kodda gösterildiği gibi güvenlik modunu Messageolarak ayarlayın.

    // Create a binding and set the security mode to Message.
    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    ' Create a binding and set the security mode to Message.
    Dim b As New WSHttpBinding(SecurityMode.Message)
    
  3. Aşağıdaki kodda gösterildiği gibi, her biri sözleşme türü ve uygulanan sözleşme için birer tane olan iki Type değişken oluşturun.

    Type contractType = typeof(ICalculator);
    Type implementedContract = typeof(Calculator);
    
    Dim contractType = GetType(ICalculator)
    Dim implementedContract = GetType(Calculator)
    
  4. Hizmetin temel adresi için sınıfının bir örneğini Uri oluşturun. WSHttpBinding HTTP aktarımını kullandığından, Tekdüzen Kaynak Tanımlayıcısı (URI) bu şemayla başlamalıdır, aksi takdirde hizmet açıldığında Windows Communication Foundation (WCF) bir özel durum oluşturur.

    Uri baseAddress = new Uri("http://localhost:8044/base");
    
    Dim baseAddress As New Uri("http://localhost:8044/base")
    
  5. Uygulanan sözleşme türü değişkeni ve URI ile sınıfının yeni bir örneğini ServiceHost oluşturun.

    ServiceHost sh = new ServiceHost(implementedContract, baseAddress);
    
    Dim sh As New ServiceHost(implementedContract, baseAddress)
    
  6. yöntemini kullanarak AddServiceEndpoint hizmete bir ServiceEndpoint ekleyin. Aşağıdaki kodda gösterildiği gibi sözleşmeyi, bağlamayı ve uç nokta adresini oluşturucuya geçirin.

    sh.AddServiceEndpoint(contractType, b, "Calculator");
    
    sh.AddServiceEndpoint(contractType, b, "Calculator")
    
  7. isteğe bağlı. Hizmetten meta verileri almak için yeni ServiceMetadataBehavior bir nesne oluşturun ve özelliğini olarak trueayarlayınHttpGetEnabled.

    ServiceMetadataBehavior sm = new ServiceMetadataBehavior();
    sm.HttpGetEnabled = true;
    sh.Description.Behaviors.Add(sm);
    
    Dim sm As New ServiceMetadataBehavior()
    sm.HttpGetEnabled = True
    
    With sh
        .Description.Behaviors.Add(sm)
    
  8. SetCertificate Geçerli sertifikayı X509CertificateRecipientServiceCredential hizmete eklemek için sınıfının yöntemini kullanın. yöntemi, sertifika bulmak için çeşitli yöntemlerden birini kullanabilir. Bu örnekte sabit listesi kullanılır FindBySubjectName . Numaralandırma, sağlanan değerin sertifikanın verildiği varlığın adı olduğunu belirtir.

    sh.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine ,StoreName.My,
        X509FindType.FindBySubjectName ,"localhost");
    
    .Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, _
                                                   StoreName.My, _
                                                   X509FindType.FindBySubjectName, _
                                                   "localhost")
    
  9. Open Hizmeti dinlemeye başlamak için yöntemini çağırın. Konsol uygulaması oluşturuyorsanız, hizmeti dinleme durumunda tutmak için yöntemini çağırın ReadLine .

    sh.Open();
    Console.WriteLine("Listening");
    Console.ReadLine();
    
    .Open()
    Console.WriteLine("Listening")
    Console.ReadLine()
    

Örnek

Aşağıdaki örnek, X.509 sertifikasına sahip bir hizmeti yapılandırmak için yöntemini kullanır SetCertificate .

// Create a binding and set the security mode to Message.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);

Type contractType = typeof(ICalculator);
Type implementedContract = typeof(Calculator);

Uri baseAddress = new Uri("http://localhost:8044/base");

ServiceHost sh = new ServiceHost(implementedContract, baseAddress);

sh.AddServiceEndpoint(contractType, b, "Calculator");

ServiceMetadataBehavior sm = new ServiceMetadataBehavior();
sm.HttpGetEnabled = true;
sh.Description.Behaviors.Add(sm);

sh.Credentials.ServiceCertificate.SetCertificate(
    StoreLocation.LocalMachine ,StoreName.My,
    X509FindType.FindBySubjectName ,"localhost");

sh.Open();
Console.WriteLine("Listening");
Console.ReadLine();
sh.Close();
' Create a binding and set the security mode to Message.
Dim b As New WSHttpBinding(SecurityMode.Message)

Dim contractType = GetType(ICalculator)
Dim implementedContract = GetType(Calculator)

Dim baseAddress As New Uri("http://localhost:8044/base")

Dim sh As New ServiceHost(implementedContract, baseAddress)

sh.AddServiceEndpoint(contractType, b, "Calculator")

Dim sm As New ServiceMetadataBehavior()
sm.HttpGetEnabled = True

With sh
    .Description.Behaviors.Add(sm)

    .Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, _
                                                   StoreName.My, _
                                                   X509FindType.FindBySubjectName, _
                                                   "localhost")

    .Open()
    Console.WriteLine("Listening")
    Console.ReadLine()
    .Close()
End With

Kod Derleniyor

Kodu derlemek için aşağıdaki ad alanları gereklidir:

Ayrıca bkz.