использование самоподписанного SSL-сертификата с WCF ws2007FederationBinding - PullRequest
1 голос
/ 03 сентября 2010

Я в своем уме и надеюсь, ты сможешь мне помочь.Я пытаюсь получить активную аутентификацию WS-Trust с помощью WIF из веб-приложения в веб-службу, используя самозаверяющий сертификат.

Я уже пробовал следующее:

1) Установите сертификат в хранилище сертификатов компьютера в разделе «Доверенные корневые центры сертификации, личные и доверенные лица»

2) Убедитесь, что «Все» имеют полный доступ к папке Crypto / RSA / MachineKeys

3).Переопределите проверку сертификата с помощью ServicePointManager.ServerCertificateValidationCallback для метода, который просто возвращает true.Я могу выполнить отладку в этом методе и посмотреть, что он возвращает true.

И я STILL вижу это в трассировке System.ServiceModel:

[0832] SecureChannel # 66940002 - Сертификатнесоответствие имени.

[0832] SecureChannel # 66940002 - Удаленный сертификат был проверен пользователем как недействительный.

И приложение разрывается из-за: Основное соединение было закрыто: Не удалось установить доверительные отношениядля безопасного канала SSL / TLS.

1 Ответ

0 голосов
/ 05 декабря 2011

Это связано с тем, что ServerCertificateValidationCallback выполняет только часть SSL, связанную с проверкой сертификата.

Так что, если он все еще не работает, это означает, что не только SSL при воспроизведении здесь.

На самом деле WS-Trust построен поверх WS-Security, а WS-Security делает подпись заголовков вашего сообщения.И на проверку этой подписи не влияет ServerCertificateValidationCallback .

У вас наверняка есть второй сертификат, подписывающий заголовки WS Security вашего сообщения.

Существует другая частькод, который проверяет, соответствует ли имя этих сертификатов значению в узле идентификации параметров конечной точки, как показано ниже:

<endpoint address="..." 
    <identity>
      <dns value="PUT CN OF THE MESSAGE SIGNATURE CERTIFICATE HERE" />
    </identity>
</endpoint>

Если, кроме того, сертификат подписи сообщения не проверяется, вы можете отключить его проверкуизменяя «поведение / endpointBehaviors / поведение / clientCredentials / serviceCertificate / аутентификация».Вы задаете для атрибута certificateValidationMode значение «Нет».

Или задаете для него значение «Пользовательский», и затем вам нужно будет реализовать собственный валидатор, который наследуется от System.IdentityModel.Selectors.X509CertificateValidator и переопределяет обратный вызов Validate.

...