Я пытаюсь использовать WCF для разработки веб-службы через Интернет. Требование состоит в том, что мы должны предоставить TLS (безопасность транспортного уровня) и MLS (безопасность уровня сообщений). Для этой цели мы используем «ws2007HttpBinding» с режимом безопасности как «TransportWithMessageCredential». Здесь я обнаружил, что запрос передается через SSL, но при использовании Fiddler (для https) я обнаружил, что тело мыла имеет открытый текстовый формат.
Для безопасности на транспортном уровне я использовал ClientCredentialType как «None», а для безопасности на уровне сообщений я использовал «Certificate» как ClientCredentialType.
Я использую .NET framework 3.5.
К вашему сведению, я использую другой сертификат для SSL и сервера.
Мой Web.config для сервера выглядит следующим образом.
<system.serviceModel>
<services>
<service behaviorConfiguration="API_WCF.Service1Behavior" name="API_WCF.API">
<endpoint address="https://localhost/API_WCF/API.svc" name="API" binding="ws2007HttpBinding" bindingConfiguration="customWsHttpBinding" contract="API_WCF.IARDAPI">
<identity>
<dns />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<ws2007HttpBinding>
<binding name="customWsHttpBinding">
<!-- For http -->
<!--
<security mode="Message">
<message clientCredentialType="Certificate" negotiateServiceCredential="false" establishSecurityContext="false"/>
</security>
-->
<!-- For https -->
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None"/>
<message clientCredentialType="Certificate" negotiateServiceCredential="false" establishSecurityContext="false"/>
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="API_WCF.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://localhost/API_WCF/API.svc/API"/>
<serviceCredentials>
<serviceCertificate findValue="CN=WSE2QuickStartServer" storeLocation="LocalMachine" x509FindType="FindBySubjectDistinguishedName" storeName="My"/>
<clientCertificate>
<authentication certificateValidationMode="ChainTrust" revocationMode="NoCheck"/>
</clientCertificate>
</serviceCredentials>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<diagnostics wmiProviderEnabled="true" performanceCounters="ServiceOnly">
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
</diagnostics>
</system.serviceModel>
Пожалуйста, расскажите, как достичь безопасности на уровне сообщений с помощью безопасности транспортного уровня в WCF через Интернет.