2010-06-16 11 views
6

Es selbst ist - gehosteten WCF-Server (nicht IIS), und wurden Zertifikate erzeugt (auf der Win Xp) mit der Befehlszeile wieSelbst - gehosteten WCF-Server und SSL

makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureClient -sky exchange -pe 
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureServer -sky exchange -pe 

Diese Zertifikate auf den Server hinzugefügt wurde Code wie folgt:

serviceCred.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureServer"); 



serviceCred.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureClient"); 

Nach allen vorherigen Betrieb erstellte ich einfachen Client SSL-Verbindung zum Server zu überprüfen.

Client-Konfiguration:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IAdminContract" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Basic"/> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://myhost:8002/Admin" binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IAdminContract" contract="Admin.IAdminContract" 
       name="BasicHttpBinding_IAdminContract" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Code:

Admin.AdminContractClient client = new AdminContractClient("BasicHttpBinding_IAdminContract"); 
      client.ClientCredentials.UserName.UserName = "user"; 
      client.ClientCredentials.UserName.Password = "pass"; 
      var result = client.ExecuteMethod() 

Während der Ausführung I nächste Fehler zu erhalten:

The provided URI scheme 'https' is invalid; expected 'http'.\r\nParameter name: via 

Frage: Wie ssl für selbst gehostete Server aktivieren und wo Soll ich Zertifikate für Client und Server einrichten? Danke.

Antwort

7

Versuchen Änderung

<security mode="TransportCredentialOnly"> 

zu

<security mode="Transport"> 

und lassen Sie uns wissen, ob das irgendwelche Verbesserungen macht. Dadurch sollte Ihr Client HTTPS-Verbindungen zulassen.

+0

Nach diesen Änderungen, die ich erhielt: ist ein Fehler aufgetreten, während der HTTP-Anforderung an https machen: // myhost: 8002/Admin. Dies kann daran liegen, dass das Serverzertifikat im HTTPS-Fall nicht ordnungsgemäß mit HTTP.SYS konfiguriert wurde. Dies könnte auch durch eine fehlende Übereinstimmung der Sicherheitsbindung zwischen dem Client und dem Server verursacht werden. – jitm

+0

Können Sie Ihre Server-Servicemodel Config aktualisieren Post mit –

+0

würde ich sicher sein, [auf Codeplex WCF Security Guidance], um das zu überprüfen (http://wcfsecurityguidance.codeplex.com/). Insbesondere [Diese Seite spricht von Zertifikatsauthentifizierung] (http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20Certificate%20Authentication%20and%20Message%20Security%20in%20WCF%20calling % 20von% 20Windows% 20Forms & referencingTitle = Wie% 20Tos). –

Verwandte Themen