Protegendo mensagens usando a segurança de transporte

Esta seção discute a segurança de transporte do serviço de enfileiramento de mensagens (MSMQ) que você pode usar para proteger mensagens enviadas para uma fila.

Nota

Antes de ler este tópico, é recomendável que você leia Conceitos de segurança.

A ilustração a seguir fornece um modelo conceitual de comunicação em fila usando o Windows Communication Foundation (WCF). Esta ilustração e terminologia são utilizadas para explicar os conceitos de segurança dos transportes.

Queued Application Diagram

Ao enviar mensagens em fila usando WCF com NetMsmqBinding, a mensagem WCF é anexada como um corpo da mensagem MSMQ. A segurança de transporte protege toda a mensagem MSMQ (cabeçalhos ou propriedades da mensagem MSMQ e o corpo da mensagem). Como é o corpo da mensagem MSMQ, usar a segurança de transporte também protege a mensagem WCF.

O conceito-chave por trás da segurança de transporte é que o cliente tem que atender aos requisitos de segurança para levar a mensagem para a fila de destino. Isso é diferente da segurança da mensagem, onde a mensagem é protegida para o aplicativo que recebe a mensagem.

A segurança de transporte usando NetMsmqBinding e MsmqIntegrationBinding afeta como as mensagens MSMQ são protegidas em trânsito entre a fila de transmissão e a fila de destino, onde protegido implica:

  • Assinar a mensagem para garantir que ela não seja adulterada.

  • Criptografar a mensagem para garantir que ela não possa ser vista ou adulterada. Isso é recomendado, mas opcional.

  • O gerenciador de filas de destino que identifica o remetente da mensagem para não repúdio.

No MSMQ, independente da autenticação, a fila de destino tem uma lista de controle de acesso (ACL) para verificar se o cliente tem permissão para enviar a mensagem para a fila de destino. O aplicativo de recebimento também é verificado quanto à permissão para receber a mensagem da fila de destino.

Propriedades de segurança de transporte do WCF MSMQ

O MSMQ usa a segurança do Windows para autenticação. Ele usa o identificador de segurança do Windows (SID) para identificar o cliente e usa o serviço de diretório do Ative Directory como a autoridade de certificação ao autenticar o cliente. Isso requer que o MSMQ seja instalado com a integração com o Ative Directory. Como o SID de domínio do Windows é usado para identificar o cliente, essa opção de segurança só é significativa quando o cliente e o serviço fazem parte do mesmo domínio do Windows.

O MSMQ também fornece a capacidade de anexar um certificado com a mensagem que não está registrada no Ative Directory. Nesse caso, ele garante que a mensagem foi assinada usando o certificado anexado.

O WCF fornece essas duas opções como parte da segurança de transporte MSMQ e elas são o pivô chave para a segurança de transporte.

Por padrão, a segurança de transporte está ativada.

Dadas essas noções básicas, as seções a seguir detalham as propriedades de segurança de transporte incluídas no NetMsmqBinding e MsmqIntegrationBinding.

Modo de autenticação MSMQ

O MsmqAuthenticationMode determina se deve usar a segurança de domínio do Windows ou uma segurança baseada em certificado externo para proteger a mensagem. Em ambos os modos de autenticação, o canal de transporte em fila do WCF usa o CertificateValidationMode especificado na configuração do serviço. O modo de validação do certificado especifica o mecanismo usado para verificar a validade do certificado.

Quando a segurança de transporte está ativada, a configuração padrão é WindowsDomain.

Modo de Autenticação de Domínio do Windows

A escolha de usar a segurança do Windows requer integração com o Ative Directory. WindowsDomain é o modo de segurança de transporte padrão. Quando isso é definido, o canal WCF anexa o SID do Windows à mensagem MSMQ e usa seu certificado interno obtido do Ative Directory. O MSMQ usa esse certificado interno para proteger a mensagem. O gerenciador de filas de recebimento usa o Ative Directory para pesquisar e localizar um certificado correspondente para autenticar o cliente e verifica se o SID também corresponde ao do cliente. Esta etapa de autenticação é executada se um certificado, gerado internamente no caso do modo de autenticação ou gerado externamente no caso do modo de autenticação, for anexado à mensagem, mesmo que a fila de destino não esteja marcada WindowsDomainCertificate como exigindo autenticação.

