Mensagens de segurança que usam a segurança de transporte
Esta seção discute a segurança de transporte do MSMQ (Enfileiramento de Mensagens) que você pode usar para proteger mensagens enviadas para uma fila.
Observação
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 na fila usando o WCF (Windows Communication Foundation). Essa ilustração e terminologia são usadas para explicar os conceitos de segurança de transporte.
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 (propriedades ou cabeçalhos de mensagem MSMQ e o corpo da mensagem). Como ela é o corpo da mensagem MSMQ, o uso da segurança de transporte também protege a mensagem WCF.
O principal conceito por trás da segurança do transporte é que o cliente precisa atender aos requisitos de segurança para levar a mensagem para a fila de destino. Isso é diferente da segurança da mensagem, em que a mensagem é protegida para o aplicativo que recebe a mensagem.
A segurança do 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, em que protegidas 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, independentemente da autenticação, a fila de destino tem uma ACL (lista de controle de acesso) 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 MSMQ do WCF
O MSMQ usa a segurança do Windows para autenticação. Ele usa o SID (identificador de segurança) do Windows para identificar o cliente e usa o serviço de diretório do Active Directory como a autoridade de certificação ao autenticar o cliente. Isso requer que o MSMQ seja instalado com a integração do Active 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 Active 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 do transporte MSMQ e elas são a chave central para a segurança do transporte.
Por padrão, a segurança do transporte está ativada.
Considerando essas noções básicas, as seções a seguir detalham as propriedades de segurança de transporte agrupadas com 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 enfileirado do WCF usa o CertificateValidationMode
especificado na configuração de serviço. O modo de validação de certificado especifica o mecanismo usado para verificar a validade do certificado.
Quando a segurança do transporte é ativada, a definição de configuração padrão é WindowsDomain.
Modo de Autenticação de Domínio do Windows
A opção de usar a segurança do Windows requer integração com o Active 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 Active Directory. O MSMQ usa esse certificado interno para proteger a mensagem. O gerenciador de filas de recebimento usa o Active Directory para pesquisar e localizar um certificado correspondente para autenticar o cliente e verifica se o SID também corresponde ao do cliente. Essa etapa de autenticação será executada se um certificado, gerado internamente no caso do modo de autenticação WindowsDomain
ou gerado externamente no caso do modo de autenticação Certificate
, estiver anexado à mensagem mesmo que a fila de destino não esteja marcada como exigindo autenticação.
Observação
Ao criar uma fila, você pode marcá-la como uma fila autenticada para indicar que a ela 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 opção de usar o modo de autenticação de certificado não requer integração com o Active Directory. Na verdade, em alguns casos, como quando o MSMQ é instalado no modo de grupo de trabalho (sem integração com o Active Directory) ou ao usar o protocolo de transferência SRMP (SOAP Reliable Messaging Protocol) para enviar mensagens para a fila, só o 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 o acesso do usuário Anonymous
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 declarações e informações de identidade é preenchido no ServiceSecurityContext pelo canal de transporte na fila do WCF. O serviço pode usar essas informações para executar sua própria autenticação do remetente.
Nível de proteção do MSMQ
O nível de proteção determina como proteger a mensagem MSMQ para garantir que ela não seja adulterada. Ele é especificado na propriedade MsmqProtectionLevel. O valor padrão é Sign.
Assinar o nível de proteção
A mensagem MSMQ é assinada usando o certificado gerado internamente ao usar o modo de autenticação WindowsDomain
ou um certificado gerado externamente ao usar o modo de autenticação Certificate
.
Assinar e criptografar o nível de proteção
A mensagem MSMQ é assinada usando o certificado gerado internamente ao usar o modo de autenticação WindowsDomain
ou certificado gerado externamente ao usar o modo de autenticação Certificate
.
Além de assinar a mensagem, a mensagem MSMQ é criptografada usando a chave pública do certificado obtido do Active 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.
Observação
Para criptografar a mensagem, o acesso ao Active Directory é necessário (a propriedade UseActiveDirectory
de NetMsmqBinding deve ser definida como true
) e pode ser usada com Certificate e WindowsDomain.
Nenhum nível de proteção
Isso está implícito quando MsmqProtectionLevel é definido Nonecomo None. Isso não pode ser um valor válido para nenhum outro modo de autenticação.
Observação
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 de MSMQ
O algoritmo de criptografia especifica o algoritmo a ser usado para criptografar a mensagem MSMQ na transmissão. Essa propriedade será usada somente se MsmqProtectionLevel estiver definida como EncryptAndSign.
Os algoritmos com suporte são RC4Stream
e AES
e o padrão é RC4Stream
.
Você só poderá usar o algoritmo AES
se o remetente tiver o MSMQ 4.0 instalado. Além disso, a fila de destino também deverá ser hospedada no MSMQ 4.0.
Algoritmo hash do MSQM
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. Essa propriedade será usada somente se MsmqProtectionLevel estiver definida como Sign ou EncryptAndSign.
Os algoritmos com suporte são MD5
, SHA1
, SHA256
e SHA512
. O padrão é SHA1
.
Devido a problemas de colisão com MD5 e SHA1, a Microsoft recomenda SHA256 ou melhor.