Segurança de aplicativos distribuídos
A segurança do WCF (Windows Communication Foundation) é dividida em três áreas funcionais principais: segurança de transferência, controle de acesso e auditoria. A segurança de transferência fornece integridade, confidencialidade e autenticação. A segurança de transferência é fornecida por um dos seguintes: segurança de transporte, segurança de mensagem ou TransportWithMessageCredential
.
Para obter uma visão geral de segurança de mensagens do WCF, consulte Visão geral de segurança. Para obter mais informações sobre as outras duas partes da segurança do WCF, consulte Autorização e Auditoria.
Transferir cenários de segurança
Cenários comuns que empregam a segurança de transferência do WCF incluem o seguinte:
Transferência segura usando o Windows. Um cliente e um serviço WCF são implantados em um domínio do Windows (ou em uma floresta do Windows). As mensagens contêm dados pessoais e, portanto, os requisitos incluem a autenticação mútua do cliente e do serviço, a integridade da mensagem e a confidencialidade da mensagem. Além disso, é necessária uma prova de que ocorreu uma transação específica, por exemplo, que o receptor da mensagem deve registrar as informações de assinatura.
Transferência segura usando
UserName
e HTTPS. Um cliente e um serviço do WCF precisam ser desenvolvidos para trabalhar na Internet. As credenciais do cliente são autenticadas em um banco de dados de pares de nome de usuário/senha. O serviço é implantado em um endereço HTTPS usando um certificado SSL (protocolo SSL) confiável. Como as mensagens viajam pela Internet, o cliente e o serviço precisam ser autenticados mutuamente e a confidencialidade e integridade das mensagens devem ser preservadas durante a transferência.Transferência segura usando certificados. Um cliente e um serviço do WCF precisam ser desenvolvidos para trabalhar na Internet pública. O cliente e o serviço têm certificados que podem ser usados para proteger as mensagens. O cliente e o serviço usam a Internet para se comunicar entre si e para executar transações de alto valor que exigem integridade, confidencialidade e autenticação mútua da mensagem.
Integridade, confidencialidade e autenticação
Três funções — integridade, confidencialidade e autenticação — são chamadas de segurança de transferência. A segurança de transferência fornece as funções que ajudam a atenuar as ameaças a um aplicativo distribuído. A tabela a seguir descreve brevemente as três funções que compõem a segurança de transferência.
Função | Descrição |
---|---|
Integridade | A integridade é a garantia de que os dados são completos e precisos, especialmente depois de passarem de um ponto para outro e, possivelmente, serem lidos por muitos atores. A integridade deve ser mantida para evitar a violação dos dados e, geralmente, é obtida pela assinatura digital de uma mensagem. |
Confidencialidade | A confidencialidade é a garantia de que uma mensagem não foi lida por ninguém além do leitor pretendido. Por exemplo, um número de cartão de crédito deve ser mantido confidencial quando enviado pela Internet. A confidencialidade geralmente é fornecida pela criptografia de dados usando um esquema de chave pública/chave privada. |
Autenticação | A autenticação é a verificação de uma identidade declarada. Por exemplo, ao usar uma conta bancária, é fundamental que apenas o proprietário real da conta possa retirar fundos. A autenticação pode ser fornecida por uma variedade de meios. Um método comum é o sistema de usuário/senha. Um segundo método é o uso de um certificado X.509 fornecido por terceiros. |
Modos de segurança
O WCF tem vários modos de segurança de transferência que são descritos na tabela a seguir.
Mode | Descrição |
---|---|
Nenhum | Nenhuma segurança é fornecida na camada de transporte ou na camada de mensagem. Nenhuma das associações predefinidas usa esse modo por padrão, exceto o elemento <basicHttpBinding> ou, ao usar código, a classe BasicHttpBinding. |
Transport | Usa um transporte seguro, como HTTPS, para integridade, confidencialidade e autenticação mútua. |
Mensagem | Usa a segurança de mensagem SOAP para integridade, confidencialidade e autenticação mútua. As mensagens SOAP são protegidas de acordo com os padrões de segurança de WS. |
Modo Misto | Usa segurança do transporte para integridade, a confidencialidade e a autenticação. Usa segurança da mensagem (segurança de WS e outros padrões) para autenticação de cliente. (Essa enumeração para esse modo é TransportWithMessageCredential .) |
Ambos | Executa proteção e autenticação em ambos os níveis. Esse modo está disponível apenas no elemento <netMsmqBinding>. |
Credenciais e segurança de transferência
Uma credencial consiste nos dados apresentados para estabelecer uma identidade ou funcionalidades declaradas. Apresentar uma credencial envolve apresentar os dados e a prova de posse dos dados. O WCF dá suporte a uma variedade de tipos de credenciais nos níveis de segurança de transporte e de mensagem. Você pode especificar um tipo de credencial para uma associação do WCF.
Em muitos países e regiões, uma carteira de motorista é um exemplo de credencial. Uma licença contém dados que representam a identidade e os recursos. Ela contém prova de posse na forma da imagem do possuidor. A licença é emitida por uma autoridade confiável, geralmente um departamento governamental de licenciamento. A licença é selada e pode conter um holograma, mostrando que ela não foi adulterada nem falsificada.
Como exemplo, considere dois tipos de credenciais com suporte no WCF: credenciais de nome de usuário e de certificado (X.509).
Para a credencial de nome de usuário, o nome de usuário representa a identidade reivindicada e a senha apresenta a prova de posse. A autoridade confiável nesse caso é o sistema que valida o nome de usuário e a senha.
Na credencial do certificado, o nome da entidade, o nome alternativo da entidade ou campos específicos dentro do certificado podem ser usados para representar a identidade declarada e/ou os recursos. A prova de posse dos dados na credencial é estabelecida usando a chave privada associada para gerar uma assinatura.
Para obter mais informações sobre segurança de transferência de programação e especificação de credenciais, consulte Associações e Segurança e Comportamentos de Segurança.
Tipos de credencial de cliente de transporte
A tabela a seguir mostra os valores possíveis usados ao criar um aplicativo que usa segurança de transferência. Você pode usar esses valores em configurações de código ou associação.
Configuração | Descrição |
---|---|
Nenhum | Especifica que o cliente não precisa apresentar nenhuma credencial. Isso se traduz em um cliente anônimo. |
Basic | Especifica autenticação básica. Para obter mais informações, confira RFC2617, "Autenticação HTTP: autenticação básica e hash". |
Digest | Especifica a autenticação Digest. Para obter mais informações, confira RFC2617, "Autenticação HTTP: autenticação básica e hash". |
Ntlm | Especifica a autenticação do Windows usando a negociação de SSPI em um domínio do Windows. A negociação de SSPI resulta no uso do protocolo Kerberos ou NT LanMan (NTLM). |
Windows | Especifica a autenticação do Windows usando SSPI em um domínio do Windows. A SSPI escolhe o protocolo Kerberos ou NTLM como serviço de autenticação. A SSPI tenta primeiro o protocolo Kerberos; se isso falhar, ele usará NTLM. |
Certificado | Executa a autenticação do cliente usando um certificado, normalmente, X.509. |
Tipos de credencial de cliente de mensagem
A tabela a seguir mostra os valores possíveis usados ao criar um aplicativo que usa segurança de mensagem. Você pode usar esses valores em configurações de código ou associação.
Configuração | Descrição |
---|---|
Nenhum | Permite que o serviço interaja com clientes anônimos. |
Windows | Permite que as trocas de mensagens SOAP ocorram sob o contexto autenticado de uma credencial do Windows. Usa o mecanismo de negociação da SSPI para escolher entre o protocolo Kerberos ou NTLM como serviço de autenticação. |
Nome de Usuário | Permite que o serviço exija que o cliente seja autenticado com uma credencial de nome de usuário. Observe que o WCF não permite nenhuma operação criptográfica com o nome de usuário, como gerar uma assinatura ou criptografar dados. Dessa forma, o WCF impõe que o transporte seja protegido ao usar credenciais de nome de usuário. |
Certificado | Permite que o serviço exija que o cliente seja autenticado usando um certificado. |
CardSpace | Permite que o serviço exija que o cliente seja autenticado usando um CardSpace. |
Credenciais de programação
Para cada um dos tipos de credencial do cliente, o modelo de programação do WCF permite que você especifique os valores de credencial e validadores de credencial usando comportamentos de serviço e comportamentos de canal.
A segurança do WCF tem dois tipos de credenciais: comportamentos de credencial de serviço e comportamentos de credencial de canal. Os comportamentos de credencial no WCF especificam os dados reais, ou seja, as credenciais usadas para atender aos requisitos de segurança expressos por meio de associações. No WCF, uma classe de cliente é o componente de tempo de execução que se converte entre a invocação de operação e as mensagens. Todos os clientes herdam da classe ClientBase<TChannel>. A propriedade ClientCredentials na classe base permite que você especifique vários valores de credenciais do cliente.
No WCF, os comportamentos de serviço são atributos aplicados à classe que implementa um contrato de serviço (interface) para controlar programaticamente o serviço. A classe ServiceCredentials permite que você especifique certificados para configurações de credencial de serviço e validação de cliente para vários tipos de credencial de cliente.
Modelo de negociação para segurança de mensagens
O modo de segurança da mensagem permite executar a segurança de transferência para que a credencial de serviço seja configurada no cliente fora da banda. Por exemplo, se estiver usando um certificado armazenado no repositório de certificados do Windows, você deverá usar uma ferramenta como um snap-in do MMC (console de gerenciamento da Microsoft).
O modo de segurança da mensagem também permite que você execute a segurança de transferência para que a credencial de serviço seja trocada com o cliente como parte de uma negociação inicial. Para habilitar a negociação, defina a propriedade NegotiateServiceCredential como true
.