Поделиться через


Как настраивать подтверждение сигнатуры

Подтверждение подписи — это механизм, позволяющий инициатору сообщения убедиться, что полученный ответ был сформирован в ответ на исходное сообщение отправителя. Подтверждение подписи определено в спецификации WS-Security 1.1. Если конечная точка поддерживает WS-Security 1.0, использовать подтверждение подписи нельзя.

В процедурах ниже показано, как включить подтверждение подписи, используя элемент привязки AsymmetricSecurityBindingElement. Аналогичным образом можно использовать элемент привязки SymmetricSecurityBindingElement. Эта процедура основывается на базовых шагах, описанных в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.

Включение подтверждения подписи в коде

  1. Создайте экземпляр класса BindingElementCollection.

  2. Создайте экземпляр класса SymmetricSecurityBindingElement.

  3. Присвойте свойству RequireSignatureConfirmation значение true.

  4. Добавьте элемент безопасности в коллекцию элементов привязки.

  5. Создайте пользовательскую привязку, как описано в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.

Включение подтверждения подписи в конфигурации

  1. Добавьте элемент <bindings> в раздел <customBinding> файла конфигурации.

  2. Добавьте элемент <binding> и присвойте атрибуту имени соответствующее значение.

  3. Добавьте соответствующий элемент кодирования. В приведенном ниже примере добавляется элемент <TextMessageEncoding>.

  4. Добавьте дочерний элемент <security> и присвойте атрибуту requireSignatureConfirmation значение true.

  5. (Необязательно.) Чтобы включить подтверждение подписи в ходе начальной загрузки, добавьте дочерний элемент secureConversationBootstrap element и присвойте атрибуту equireSignatureConfirmation значение true.

  6. Добавьте соответствующий элемент транспорта. В следующем примере добавляется элемент httpTransport element:

    <bindings>
      <customBinding>
        <binding name="SignatureConfirmationBinding">
          <security requireSignatureConfirmation="true">
            <secureConversationBootstrap requireSignatureConfirmation="true" />
              </security>
           <textMessageEncoding />
             <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    

Пример

В приведенном ниже коде создается экземпляр класса SymmetricSecurityBindingElement и свойству RequireSignatureConfirmation присваивается значение true. Обратите внимание, что в этом примере не используется элемент <secureConversationBootstrap>, показанный в предыдущем примере. В этом примере демонстрируется подтверждение подписи при использовании маркера Windows (по протоколу Kerberos). В данном случае подпись клиента возвращается во всех ответах службы и подтверждается клиентом.

Private Function CreateBinding() As Binding 
    Dim bindings As New BindingElementCollection()
    Dim tokens As New KerberosSecurityTokenParameters()
    
    Dim security As New SymmetricSecurityBindingElement(tokens)
    
    ' Require that every request and return be correlated.
    security.RequireSignatureConfirmation = True
    
    bindings.Add(security)
    Dim encoding As New TextMessageEncodingBindingElement()
    bindings.Add(encoding)
    Dim transport As New HttpTransportBindingElement()
    bindings.Add(transport)
    Dim myBinding As New CustomBinding(bindings)
    Return myBinding    
End Function     
private Binding CreateBinding()
{
    BindingElementCollection bindings = new BindingElementCollection();
    KerberosSecurityTokenParameters tokens = new KerberosSecurityTokenParameters();
    SymmetricSecurityBindingElement security = 
      new SymmetricSecurityBindingElement(tokens);

    // Require that every request and return be correlated.
    security.RequireSignatureConfirmation = true;

    bindings.Add(security);
    TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
    bindings.Add(encoding );
    HttpTransportBindingElement transport = new HttpTransportBindingElement();
    bindings.Add(transport);
    CustomBinding myBinding = new CustomBinding(bindings);
    return myBinding;
}

См. также

Задачи

Как создать SecurityBindingElement для заданного режима проверки подлинности

Справочник

SymmetricSecurityBindingElement
AsymmetricSecurityBindingElement
CreateMutualCertificateBindingElement

Основные понятия

Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement