Подтвердить что ты не робот

Ошибка WCF: "Сертификат X.509 CN = повреждение локальной сети хоста..."

Я получаю эту ошибку, пытаясь заставить моего клиента и сервера WCF разговаривать друг с другом.

Сертификат X.509 CN = создание схемы localhost не удалось. сертификат, который был использован, имеет цепочку доверия, которая не может быть проверена. Замените сертификат или измените certificateValidationMode. цепочка сертификатов обработана, но завершена в корневом сертификате которому не доверяют доверие.

Все работает отлично, если отключить SSL-сертификаты.

4b9b3361

Ответ 1

Проблема с вашим сертификатом (я полагаю, вы используете самозаверяющий сертификат). WCF пытается проверить всю цепочку эмитентов и ожидает, что, наконец, цепочка завершится с помощью доверенных полномочий root. Чтобы отключить эту проверку, вы можете добавить такую ​​строку в ветку app.config. Но этот "костыль" не должен использоваться в производстве serviceBehaviors/behavior/serviceCredentials/clientCertificate

<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" />

Ответ 2

Я исправил проблему, отключив проверку в моем коде следующим образом:

client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = 
System.ServiceModel.Security.X509CertificateValidationMode.None;

Где client - это экземпляр моей справки по сервису.

Ответ 3

Правильная вещь - настроить собственный сертификат доверенного корня Dev/Test и подписаться с этим сертификатом клиента и службы.

Обход доверия сети в вашей среде Dev/Test может "работать", но ваша среда Dev/Test теперь настроена по-разному на Production, что не является отличной идеей, так как вы можете обнаружить, что некоторые тесты создают ложные срабатывания или ложные негативы.

Ответ 4

У меня были некоторые трудности с этой же самой точной проблемой. Я использовал образец CustomToken-VS2010 из WIF SDK.

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

У меня была такая же проблема. У меня была проблема: "Где я могу установить этот режим?" Мне было трудно найти объект, у которого было это свойство, чтобы установить, что это действительно правильный объект. Я, наконец, нашел его частью ChannelFactory:

using System.ServiceModel.Security;
:
ChannelFactory<IEcho> echoChannelFactory = new ChannelFactory<IEcho>(...)
echoChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

Итак, место для установки это в объекте ChannelFactory.

Запуск Visual Studio 2010 в качестве локального администратора, мне удалось заставить образец работать (после запуска также командного файла, связанного со всеми образцами, для создания сертификата и т.д.)

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

Ответ 5

Добавьте поведение конечной точки в клиентское приложение (например, App.config) и настройте конфигурацию поведения, добавленную в конечную точку.

 <behaviors>
          <endpointBehaviors>
            <behavior name="certificateEndpointBehavior">
              <clientCredentials>
                <serviceCertificate>             
                  <authentication certificateValidationMode="None" revocationMode="NoCheck"/>
                </serviceCertificate>
                </clientCredentials>      
            </behavior>
          </endpointBehaviors>
        </behaviors>

<endpoint address="http://localhost/Invoice.svc" binding="wsHttpBinding"  bindingConfiguration="WsHttpBinding_ACKS" contract="Invoice" name="Invoice"
       behaviorConfiguration="certificateEndpointBehavior" >

</endpoint>

Ответ 6

При деактивации метода revocationMode, скорее всего, вам не хватает списка аннулирования клиента для вашего корневого ЦС.

makecert -crl -n "CN=CARoot" -r -sv CARoot.pvk CARoot.crl

Это также необходимо импортировать в доверенные корневые центры сертификации. См. Также мой ответ здесь.

Ответ 7

(Думаю, я поделился бы этим на случай, если кто-то там кого-нибудь кого-нибудь спадет). Я столкнулся с этой проблемой при запуске веб-приложения на WIF. Я исправил свою проблему, переместив копию сертификата x.509, с которым я работал, из папки "Сертификаты/личные/сертификаты" в папку "Доверенные корневые центры сертификации/сертификаты" в хранилище сертификатов. Вы можете сделать это, запустив консоль управления Microsoft.

Ответ 8

Следуя приведенному выше замечанию Aseiu, я обнаружил, что указанная выше ошибка будет выводиться, когда сертификат отсутствует в доверенном хранилище на сервере. Изучая эту проблему, я также обнаружил, что, посмотрев на средство просмотра событий в Windows Logs/Application, будет содержаться ошибка, указывающая на сертификат, с которым у него возникла проблема. Вы также можете сопоставить журнал активности с записями в журнале SVC для службы.