Einrichten config-Dateien für das WCF (mit SSL und Zertifikaten
Ich versuche zum einrichten einer WCF-webservice im IIS 7 mit SSL und ich bin ein bisschen verloren mit config-Dateien.
Ich will die Daten vom server an den client fehlerhaft sein (Ist das genug mit SSL?)
Der client muss auch die Identität sich gegenüber dem server durch ein Zertifikat.
Habe ich die folgenden Zertifikate vorhanden:
- dev.test.com - Zugriff auf die url https://dev.test.com/TestService.svc zeigt, dass es das gültige Zertifikat.
- TestServer - ein dummy-Zertifikat identifiziert den server (brauche ich wirklich brauchen? Oder vielleicht kann ich die Wiederverwendung der dev.test.com? Vielleicht haben server.test.com?)
- TestClient - ein dummy-Zertifikat auf der client-Seite
Und dies ist, wie meine config-Dateien einrichten:
Web.config (Server):
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding"
messageEncoding="Mtom">
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service
name="TestService"
behaviorConfiguration="TestServiceBehavior">
<endpoint
name="TestEndPoint"
address=""
binding="wsHttpBinding"
bindingConfiguration="wsHttpEndpointBinding"
bindingNamespace="http://www.example.com/"
contract="iWebService">
<!--<identity>
<dns value=""/>
</identity>-->
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" name="MexHttpsBindingEndpoint" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
<serviceCertificate findValue="TestServer" storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
App.config (Client):
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding" bypassProxyOnLocal="false"
transactionFlow="false" hostNameComparisonMode="StrongWildcard"
messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<reliableSession ordered="true"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
<binding name="TestEndPoint" bypassProxyOnLocal="false"
transactionFlow="false" hostNameComparisonMode="StrongWildcard"
messageEncoding="Mtom"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<reliableSession ordered="true"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://dev.test.com/TestService.svc"
behaviorConfiguration="TestServiceBehavior"
binding="wsHttpBinding" bindingConfiguration="wsHttpBinding"
contract="IContractName" name="wsHttpBinding">
<identity>
<dns value="TestServer" />
</identity>
</endpoint>
<endpoint address="https://dev.test.com/DistributionCenterService.svc"
binding="wsHttpBinding" bindingConfiguration="TestEndPoint" contract="IContract.Name"
name="TestEndPoint" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="TestServiceBehavior">
<clientCredentials>
<clientCertificate findValue="TestClient"
storeName="My"
storeLocation="CurrentUser"
x509FindType="FindBySubjectName"/>
<serviceCertificate>
<authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"
trustedStoreLocation="CurrentUser"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Wenn ich versuche, auf die https://dev.test.com/TestService.svc, ich bekomme
Could not find a base address that matches scheme http for the endpoint with binding WSHttpBinding. Registered base address schemes are [https].
Sowieso, ich bin wirklich verloren, mit welcher config Einstellung ich verwenden soll.
InformationsquelleAutor kei | 2012-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich, dass Sie in der Lage, https zu verwenden, deine Sicherheit Modus auf wsHttpBinding für die der client benötigt, um entweder Verkehrs-oder (wohl in deinem Fall) TransportWithMessageCredential.
Vielleicht gibt es ja auch - ich war die Fokussierung auf die erste Fehlermeldung, die Sie immer waren 🙂
Ich sehe. Lassen Sie mich versuchen, dieses heraus.
Genial! Das behebt es! Hatte zu verwenden TransportWithMessageCredential auf dem server und der client-Seite.
InformationsquelleAutor 500 - Internal Server Error