Os mecanismos de segurança de transporte no WCF (Windows Communication Foundation) dependem da associação e do transporte que estão sendo usados. Por exemplo, ao usar a classe WSHttpBinding, o transporte é HTTP e o mecanismo principal para proteger o transporte é o SSL (Secure Sockets Layer) via HTTP, normalmente chamado HTTPS. Este tópico discute os principais mecanismos de segurança do transporte usados nas associações fornecidas pelo sistema WCF.
Observação
Quando a segurança SSL é usada com o .NET Framework 3.5 e posterior, um cliente WCF usa os certificados intermediários em seu repositório de certificados e os certificados intermediários recebidos durante a negociação SSL para executar a validação da cadeia de certificados no certificado de serviço. O .NET Framework 3.0 usa apenas os certificados intermediários instalados no repositório de certificados local.
Por padrão, a classe BasicHttpBinding não fornece segurança. Essa associação foi projetada para interoperabilidade com provedores de serviço Web que não implementam a segurança. No entanto, você pode ativar a segurança definindo a propriedade Mode como qualquer valor, exceto None. Para habilitar a segurança do transporte, defina a propriedade como Transport.
Interoperação com IIS
A classe BasicHttpBinding é usada principalmente para interoperar com serviços Web existentes, sendo muitos desses serviços hospedados pelo IIS (Serviços de Informações da Internet). Consequentemente, a segurança do transporte dessa associação foi projetada para uma interoperação perfeita com sites do IIS. Isso é feito definindo o modo de segurança como Transport e, em seguida, definindo o tipo de credencial do cliente. Os valores de tipo de credencial correspondem aos mecanismos de segurança de diretório do IIS. O código a seguir mostra o modo que está sendo definido e o tipo de credencial definido como Windows. Você pode usar essa configuração quando o cliente e o servidor estiverem no mesmo domínio do Windows.
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
As seções a seguir abordam outros tipos de credenciais do cliente.
Basic
Isso corresponde ao método de autenticação Básica no IIS. Ao usar esse modo, o servidor IIS deve ser configurado com contas de usuário do Windows e as permissões apropriadas do sistema de arquivos NTFS. Para obter mais informações sobre o IIS 6.0, consulte Habilitar a autenticação Básica e configurar o nome do realm. Para obter mais informações sobre o IIS 7.0, consulte Configurar a Autenticação Básica (IIS 7).
Certificado
O IIS tem uma opção para exigir que os clientes façam logon com um certificado. O recurso também permite que o IIS mapeie um certificado do cliente para uma conta do Windows. Para obter mais informações sobre o IIS 6.0, consulte Habilitar certificados do cliente no IIS 6.0. ***Para obter mais informações sobre o IIS 7.0, consulte Como configurar certificados de servidor no IIS 7.
Digest
A autenticação hash é semelhante à autenticação Básica, mas oferece a vantagem de enviar as credenciais como um resumo da mensagem, em vez de em texto claro. Para mais informações sobre o IIS 6.0, consulte Autenticação por hash no IIS 6.0. Para obter mais informações sobre o IIS 7.0, consulte Configurar a Autenticação por hash (IIS 7).
Windows
Isso corresponde à autenticação do Windows integrada no IIS. Quando definido como esse valor, espera-se que o servidor também exista em um domínio do Windows que usa o protocolo Kerberos como seu controlador de domínio. Se o servidor não estiver em um domínio com suporte Kerberos ou se o sistema Kerberos falhar, você poderá usar o valor NTLM (NT LAN Manager) descrito na próxima seção. Para obter mais informações sobre o IIS 6.0, consulte Autenticação integrada do Windows no IIS 6.0. Para obter mais informações sobre o IIS 7.0, consulte Como configurar certificados de servidor no IIS 7.
NTLM
Isso permite que o servidor use o NTLM para autenticação se o protocolo Kerberos falhar. Para obter mais informações sobre como configurar o IIS no IIS 6.0, consulte Como forçar a autenticação NTLM. Para o IIS 7.0, a autenticação do Windows inclui a autenticação NTLM. Para obter mais informações, consulte Configurando certificados de servidor no IIS 7.
WSHttpBinding
A classe WSHttpBinding foi projetada para interoperar com serviços que implementam especificações WS-*. A segurança do transporte para essa associação é a SSL (Secure Sockets Layer) via HTTP ou HTTPS. Para criar um aplicativo WCF que usa SSL, use o IIS para hospedar o aplicativo. Como alternativa, se você estiver criando um aplicativo auto-hospedado, use a ferramenta HttpCfg.exe para associar um certificado X.509 a uma porta específica em um computador. O número da porta é especificado como parte do aplicativo WCF como um endereço de ponto de extremidade. Ao usar o modo de transporte, o endereço do ponto de extremidade deverá incluir o protocolo HTTPS ou uma exceção será lançada em tempo de execução. Para obter mais informações, consulte Segurança do transporte de HTTP.
O exemplo a seguir mostra a associação que está sendo usada com um tipo de credencial do cliente do Windows.
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSDualHttpBinding
Essa associação fornece apenas segurança no nível da mensagem, não segurança no nível do transporte.
NetTcpBinding
A classe NetTcpBinding usa o protocolo TCP para transporte de mensagens. A segurança para o modo de transporte é fornecida pela implementação do protocolo TLS (Transport Layer Security) por TCP. A implementação do TLS é fornecida pelo sistema operacional.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Se você estiver usando a segurança do Windows, não será necessário um certificado.
O código a seguir usa a impressão digital do certificado, que o identifica exclusivamente. Para obter mais informações sobre certificados, consulte Working with Certificates (Trabalhando com certificados).
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindByThumbprint,
"0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
StoreLocation.LocalMachine, _
StoreName.My, _
X509FindType.FindByThumbprint, _
"0000000000000000000000000000000000000000")
Como alternativa, especifique o certificado na configuração do cliente usando um elemento <clientCredentials> na seção de comportamentos.
A classe NetNamedPipeBinding foi projetada para uma comunicação intra-computacional eficiente; ou seja, para processos em execução no mesmo computador, embora canais de pipe nomeados possam ser criados entre dois computadores na mesma rede. Essa associação fornece apenas segurança no nível do transporte. Ao criar aplicativos usando essa associação, os endereços de ponto de extremidade deverão incluir "net.pipe" como o protocolo do endereço do ponto de extremidade.
WSFederationHttpBinding
Ao usar a segurança de transporte, essa associação usa SSL via HTTP, conhecido como HTTPS com um token emitido (TransportWithMessageCredential). Para obter mais informações sobre aplicativos de federação, consulte Federação e tokens emitidos.
NetPeerTcpBinding
A classe NetPeerTcpBinding é um transporte seguro, projetado para uma comunicação eficiente usando o recurso de rede ponto a ponto. Conforme indicado pelo nome da classe e da associação, TCP é o protocolo. Quando o modo de segurança é definido como Transporte, a associação implementa o TLS por TCP. Para obter mais informações sobre o recurso ponto a ponto, consulte Rede ponto a ponto.
Demonstre as habilidades necessárias para implementar controles de segurança, manter a postura de segurança de uma organização e identificar e corrigir vulnerabilidades de segurança.