Клиент службы WCF с сертификатом подлинности, работает при отладке, но не работает - PullRequest
0 голосов
/ 16 февраля 2012

Я использую сертификат WCF, прошедший проверку подлинности.Я работаю, когда в VS debugmode, но когда я публикую и запускаю, он не будет работать.

Сертификаты хранятся в CurrentUser / TrustedPeople.Это мой конфигурационный раздел поведения:

<behavior name="LoadClientCert">
    <clientCredentials>
        <clientCertificate findValue="CN=Certificate1"
                        storeLocation="CurrentUser" storeName="TrustedPeople"
                        x509FindType="FindBySubjectDistinguishedName" />
        <serviceCertificate>
          <defaultCertificate findValue="CN=Certificate2"
                        storeLocation="CurrentUser" storeName="TrustedPeople"
                        x509FindType="FindBySubjectDistinguishedName" />
          <authentication certificateValidationMode="None"
                        revocationMode="NoCheck" />
        </serviceCertificate>
      </clientCredentials>
</behavior>

Сообщение об ошибке: Ошибка запроса Сервер обнаружил ошибку при обработке запроса.Подробнее смотрите в журналах сервера.

Я предполагаю, что у пользователя IIS нет прав на использование сертификата.Но это только предположение.

И где я могу найти этот журнал сервера?Я попробовал просмотрщик событий, но ничего не нашел.Я также добавил это в свой конфиг без удачи (он пуст после попытки решения):

<system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
             <add name="messages"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData="f:\logs\messages.svclog" />
      </listeners>
  </source>
</sources>
</system.diagnostics>
<diagnostics>
<messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false"
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false"
     maxMessagesToLog="3000"
     maxSizeOfMessageToLog="2000"/>
</diagnostics>

Есть предложения?

1 Ответ

2 голосов
/ 16 февраля 2012

Если вы используете 2, это SSL, т.е. защита транспортного канала с помощью SSL и аутентификация вашего клиента с помощью SSL, тогда сертификаты должны быть размещены следующим образом:

Для сертификата сервера (файл .pfx):

Установите сертификат в личную папку локального компьютера.

Для клиентских сертификатов:

На сервере (файл .cer): установите сертификат клиента в локальном компьютере -> Хранилище доверенных лиц.

На клиентском компьютере (файл .pfx): установите сертификат клиента в «Локальный пользователь» -> «Персональное хранилище»

Также, если сертификат сервера самоподписан, обязательно используйте следующий код на вашемна стороне клиента непосредственно перед вызовом метода обслуживания:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
                                                                                 {
                                                                                     return true;
                                                                                 };

ОБНОВЛЕНИЕ:

Как включить трассировку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...