Транспортная безопасность с аутентификацией сертификата - PullRequest
0 голосов
/ 03 ноября 2010

Я получаю следующую ошибку при доступе к своему веб-сервису localhost / MyService / MyService.svc

Настройки SSL для службы 'SslRequireCert' не совпадают с настройками IIS 'Ssl, SslNegotiateCert'.

Я следую примерам web.config, указанным в http://msdn.microsoft.com/en-us/library/ms731074.aspx

Вот мой wcf сервер web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings />
  <system.web>
    <identity impersonate="false" />
    <roleManager enabled="true" />
    <authentication mode="Windows" />
    <customErrors mode="Off" />
    <webServices>
      <protocols>
        <add name="HttpGet" />
        <add name="HttpPost" />
      </protocols>
    </webServices>
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <security>
      <authorization>
        <remove users="*" roles="" verbs="" />
        <add accessType="Allow" users="*" roles="" />
      </authorization>
    </security>
  </system.webServer>
  <system.serviceModel>
    <services>
      <service name="AspNetSqlProviderService" behaviorConfiguration="MyServiceBehavior">
        <endpoint binding="wsHttpBinding" contract="Interface1" bindingConfiguration="CertificateWithTransportWSHttpBinding" />
        <endpoint binding="wsHttpBinding" contract="Interface2" bindingConfiguration="CertificateWithTransportWSHttpBinding" />
        <endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="CertificateWithTransportWSHttpBinding" name="Metadata_Exchange" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="True" />
          <serviceMetadata />
          <serviceCredentials>
            <clientCertificate>
              <authentication trustedStoreLocation="LocalMachine"
                               revocationMode="Online"/>
            </clientCertificate>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="CertificateWithTransportWSHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Я настроил IIS следующим образом:

  • Добавлена ​​привязка https с использованием самозаверяющего сертификата
  • В настройках SSL установлен флажок Требовать SSL и принимать сертификаты клиента
  • Самоподписанный сертификат был добавлен в доверенный корневой центр локального компьютера.

Я могу просмотреть и выполнить определение службы .asmx, но .svc выдает ошибку, описанную выше.

Ответы [ 3 ]

1 голос
/ 19 апреля 2012

Попробуйте закомментировать вашу конечную точку mex.Это должно заставить его работать

0 голосов
/ 28 сентября 2012

Я думал об этом в течение по крайней мере 2-3 часов и упустил из виду ответ выше о комментировании вашей конечной точки mex.

Это оказалось ответом для меня, поэтому я просто хотел еще разприведите в исполнение ответ выше.См. Комментарий внизу шага 7 в вышеприведенном сообщении:

http://consultingblogs.emc.com/matthall/archive/2009/10/22/client-certificate-authorisation-with-wcf-in-development-environments.aspx

0 голосов
/ 06 ноября 2010

Вот процесс

  1. Создание самоподписанного сертификата в IIS.
  2. Создание сайта в IIS.
  3. Настройка сайта на требование SSL.
  4. Ошибка в IIS 7 не позволит вам указать имя хоста для сайта при выборе протокола https в привязках.Есть инструкции здесь для правильной установки имени хоста для этой привязки.
  5. В вашей веб-конфигурации измените его следующим образом:

    <wsHttpBinding> 
       <binding name="CertificateWithTransportWSHttpBinding"> 
           <security mode="Transport"> 
              <transport clientCredentialType="none" /> 
           </security> 
       </binding> 
    </wsHttpBinding>
    
    
    <serviceBehaviors>  
       <behavior name="MyServiceBehavior">  
          <serviceDebug includeExceptionDetailInFaults="True" />  
             <serviceMetadata />   
       </behavior>  
    </serviceBehaviors>  
    
  6. В вашей конечной точке MEX установите привязку = "wsHttpsBinding"

Если вы сделаете все вышеперечисленное, вы должны работать со службой SSL WCF.

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