Как выключить шифрование цифровых сигнатур
По умолчанию сообщение подписывается и цифровая подпись шифруется. Этим процессом можно управлять, создавая пользовательскую привязку с экземпляром элемента AsymmetricSecurityBindingElement или SymmetricSecurityBindingElement и присваивая свойству MessageProtectionOrder каждого класса значение перечисления MessageProtectionOrder. Значение по умолчанию — SignBeforeEncryptAndEncryptSignature. Этот процесс занимает на 30 процентов больше времени, чем подпись и шифрование на основе полного размера сообщения (чем меньше сообщение, тем больше влияние на производительность). Однако в случае отключения шифрования подписи злоумышленник может распознать содержимое сообщения. Это обусловлено тем, что элемент подписи содержит хэш-код обычного текста каждой подписанной части сообщения. Например, хотя тело сообщения шифруется по умолчанию, нешифрованная подпись содержит хэш-код тела сообщения до шифрования. Если набор возможных значений для подписанной и зашифрованной части невелик, злоумышленник может понять содержимое, просмотрев хэш-значение. Шифрование подписи уменьшает вектор атак.
Таким образом, отключать шифрование подписи рекомендуется только тогда, когда содержимое имеет невысокую ценность или набор возможных значений содержимого велик и недетерминирован, и производительность имеет более высокое значение, чем снижение вероятности атаки, описанной выше.
![]() |
---|
Если никакая часть сообщения не шифруется, элемент подписи также не шифруется, даже если свойству System.ServiceModel.Channels.AsymmetricSecurityBindingElement.MessageProtectionOrder или System.ServiceModel.Channels.SymmetricSecurityBindingElement.MessageProtectionOrder присвоено значение SignBeforeEncryptAndEncryptSignature. Это поведение возникает даже с привязками, предоставляемыми системой; у всех предоставляемых системой привязок порядку защиты сообщений задано значение SignBeforeEncryptAndEncryptSignature. Однако в создаваемом WCF языке описания служб (WSDL) все равно будет содержаться утверждение <sp:EncryptSignature>. |
Отключение цифровой подписи
Создайте привязку CustomBinding. Дополнительные сведения см. в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.
Добавьте в коллекцию привязок элемент AsymmetricSecurityBindingElement или SymmetricSecurityBindingElement.
Присвойте свойству System.ServiceModel.Channels.AsymmetricSecurityBindingElement.MessageProtectionOrder значение SignBeforeEncrypt или присвойте свойству System.ServiceModel.Channels.SymmetricSecurityBindingElement.MessageProtectionOrder значение SignBeforeEncrypt.
См. также
Другие ресурсы
Возможности безопасности при использовании пользовательских привязок