Сертификат службы WCF и клиентские идентификационные данные конечной точки - почему это не работает?

Лучшая вещь об ограничениях внешнего ключа (и ограничениях в целом, действительно) то, что можно полагаться на них при записи запросов. Много запросов может стать намного более сложным, если Вы не можете полагаться на модель данных, содержащую "верный".

В коде, мы будем обычно просто бросать исключение где-нибудь - но в SQL, мы будем обычно просто получать "неправильные" ответы.

В теории, SQL  Сервер мог использовать ограничения в качестве части плана запросов - но за исключением проверочных ограничений для разделения, я не могу сказать, что когда-либо на самом деле свидетельствовал это.

10
задан Community 23 May 2017 в 12:10
поделиться

2 ответа

Эскиз решения:

1) Определите и зарегистрируйте пользовательский X509CertificateValidator на клиенте

2) В методе Validate сравните данный сертификат с тем, который присутствует в свойстве клиента EndpointAddress.Identity . Объект, на который ссылается это свойство, должен иметь точный тип X509CertificateEndpointIdentity .

Я не тестировал это решение, но для меня оно имеет смысл.

HTH Педро

4
ответ дан 4 December 2019 в 01:57
поделиться

Вы все исправили и почти закончили настройку конфигурации клиента. Вам не хватает одной последней вещи (как упоминалось в описании ошибки): вам необходимо установить revocationMode на NoCheck в конфигурации:

 <behaviors>
  <endpointBehaviors>
    <behavior name="SecureMessageUserName">
      <clientCredentials>
         <serviceCertificate>
            <authentication revocationMode="NoCheck"/>
         </serviceCertificate>
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
 </behaviors>

Если вам нужны дополнительные сведения, просто дайте мне знать, и я опубликую полную рабочую конфигурацию клиента .

Правка извините за задержку

Вам также следует добавить noCheck в конфигурацию сервера:

<behavior name="X509SecureBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <serviceCertificate storeName="My" storeLocation="CurrentUser" x509FindType="FindByThumbprint" findValue="aaaa" />
            <clientCertificate>
              <authentication certificateValidationMode="None" revocationMode="NoCheck" />
            </clientCertificate>
          </serviceCredentials>
        </behavior>

Также я не включил ссылку на сертификат в определение конечной точки.

0
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: