MessageProtectionOrder Enumerazione

Definizione

Specifica l'ordine delle operazioni che proteggono un messaggio.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Ereditarietà
MessageProtectionOrder

Campi

EncryptBeforeSign 2

Specifica che il messaggio SOAP è crittografato prima che venga generata una firma digitale per il messaggio SOAP.

SignBeforeEncrypt 0

Specifica che la firma digitale per il messaggio SOAP viene generata prima che qualsiasi parte del messaggio SOAP venga crittografata, ma che la firma digitale non viene crittografata.

SignBeforeEncryptAndEncryptSignature 1

Specifica che la firma digitale per il messaggio SOAP viene generata prima che qualsiasi parte del messaggio SOAP venga crittografata e la firma digitale viene crittografata.

Esempio

Nell'esempio seguente viene creato un SymmetricSecurityBindingElement elemento e viene impostata la relativa MessageProtectionOrder proprietà su 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

Commenti

Questa enumerazione viene utilizzata con la proprietà AsymmetricSecurityBindingElement.MessageProtectionOrder della classe AsymmetricSecurityBindingElement e la proprietà SymmetricSecurityBindingElement.MessageProtectionOrder della classe SymmetricSecurityBindingElement.

Se un messaggio è vulnerabile a un attacco digest (ad esempio, se il messaggio è breve o l'entropia è bassa), è consigliabile usare l'opzione SignBeforeEncryptAndEncryptSignature o EncryptBeforeSign. L'entropia è dati casuali forniti da un server, un client o entrambi e viene usato per creare una chiave condivisa per crittografare e decrittografare i dati.

Informazioni sull'ordinamento

WCF offre tre diversi livelli di protezione che determinano la modalità di protezione dei messaggi tramite la sicurezza dei messaggi SOAP. Il valore predefinito è SignBeforeEncryptAndEncryptSignature. Questa impostazione firma il messaggio, crittografa il corpo del messaggio e quindi crittografa la firma XML. In questo modo è possibile ridurre la probabilità di successo di un attacco basato su tentativi di decrittografare la firma.

Tuttavia, l'utilizzo dell'impostazione predefinita comporta implicazioni sulla prestazione. Di fatto, aumentando la sicurezza, diminuiscono le prestazioni. Crittografando la firma è possibile che le prestazioni vengano ridotte di un valore compreso tra il 10 percento e il 40 percento. Se il contenuto dei dati del messaggio è di valore basso e la velocità effettiva delle prestazioni è più significativa, usare SignBeforeEncrypt. Con questa impostazione, il digest della firma viene inviato come testo non crittografato e il messaggio è più vulnerabile agli attacchi basati su tentativi e verifiche con l'entropia bassa.

Solo associazioni personalizzate

Per modificare la proprietà MessageProtectionOrder è necessario creare un'associazione di sicurezza personalizzata. Per altre informazioni sulla creazione di associazioni personalizzate, vedere Creazione di associazioni User-Defined. Per altre informazioni sulla creazione di un'associazione personalizzata per una modalità di autenticazione specifica, vedere Procedura: Creare un elemento SecurityBindingElement per una modalità di autenticazione specificata.

Si applica a

Vedi anche