MessageProtectionOrder Enumeração

Definição

Especifica a ordem das operações que protegem uma mensagem.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Herança
MessageProtectionOrder

Campos

Name Valor Description
SignBeforeEncrypt 0

Especifica que uma assinatura digital é gerada para a mensagem SOAP antes de qualquer parte da mensagem SOAP ser encriptada, mas a assinatura digital não é encriptada.

SignBeforeEncryptAndEncryptSignature 1

Especifica que uma assinatura digital é gerada para a mensagem SOAP antes de qualquer parte da mensagem SOAP ser encriptada, e a assinatura digital é encriptada.

EncryptBeforeSign 2

Especifica que a mensagem SOAP é encriptada antes de ser gerada uma assinatura digital para a mensagem SOAP.

Exemplos

O exemplo seguinte cria um SymmetricSecurityBindingElement elemento e define a sua MessageProtectionOrder propriedade para SignBeforeEncrypt.

public static Binding CreateCustomBinding()
{
    // Create an empty BindingElementCollection to populate,
    // then create a custom binding from it.
    BindingElementCollection outputBec = new BindingElementCollection();

    // Create a SymmetricSecurityBindingElement.
    SymmetricSecurityBindingElement ssbe =
        new SymmetricSecurityBindingElement();

    // Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128;

       // Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

    // Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = new KerberosSecurityTokenParameters();

    // Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add ( ssbe );
    outputBec.Add(new TextMessageEncodingBindingElement());
    outputBec.Add(new HttpTransportBindingElement());

    // Create a CustomBinding and return it; otherwise, return null.
    return new CustomBinding(outputBec);
}
Public Shared Function CreateCustomBinding() As Binding 
    ' Create an empty BindingElementCollection to populate, 
    ' then create a custom binding from it.
    Dim outputBec As New BindingElementCollection()
    
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As New SymmetricSecurityBindingElement()
    
    ' Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128
    
    ' Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt
    
    ' Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = New KerberosSecurityTokenParameters()
    
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add(ssbe)
    outputBec.Add(New TextMessageEncodingBindingElement())
    outputBec.Add(New HttpTransportBindingElement())
    
    ' Create a CustomBinding and return it; otherwise, return null.
    Return New CustomBinding(outputBec)

End Function

Observações

Esta enumeração é usada com a AsymmetricSecurityBindingElement.MessageProtectionOrder propriedade de e AsymmetricSecurityBindingElement a SymmetricSecurityBindingElement.MessageProtectionOrder propriedade das SymmetricSecurityBindingElement classes.

Se uma mensagem for vulnerável a um ataque digest (por exemplo, se a mensagem for curta ou a entropia for baixa), deve usar a opção SignBeforeEncryptAndEncryptSignature ou EncryptBeforeSign. (Entropia são dados aleatórios fornecidos por um servidor, um cliente ou ambos, e são usados para criar uma chave partilhada para encriptar e desencriptar dados.)

O que é pedido?

O WCF oferece três níveis de proteção diferentes que determinam como as mensagens são protegidas utilizando a segurança das mensagens SOAP. O padrão é SignBeforeEncryptAndEncryptAndEncryptSignature. Esta configuração assina primeiro a mensagem, encripta o corpo da mensagem e depois encripta a assinatura XML. Isto reduz a probabilidade de um ataque de adivinhação criptográfica bem-sucedido contra a assinatura.

No entanto, usar o padrão tem implicações de desempenho. Na prática, há um compromisso entre desempenho e maior segurança. A encriptação da assinatura pode diminuir o desempenho entre 10 por cento e 40 por cento. Se o conteúdo dos dados da mensagem for de baixo valor e o rendimento de desempenho for mais significativo, use o SignBeforeEncrypt. Com esta definição, o resumo da assinatura é enviado em texto claro, tornando assim a mensagem mais vulnerável a ataques de adivinhação e verificação com baixa entropia.

Apenas Encadernações Personalizadas

Para alterar a MessageProtectionOrder propriedade, é necessário criar uma ligação de segurança personalizada. Para obter mais informações sobre como criar associações personalizadas, consulte Criando ligações User-Defined. Para obter mais informações sobre como criar uma associação personalizada para um modo de autenticação específico, consulte Como criar um SecurityBindingElement para um modo de autenticação especificado.

Aplica-se a

Ver também