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.
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 WindowsDomain
Certificate
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.