Compartilhar via


MessageProtectionOrder Enumeração

Definição

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

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

Campos

EncryptBeforeSign 2

Especifica que a mensagem SOAP é criptografada antes que uma assinatura digital seja gerada para a mensagem SOAP.

SignBeforeEncrypt 0

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

SignBeforeEncryptAndEncryptSignature 1

Especifica que uma assinatura digital é gerada para a mensagem SOAP antes que qualquer parte da mensagem SOAP seja criptografada e a assinatura digital é criptografada.

Exemplos

O exemplo a seguir cria um SymmetricSecurityBindingElement elemento e define sua MessageProtectionOrder propriedade como 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

Comentários

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

Se uma mensagem estiver vulnerável a um ataque digest (por exemplo, se a mensagem for curta ou a entropia estiver baixa), você deverá usar a opção SignBeforeEncryptAndEncryptSignature ou EncryptBeforeSign. (A entropia é dados aleatórios fornecidos por um servidor, um cliente ou ambos e é usada para criar uma chave compartilhada para criptografar e descriptografar dados.)

O que é ordenado?

O WCF oferece três níveis de proteção diferentes que determinam como as mensagens são protegidas usando a segurança da mensagem SOAP. O padrão é SignBeforeEncryptAndEncryptSignature. Essa configuração primeiro assina a mensagem, criptografa o corpo da mensagem e, em seguida, criptografa a assinatura XML. Isso 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 verdade, há uma compensação do desempenho para aumentar a segurança. Criptografar a assinatura pode diminuir o desempenho entre 10% e 40%. Se o conteúdo dos dados da mensagem for de baixo valor e a taxa de transferência de desempenho for mais significativa, use SignBeforeEncrypt. Com essa configuração, o resumo da assinatura é enviado em texto claro e, portanto, a mensagem é mais vulnerável a ataques de adivinhação e verificação em baixa entropia.

Somente associações personalizadas

Para alterar a MessageProtectionOrder propriedade, é necessário criar uma associação de segurança personalizada. Para obter mais informações sobre como criar associações personalizadas, consulte Criando associações de 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

Confira também