2012-06-06 6 views
1

Я создал basichttpendpoint с режимом безопасности = «TransportWithMessageCredential» для моей собственной службы WCF.Конфигурирование конечной точки https с самообслуживанием WCF

Мой сервер конфигурации имеет:

enter code here 

    <system.serviceModel>  
     <bindings> 
    <basicHttpBinding> 
    <binding name="BasicHttpBinding_IViewerManager" maxBufferSize="655360000"     maxReceivedMessageSize="655360000" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
    <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="Certificate" /> 
    </security> 

      </binding> 
    </basicHttpBinding> 
    </bindings> 

<services> 
    <service behaviorConfiguration="SecureBehavior" name="Lumedx.ApolloLXPACS.ViewerServiceLibrary.ViewerManager"> 

    <endpoint name="basicHTTP" address="https://localhost:5100/ViewerService" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IViewerManager" contract="Lumedx.ApolloLXPACS.ServiceContracts.IViewerManager"/> 
    <host> 
    <baseAddresses> 
     <add baseAddress="https://localhost:5100/ViewerService"/> 
        </baseAddresses> 
       </host> 
      </service> 
     </services> 

     <behaviors> 
      <endpointBehaviors> 
       <behavior name="HttpsBehavior"> 
       </behavior> 
      </endpointBehaviors> 
      <serviceBehaviors> 

       <behavior name="SecureBehavior"> 

        <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
        <serviceCredentials> 
         <serviceCertificate findValue="RootCATest" 
              storeLocation="LocalMachine" 
              storeName="My" 
              x509FindType="FindByIssuerName" /> 
        </serviceCredentials> 
       </behavior> 

      </serviceBehaviors> 
     </behaviors> 

    </system.serviceModel> 
my windows client config has: 
<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
     <add key="priorityEndpoint1" value="basicHttpEndpoint"/> 

     <add key="maxCommunicationRetries" value="0"/> 
    </appSettings> 


    <system.serviceModel> 


     <bindings> 

      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IViewerManager" maxBufferSize="655360000" maxReceivedMessageSize="655360000" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
        <security mode="TransportWithMessageCredential"> 
         <message clientCredentialType="Certificate" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 

     <client> 
      <endpoint name="basicHttpEndpoint" address="https://10.10.10.100:5100/ViewerService/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IViewerManager" contract="Lumedx.ApolloLXPACS.ServiceContracts.IViewerManager" behaviorConfiguration="HttpsBehavior"/> 
     </client> 

     <behaviors> 
      <endpointBehaviors> 
       <behavior name="HttpsBehavior"> 
        <clientCredentials> 
         <clientCertificate findValue="RootCATest" 
              storeLocation="LocalMachine" 
              storeName="My" 
              x509FindType="FindByIssuerName" /> 
        </clientCredentials> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
    </system.serviceModel> 
< 

Я установлен и настроен сертификат.

Я подключаю свой клиент Windows с самообслуживающей службой WCF с конечными точками https. Я захватил сетевой трафик с помощью wirehark. Все, что я вижу в сетевом трафике, - это TCP-пакеты между сервером и клиентом. Когда я следую потоку TCP, сообщение, похоже, не зашифровано.

Что я здесь делаю неправильно?

+0

Предполагая, что ваш клиент и сервер находятся на одной машине, а wirehark имеет возможность расшифровать зашифрованное сообщение, передаваемое по каналу hte, он делает это. Если вы действительно получаете доступ к службе на https, тогда она должна зашифровать запрос. – Rajesh

ответ

0

Режим безопасности TransportWithMessageCredential шифрует транспорт (SSL) и оставляет тело сообщения незашифрованным.

Шифрование производится с использованием вашего сертификата.

Если вы видите, не зашифрованные данные один из следующих сценариев случилось:

  1. трафика по какой-то причине не шифруется с помощью SSL
  2. Wireshark имеет доступ к вашему сертификату и зашифрованного трафика, используя его.

Это похоже на то, что вы сделали? http://trycatch.be/blogs/decaluwet/archive/2009/04/08/decrypting-ssl-traffic-using-wireshark.aspx

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

Смежные вопросы