Instrukcje: Korzystanie z zabezpieczeń transportu i poświadczeń komunikatów
Artykuł
Zabezpieczanie usługi przy użyciu zarówno poświadczeń transportu, jak i komunikatów korzysta z najlepszych trybów zabezpieczeń transportu i komunikatów w programie Windows Communication Foundation (WCF). Podsumowując, zabezpieczenia warstwy transportu zapewniają integralność i poufność, podczas gdy zabezpieczenia warstwy komunikatów zapewniają różne poświadczenia, które nie są możliwe z rygorystycznymi mechanizmami zabezpieczeń transportu. W tym temacie przedstawiono podstawowe kroki implementowania transportu przy użyciu poświadczeń komunikatów WSHttpBinding przy użyciu powiązań i NetTcpBinding . Aby uzyskać więcej informacji na temat ustawiania trybu zabezpieczeń, zobacz Instrukcje: ustawianie trybu zabezpieczeń.
Podczas ustawiania trybu zabezpieczeń na TransportWithMessageCredentialwartość transport określa rzeczywisty mechanizm zapewniający zabezpieczenia na poziomie transportu. W przypadku protokołu HTTP mechanizm to Secure Sockets Layer (SSL) za pośrednictwem protokołu HTTP (HTTPS); dla protokołu TCP jest to protokół SSL za pośrednictwem protokołu TCP lub Windows.
Jeśli transport to HTTP (przy użyciu WSHttpBindingprotokołu ), protokół SSL za pośrednictwem protokołu HTTP zapewnia zabezpieczenia na poziomie transportu. W takim przypadku należy skonfigurować komputer hostujący usługę przy użyciu certyfikatu SSL powiązanego z portem, jak pokazano w dalszej części tego tematu.
Jeśli transport to TCP (przy użyciu NetTcpBindingprotokołu ), domyślnie zapewniane zabezpieczenia na poziomie transportu to zabezpieczenia systemu Windows lub protokół SSL za pośrednictwem protokołu TCP. W przypadku korzystania z protokołu SSL za pośrednictwem protokołu TCP należy określić certyfikat przy użyciu metody , jak pokazano w dalszej części tego tematu SetCertificate .
Aby użyć usługi WSHttpBinding z certyfikatem na potrzeby zabezpieczeń transportu (w kodzie)
Utwórz wystąpienie Uri klasy z odpowiednim adresem podstawowym. Należy pamiętać, że adres musi używać schematu "HTTPS" i musi zawierać rzeczywistą nazwę maszyny oraz numer portu, z którą jest powiązany certyfikat SSL. (Alternatywnie można ustawić adres podstawowy w konfiguracji).
Utwórz wystąpienie ServiceHost metody i wywołaj metodę Open , jak pokazano w poniższym kodzie.
C#
WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.TransportWithMessageCredential;
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
// The SSL certificate is bound to port 8006 using the HttpCfg.exe tool.
Uri httpsAddress = new Uri("https://localMachineName:8006/base");
ServiceHost sh = new ServiceHost(typeof(Calculator), httpsAddress);
sh.AddServiceEndpoint(typeof(ICalculator), b, "HttpsCalculator");
sh.Open();
Console.WriteLine("Listening");
Console.ReadLine();
Dim b As New WSHttpBinding()
b.Security.Mode = SecurityMode.TransportWithMessageCredential
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
' The SSL certificate is bound to port 8006 using the HttpCfg.exe tool.
Dim httpsAddress As New Uri("https://localMachineName:8006/base")
Dim sh As New ServiceHost(GetType(Calculator), httpsAddress)
sh.AddServiceEndpoint(GetType(ICalculator), b, "HttpsCalculator")
sh.Open()
Console.WriteLine("Listening")
Console.ReadLine()
Aby użyć narzędzia NetTcpBinding z certyfikatem na potrzeby zabezpieczeń transportu (w kodzie)
Utwórz wystąpienie Uri klasy z odpowiednim adresem podstawowym. Należy pamiętać, że adres musi używać schematu "net.tcp". (Alternatywnie można ustawić adres podstawowy w konfiguracji).
Wywołaj metodę Open , jak pokazano w poniższym kodzie.
C#
NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Uri netTcpAddress = new Uri("net.tcp://baseAddress");
ServiceHost sh = new ServiceHost(typeof(Calculator), netTcpAddress);
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindByIssuerName, "Contoso.com");
sh.AddServiceEndpoint(typeof(ICalculator), b, "TcpCalculator");
sh.Open();
Console.WriteLine("Listening");
Console.ReadLine();
Dim b As New NetTcpBinding(SecurityMode.TransportWithMessageCredential)
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
Dim netTcpAddress As New Uri("net.tcp://baseAddress")
Dim sh As New ServiceHost(GetType(Calculator), netTcpAddress)
sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, "Contoso.com")
sh.AddServiceEndpoint(GetType(ICalculator), b, "TcpCalculator")
sh.Open()
Console.WriteLine("Listening")
Console.ReadLine()
Aby użyć narzędzia NetTcpBinding z systemem Windows na potrzeby zabezpieczeń transportu (w kodzie)
Ustaw zabezpieczenia transportu, aby używać systemu Windows, ustawiając wartość ClientCredentialTypeWindowsna . (Należy pamiętać, że jest to wartość domyślna).
Utwórz wystąpienie Uri klasy z odpowiednim adresem podstawowym. Należy pamiętać, że adres musi używać schematu "net.tcp". (Alternatywnie można ustawić adres podstawowy w konfiguracji).
Wywołaj metodę Open , jak pokazano w poniższym kodzie.
C#
NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Uri netTcpAddress = new Uri("net.tcp://Tcp");
ServiceHost sh = new ServiceHost(typeof(Calculator), netTcpAddress);
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine, StoreName.My,
X509FindType.FindByIssuerName, "Contoso.com");
sh.AddServiceEndpoint(typeof(ICalculator), b, "TcpCalculator");
sh.Open();
Console.WriteLine("Listening");
Console.ReadLine();
Dim b As New NetTcpBinding(SecurityMode.TransportWithMessageCredential)
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
Dim netTcpAddress As New Uri("net.tcp://Tcp")
Dim sh As New ServiceHost(GetType(Calculator), netTcpAddress)
sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, "Contoso.com")
sh.AddServiceEndpoint(GetType(ICalculator), b, "TcpCalculator")
sh.Open()
Console.WriteLine("Listening")
Console.ReadLine()
Korzystanie z konfiguracji
Aby użyć usługi WSHttpBinding
Skonfiguruj komputer przy użyciu certyfikatu SSL powiązanego z portem. (Aby uzyskać więcej informacji, zobacz Instrukcje: konfigurowanie portu przy użyciu certyfikatu SSL). Nie trzeba ustawiać <transport> wartości elementu przy użyciu tej konfiguracji.
Określ typ poświadczeń klienta dla zabezpieczeń na poziomie komunikatu. Poniższy przykład ustawia clientCredentialType atrybut elementu <message> na UserNamewartość .
Aby użyć narzędzia NetTcpBinding z certyfikatem na potrzeby zabezpieczeń transportu
W przypadku protokołu SSL za pośrednictwem protokołu TCP należy jawnie określić certyfikat w elemecie <behaviors> . Poniższy przykład określa certyfikat przez jego wystawcę w domyślnej lokalizacji magazynu (komputera lokalnego i magazynów osobistych).
As an Information Security Administrator, you plan and implement information security of sensitive data by using Microsoft Purview and related services. You’re responsible for mitigating risks by protecting data inside collaboration environments that are managed by Microsoft 365 from internal and external threats and protecting data used by AI services. You also implement information protection, data loss prevention, retention, insider risk management, and manage information security alerts and activities.
Dowiedz się więcej o głównych mechanizmach zabezpieczeń transportu w powiązaniach dostarczanych przez system WCF. Te mechanizmy zabezpieczeń zależą od powiązania i używanego transportu.
Dowiedz się, jak ustawić trzy typowe tryby zabezpieczeń WCF dla większości wstępnie zdefiniowanych powiązań: Transport, Message i TransportWithMessageCredential.
Dowiedz się, jak wybrać odpowiednie powiązanie dla Twoich potrzeb związanych z zabezpieczeniami. Powiązania dostarczane przez system zawarte w programie WCF zapewniają szybki sposób programowania aplikacji WCF.
Dowiedz się więcej na temat poświadczeń, sposobu ich użycia w programie WCF oraz sposobu wybierania odpowiednich poświadczeń dla aplikacji w celu ustanowienia tożsamości lub możliwości oświadczeń.
Dowiedz się, jak usługa WCF może określić sposób uwierzytelniania klienta w tej usłudze. W tym przykładzie określono certyfikat X.509 i tryb transportu.