Postupy: Použití přihlašovacích údajů k zabezpečení přenosů a zpráv
Zabezpečení služby pomocí přihlašovacích údajů přenosu i zpráv používá nejlepší režim zabezpečení přenosu i zpráv ve Windows Communication Foundation (WCF). Kromě toho zabezpečení vrstvy přenosu poskytuje integritu a důvěrnost, zatímco zabezpečení vrstvy zpráv poskytuje řadu přihlašovacích údajů, které nejsou možné s přísnými mechanismy zabezpečení přenosu. Toto téma ukazuje základní kroky pro implementaci přenosu s přihlašovacími údaji zprávy pomocí přihlašovacích WSHttpBinding údajů a NetTcpBinding vazeb. Další informace o nastavení režimu zabezpečení naleznete v tématu Postupy: Nastavení režimu zabezpečení.
Při nastavování režimu zabezpečení na TransportWithMessageCredential
, přenos určuje skutečný mechanismus, který poskytuje zabezpečení na úrovni přenosu. Pro HTTP je mechanismus ssl (Secure Sockets Layer) přes HTTP (HTTPS); pro TCP je ssl přes TCP nebo Windows.
Pokud je přenos HTTP (pomocí WSHttpBinding), ssl přes HTTP poskytuje zabezpečení na úrovni přenosu. V takovém případě musíte nakonfigurovat počítač hostující službu s certifikátem SSL vázaným na port, jak je znázorněno dále v tomto tématu.
Pokud je přenos TCP (pomocí NetTcpBinding), ve výchozím nastavení je k dispozici zabezpečení na úrovni přenosu zabezpečení systému Windows nebo SSL přes protokol TCP. Při použití protokolu SSL přes protokol TCP je nutné zadat certifikát pomocí SetCertificate metody, jak je znázorněno dále v tomto tématu.
Použití WSHttpBinding s certifikátem pro zabezpečení přenosu (v kódu)
Pomocí nástroje HttpCfg.exe vytvořte vazbu certifikátu SSL na port v počítači. Další informace najdete v tématu Postupy: Konfigurace portu s certifikátem SSL.
Vytvořte instanci WSHttpBinding třídy a nastavte Mode vlastnost na TransportWithMessageCredential.
ClientCredentialType Nastavte vlastnost na odpovídající hodnotu. (Další informace najdete v tématu Výběr typu přihlašovacích údajů.) Následující kód používá Certificate hodnotu.
Vytvořte instanci Uri třídy s příslušnou základní adresou. Všimněte si, že adresa musí používat schéma HTTPS a musí obsahovat skutečný název počítače a číslo portu, ke kterému je certifikát SSL vázán. (Případně můžete nastavit základní adresu v konfiguraci.)
Přidejte koncový bod služby pomocí AddServiceEndpoint metody.
Vytvořte instanci ServiceHost a zavolejte metodu Open , jak je znázorněno v následujícím kódu.
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()
Použití NetTcpBinding s certifikátem pro zabezpečení přenosu (v kódu)
Vytvořte instanci NetTcpBinding třídy a nastavte Mode vlastnost na TransportWithMessageCredential.
ClientCredentialType Nastavte na odpovídající hodnotu. Následující kód používá Certificate hodnotu.
Vytvořte instanci Uri třídy s příslušnou základní adresou. Všimněte si, že adresa musí používat schéma net.tcp. (Případně můžete nastavit základní adresu v konfiguraci.)
Vytvořte instanci ServiceHost třídy.
SetCertificate Použijte metodu X509CertificateRecipientServiceCredential třídy k explicitní nastavení certifikátu X.509 pro službu.
Přidejte koncový bod služby pomocí AddServiceEndpoint metody.
Volejte metodu Open , jak je znázorněno v následujícím kódu.
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()
Použití NetTcpBinding s Windows pro zabezpečení přenosu (v kódu)
Vytvořte instanci NetTcpBinding třídy a nastavte Mode vlastnost na TransportWithMessageCredential.
Nastavte zabezpečení přenosu tak, aby používalo Systém Windows nastavením na ClientCredentialType Windowshodnotu . (Všimněte si, že toto je výchozí nastavení.)
ClientCredentialType Nastavte na odpovídající hodnotu. Následující kód používá Certificate hodnotu.
Vytvořte instanci Uri třídy s příslušnou základní adresou. Všimněte si, že adresa musí používat schéma net.tcp. (Případně můžete nastavit základní adresu v konfiguraci.)
Vytvořte instanci ServiceHost třídy.
SetCertificate Použijte metodu X509CertificateRecipientServiceCredential třídy k explicitní nastavení certifikátu X.509 pro službu.
Přidejte koncový bod služby pomocí AddServiceEndpoint metody.
Volejte metodu Open , jak je znázorněno v následujícím kódu.
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()
Použití konfigurace
Použití WSHttpBinding
Nakonfigurujte počítač s certifikátem SSL vázaným na port. (Další informace najdete v tématu Postupy: Konfigurace portu pomocí certifikátu SSL U této konfigurace není nutné nastavit
<transport>
hodnotu prvku.Zadejte typ přihlašovacích údajů klienta pro zabezpečení na úrovni zpráv. Následující příklad nastaví
clientCredentialType
atribut elementu<message>
naUserName
.<wsHttpBinding> <binding name="WsHttpBinding_ICalculator"> <security mode="TransportWithMessageCredential" > <message clientCredentialType="UserName" /> </security> </binding> </wsHttpBinding>
Použití netTcpBinding s certifikátem pro zabezpečení přenosu
Pro protokol SSL přes TCP je nutné explicitně zadat certifikát v elementu
<behaviors>
. Následující příklad určuje certifikát jeho vystavitele ve výchozím umístění úložiště (místní počítač a osobní úložiště).<behaviors> <serviceBehaviors> <behavior name="mySvcBehavior"> <serviceCredentials> <serviceCertificate findValue="contoso.com" x509FindType="FindByIssuerName" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
<Přidání netTcpBinding> do oddílu vazeb
Přidejte prvek vazby a nastavte
name
atribut na odpovídající hodnotu.<security>
Přidejte prvek a nastavtemode
atribut naTransportWithMessageCredential
.<
message>
Přidejte prvek a nastavteclientCredentialType
atribut na odpovídající hodnotu.<bindings> <netTcpBinding> <binding name="myTcpBinding"> <security mode="TransportWithMessageCredential" > <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings>
Použití netTcpBinding s Windows pro zabezpečení přenosu
<Přidání netTcpBinding> do oddílu vazeb
<binding>
Přidejte prvek a nastavtename
atribut na odpovídající hodnotu.<security>
Přidejte prvek a nastavtemode
atribut naTransportWithMessageCredential
.<transport>
Přidejte prvek a nastavteclientCredentialType
atribut naWindows
.<message>
Přidejte prvek a nastavteclientCredentialType
atribut na odpovídající hodnotu. Následující kód nastaví hodnotu na certifikát.<bindings> <netTcpBinding> <binding name="myTcpBinding"> <security mode="TransportWithMessageCredential" > <transport clientCredentialType="Windows" /> <message clientCredentialType="Certificate" /> </security> </binding> </netTcpBinding> </bindings>