Vorgehensweise: Deaktivieren der Verschlüsselung digitaler SignaturenHow to: Disable Encryption of Digital Signatures

Standardmäßig wird eine Nachricht signiert und die Signatur anschließend digital verschlüsselt.By default, a message is signed and the signature is digitally encrypted. Dies wird gesteuert, indem eine benutzerdefinierte Bindung mit einer Instanz von AsymmetricSecurityBindingElement oder SymmetricSecurityBindingElement erstellt und anschließend die MessageProtectionOrder-Eigenschaft der jeweiligen Klasse auf einen MessageProtectionOrder-Enumerationswert festgelegt wird.This is controlled by creating a custom binding with an instance of the AsymmetricSecurityBindingElement or the SymmetricSecurityBindingElement and setting the MessageProtectionOrder property of either class to a MessageProtectionOrder enumeration value. Die Standardeinstellung ist SignBeforeEncryptAndEncryptSignature.The default is SignBeforeEncryptAndEncryptSignature. Dieser Prozess nimmt bis zu 30Prozent mehr Zeit in Anspruch als das einfache Signieren und Verschlüsseln auf Basis der Gesamtnachrichtengröße (je kleiner die Nachricht, desto geringer die Leistungsbeeinträchtigung).This process consumes up to 30 percent more time than simply signing and encrypting based on the overall message size (the smaller the message, the greater the performance impact). Wenn Sie die Verschlüsselung der Signatur jedoch deaktivieren, kann ein Angreifer eventuell den Inhalt der Nachricht ermitteln.Disabling encryption of the signature, however, might allow an attacker to guess the content of the message. Dies ist möglich, da das Signaturelement den Hashcode des reinen Texts des signierten Teils der Nachricht enthält.This is possible because the signature element contains the hash code of the plain text of every signed part in the message. Obwohl zwar der Nachrichtentext standardmäßig verschlüsselt ist, enthält die unverschlüsselte Signatur beispielsweise den Hashcode des Nachrichtentexts vor der Verschlüsselung.For example, although the message body is encrypted by default, the unencrypted signature contains the hash code of the message body before the encryption. Ist für den signierten und verschlüsselten Teil nur eine geringe Anzahl von Werten möglich, kann der Inhalt von einem Angreifer möglicherweise durch einen Blick auf den Hashwert ermittelt werden.If the set of possible values for the signed and encrypted part is small, an attacker might be able to deduce the contents by looking at the hash value. Durch Verschlüsseln der Signatur ist diese Angriffsmöglichkeit nicht mehr gegeben.Encrypting the signature mitigates this attack vector.

Deaktivieren Sie aus diesem Grund die Verschlüsselung der Signatur nur dann, wenn der Wert des Inhalts gering, die Anzahl möglicher Inhaltswerte groß und nicht deterministisch ist und der Leistungsgewinn Vorrang vor der Vermeidung des oben beschriebenen Angriffsrisikos hat.Therefore, disable encryption of the signature only when the value of the content is low or the set of possible content values is large and nondeterministic, and the performance gain is more important than mitigating the attack described above.

Hinweis

Enthält die Nachricht keinerlei verschlüsselte Inhalte, wird das Signaturelement nicht verschlüsselt. Dies gilt auch, wenn AsymmetricSecurityBindingElement.MessageProtectionOrder oder die SymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft auf SignBeforeEncryptAndEncryptSignature festgelegt ist.If there is nothing in the message that is encrypted, the signature element is not encrypted, even when the AsymmetricSecurityBindingElement.MessageProtectionOrder or SymmetricSecurityBindingElement.MessageProtectionOrder property is set to SignBeforeEncryptAndEncryptSignature. Dieses Verhalten tritt auch bei vom System bereitgestellten Bindungen auf. Für vom System bereitgestellte Bindungen ist die Nachrichtenschutzreihenfolge auf SignBeforeEncryptAndEncryptSignature festgelegt.This behavior occurs even with system-provided bindings; all system-provided bindings have the message protection order set to SignBeforeEncryptAndEncryptSignature. Web Services Description Language (WSDL) WCF generiert wird jedoch weiterhin enthalten die <sp:EncryptSignature> Assertion.However, the Web Services Description Language (WSDL) WCF generates will still contain the <sp:EncryptSignature> assertion.

So deaktivieren Sie das digitale SignierenTo disable digital signing

  1. Erstellen Sie eine CustomBinding.Create a CustomBinding. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement.For more information, see How to: Create a Custom Binding Using the SecurityBindingElement.

  2. Fügen Sie der Bindungsauflistung entweder ein AsymmetricSecurityBindingElement oder ein SymmetricSecurityBindingElement hinzu.Add either an AsymmetricSecurityBindingElement or a SymmetricSecurityBindingElement to the binding collection.

  3. Legen Sie die AsymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft auf SignBeforeEncrypt oder die SymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft auf SignBeforeEncrypt fest.Set the AsymmetricSecurityBindingElement.MessageProtectionOrder property to SignBeforeEncrypt, or set the SymmetricSecurityBindingElement.MessageProtectionOrder property to SignBeforeEncrypt.

Siehe auchSee Also

Sicherheitsfunktionen mit benutzerdefinierten BindungenSecurity Capabilities with Custom Bindings