Procedura: disattivare la crittografia delle firme digitali

Per impostazione predefinita, un messaggio viene firmato e la firma viene crittografata digitalmente. Per controllare questo comportamento è necessario creare un'associazione personalizzata con un'istanza della classe AsymmetricSecurityBindingElement o SymmetricSecurityBindingElement e impostare la proprietà MessageProtectionOrder della classe su un valore dell'enumerazione MessageProtectionOrder. Il valore predefinito è SignBeforeEncryptAndEncryptSignature. Questo processo può richiedere fino al 30 percento in più del tempo necessario per eseguire la firma e la crittografia in base alla dimensione globale del messaggio (minore è la dimensione del messaggio, maggiore sarà l'impatto sulle prestazioni). La disattivazione della crittografia della firma può tuttavia consentire a un utente malintenzionato di intuire il contenuto del messaggio poiché l'elemento di firma contiene il codice hash del testo normale di ogni parte firmata del messaggio. Ad esempio, anche se il corpo del messaggio viene crittografato per impostazione predefinita, la firma non crittografata contiene il codice hash del corpo del messaggio prima della crittografia. Se il set di valori possibili per la parte firmata e crittografata è limitato, un utente malintenzionato può essere in grado di dedurre il contenuto analizzando il valore hash. La crittografia della firma consente di ridurre il rischio di attacchi.

È consigliabile quindi disattivare la crittografia della firma soltanto quando il valore del contenuto è basso o il set di valori possibili del contenuto è ampio e non deterministico e il livello delle prestazioni è più importante rispetto alla riduzione del rischio di attacchi descritto sopra.

Nota

Se il messaggio non contiene alcun elemento crittografato, l'elemento di firma non viene crittografato, anche quando la proprietà AsymmetricSecurityBindingElement.MessageProtectionOrder o SymmetricSecurityBindingElement.MessageProtectionOrder è impostata su SignBeforeEncryptAndEncryptSignature. Questo comportamento si verifica anche con le associazioni fornite dal sistema. Per tutte le associazioni fornite dal sistema l'ordine di protezione dei messaggi è impostato su SignBeforeEncryptAndEncryptSignature. Tuttavia, il codice Web Services Description Language (WSDL) generato da WCF conterrà comunque l'asserzione <sp:EncryptSignature>.

Per disattivare la firma digitale

  1. Creare un oggetto CustomBinding. Per maggiori informazioni, vedere Procedura: Creare un'associazione personalizzata usando SecurityBindingElement.

  2. Aggiungere un elemento AsymmetricSecurityBindingElement o SymmetricSecurityBindingElement alla raccolta di associazioni.

  3. Impostare la proprietà AsymmetricSecurityBindingElement.MessageProtectionOrder su SignBeforeEncrypt oppure impostare la proprietà SymmetricSecurityBindingElement.MessageProtectionOrder su SignBeforeEncrypt.

Vedi anche