Nota

Ao criar uma fila, você pode marcá-la como uma fila autenticada para indicar que a fila requer autenticação do cliente que envia mensagens para a fila. Isso garante que nenhuma mensagem não autenticada seja aceita na fila.

O SID anexado à mensagem também é usado para verificar a ACL da fila de destino para garantir que o cliente tenha autoridade para enviar mensagens para a fila.

Modo de autenticação de certificado

A escolha de usar o modo de autenticação de certificado não requer integração com o Ative Directory. Na verdade, em alguns casos, como quando o MSMQ é instalado no modo de grupo de trabalho (sem integração com o Ative Directory) ou ao usar o protocolo de transferência SOAP Reliable Messaging Protocol (SRMP) para enviar mensagens para a fila, só Certificate funciona.

Ao enviar uma mensagem WCF com Certificate, o canal WCF não anexa um SID do Windows à mensagem MSMQ. Como tal, a ACL da fila de destino deve permitir Anonymous o acesso do usuário para enviar para a fila. O gerenciador de filas de recebimento verifica se a mensagem MSMQ foi assinada com o certificado, mas não executa nenhuma autenticação.

O certificado com suas informações de identidade e declarações é preenchido ServiceSecurityContext pelo canal de transporte em fila do WCF. O serviço pode usar essas informações para realizar sua própria autenticação do remetente.

Nível de proteção MSMQ

O nível de proteção determina como proteger a mensagem MSMQ para garantir que ela não seja adulterada. É especificado na MsmqProtectionLevel propriedade. O valor predefinido é Sign.

Nível de Proteção de Sinais

A mensagem MSMQ é assinada usando o certificado gerado internamente ao usar WindowsDomain o modo de autenticação ou um certificado gerado externamente ao usar Certificate o modo de autenticação.

Assinar e criptografar o nível de proteção

A mensagem MSMQ é assinada usando o certificado gerado internamente ao usar WindowsDomain o modo de autenticação ou o certificado gerado externamente ao usar Certificate o modo de autenticação.

Além de assinar a mensagem, a mensagem MSMQ é criptografada usando a chave pública do certificado obtido do Ative Directory que pertence ao gerenciador de filas de recebimento que hospeda a fila de destino. O gerenciador de filas de envio garante que a mensagem MSMQ seja criptografada em trânsito. O gerenciador de filas de recebimento descriptografa a mensagem MSMQ usando a chave privada de seu certificado interno e armazena a mensagem na fila (se autenticada e autorizada) em texto não criptografado.

Nota

Para criptografar a mensagem, o acesso ao Ative Directory é necessário ( propriedade de NetMsmqBinding deve ser definida como true) e pode ser usado com ambos e CertificateWindowsDomain.UseActiveDirectory

Nenhum nível de proteção

Isso está implícito quando MsmqProtectionLevel é definido como None. Este não pode ser um valor válido para quaisquer outros modos de autenticação.

Nota

Se a mensagem MSMQ estiver assinada, o MSMQ verificará se a mensagem está assinada com o certificado anexado (interno ou externo) independentemente do estado da fila, ou seja, fila autenticada ou não.

Algoritmo de criptografia MSMQ

O algoritmo de criptografia especifica o algoritmo a ser usado para criptografar a mensagem MSMQ no fio. Esta propriedade é usada somente se MsmqProtectionLevel estiver definida como EncryptAndSign.

Os algoritmos suportados são RC4Stream e AES o padrão é RC4Stream.

Você pode usar o AES algoritmo somente se o remetente tiver o MSMQ 4.0 instalado. Além disso, a fila de destino também deve ser hospedada no MSMQ 4.0.

Algoritmo de hash MSMQ

O algoritmo de hash especifica o algoritmo usado para criar uma assinatura digital da mensagem MSMQ. O gerenciador de filas de recebimento usa esse mesmo algoritmo para autenticar a mensagem MSMQ. Esta propriedade é usada somente se MsmqProtectionLevel estiver definida como Sign ou EncryptAndSign.

Os algoritmos suportados são MD5, SHA1, SHA256, e SHA512. A predefinição é SHA1.

Devido a problemas de colisão com MD5/SHA1, a Microsoft recomenda SHA256 ou superior.

Consulte também