Vorgehensweise: Deaktivieren der Verschlüsselung digitaler Signaturen
Standardmäßig wird eine Nachricht signiert und die Signatur anschließend digital verschlüsselt. 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. Der Standardwert lautet SignBeforeEncryptAndEncryptSignature. Dieser Prozess nimmt bis zu 30 Prozent 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). Wenn Sie die Verschlüsselung der Signatur jedoch deaktivieren, kann ein Angreifer eventuell den Inhalt der Nachricht ermitteln. Dies ist möglich, da das Signaturelement den Hashcode des reinen Texts des signierten Teils der Nachricht enthält. Obwohl zwar der Nachrichtentext standardmäßig verschlüsselt ist, enthält die unverschlüsselte Signatur beispielsweise den Hashcode des Nachrichtentexts vor der Verschlüsselung. 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. Durch Verschlüsseln der Signatur ist diese Angriffsmöglichkeit nicht mehr gegeben.
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.
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. Dieses Verhalten tritt auch bei vom System bereitgestellten Bindungen auf. Für vom System bereitgestellte Bindungen ist die Nachrichtenschutzreihenfolge auf SignBeforeEncryptAndEncryptSignature
festgelegt. Die von WCF generierte WSDL (Web Services Description Language) enthält jedoch weiterhin die <sp:EncryptSignature>
-Assertion.
So deaktivieren Sie das digitale Signieren
Erstellen Sie eine CustomBinding. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement.
Fügen Sie der Bindungsauflistung entweder ein AsymmetricSecurityBindingElement oder ein SymmetricSecurityBindingElement hinzu.
Legen Sie die AsymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft auf SignBeforeEncrypt oder die SymmetricSecurityBindingElement.MessageProtectionOrder-Eigenschaft auf SignBeforeEncrypt fest.