Instrukcje: wyłączanie szyfrowania podpisów cyfrowych

Domyślnie komunikat jest podpisany, a podpis jest szyfrowany cyfrowo. Jest to kontrolowane przez utworzenie niestandardowego powiązania z wystąpieniem AsymmetricSecurityBindingElement klasy lub SymmetricSecurityBindingElement i ustawienie MessageProtectionOrder właściwości klasy na MessageProtectionOrder wartość wyliczenia. Wartość domyślna to SignBeforeEncryptAndEncryptSignature. Ten proces zużywa do 30 procent więcej czasu niż zwykłe podpisywanie i szyfrowanie na podstawie ogólnego rozmiaru komunikatu (im mniejszy komunikat, tym większy wpływ na wydajność). Wyłączenie szyfrowania podpisu może jednak umożliwić atakującemu odgadnięcie zawartości wiadomości. Jest to możliwe, ponieważ element podpisu zawiera kod skrótu zwykłego tekstu każdej podpisanej części w wiadomości. Na przykład chociaż treść wiadomości jest domyślnie szyfrowana, niezaszyfrowany podpis zawiera kod skrótu treści wiadomości przed szyfrowaniem. Jeśli zestaw możliwych wartości dla podpisanej i zaszyfrowanej części jest mały, osoba atakująca może wyjmować zawartość, sprawdzając wartość skrótu. Szyfrowanie podpisu ogranicza ten wektor ataku.

W związku z tym wyłącz szyfrowanie podpisu tylko wtedy, gdy wartość zawartości jest niska lub zestaw możliwych wartości zawartości jest duży i nieokreślony, a wzrost wydajności jest ważniejszy niż ograniczenie ataku opisanego powyżej.

Uwaga

Jeśli w wiadomości, która jest zaszyfrowana, element podpisu nie jest szyfrowany, nawet jeśli AsymmetricSecurityBindingElement.MessageProtectionOrder właściwość or SymmetricSecurityBindingElement.MessageProtectionOrder jest ustawiona na SignBeforeEncryptAndEncryptSignature. Takie zachowanie występuje nawet w przypadku powiązań dostarczanych przez system; wszystkie powiązania dostarczone przez system mają kolejność ochrony komunikatów ustawioną na SignBeforeEncryptAndEncryptSignaturewartość . Jednak generowanie WCF usług sieci Web (WSDL) nadal będzie zawierać <sp:EncryptSignature> asercji.

Aby wyłączyć podpisywanie cyfrowe

  1. Utwórz element CustomBinding. Aby uzyskać więcej informacji, zobacz How to: Create a Custom Binding Using the SecurityBindingElement (Instrukcje: tworzenie powiązania niestandardowego przy użyciu elementu SecurityBindingElement).

  2. Dodaj element AsymmetricSecurityBindingElement lub do SymmetricSecurityBindingElement kolekcji powiązań.

  3. AsymmetricSecurityBindingElement.MessageProtectionOrder Ustaw właściwość na SignBeforeEncrypt, lub ustaw SymmetricSecurityBindingElement.MessageProtectionOrder właściwość na SignBeforeEncrypt.

Zobacz też