2016-04-07 6 views
0

Ich habe meine benutzerdefinierte Zertifizierungsstelle (CA) mit openssl erstellt. Dann habe ich ein Zertifikat erstellt, das das vorherige und die Anfrage von IIS verwendet. So, jetzt habe ich eine Kette von Zertifikaten. Dann habe ich den zweiten an meinen WCF-Service gebunden und alles ist in Ordnung. Dann habe ich auf dem Client mein CA-Zertifikat in der vertrauenswürdigen Stammzertifizierungsstelle installiert, damit es mein benutzerdefiniertes Zertifikat erkennen kann. Mein WCF-Dienst wird derzeit auf einer einfachen http-Verbindung ausgeführt. Server-Seite:WCF-Dienst und benutzerdefinierte CA

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="SyncWcfServices.MainServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="ExtendedMaxSize" maxReceivedMessageSize="2147483647"> 
       <security mode="None"> 
        <transport clientCredentialType="None"></transport> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="SyncWcfServices.MainService" behaviorConfiguration="SyncWcfServices.MainServiceBehavior"> 
      <endpoint address="/syncService.svc" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="SyncWcfServices.IMainService"></endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

Client-Seite:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IMainService" maxReceivedMessageSize="2147483647" sendTimeout="00:10:00"> 
       <security mode="None" /> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost/SyncService/SyncService.svc" 
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMainService" 
contract="SyncServiceReference.IMainService" name="WSHttpBinding_IMainService" /> 
    </client> 
</system.serviceModel> 

Also, ich brauche diese Einstellungen zu ändern SSL-Verbindung zu unterstützen. Ich habe viel Post gelesen, wie man es tut, aber dort, immer benutzend 2-way Zertifikationüberprüfung, dass mittlerer Server Clientzertifikat überprüfen muss und Client Serverzertifikat überprüfen muss. Aber ich möchte nur Client überprüfen Serverzertifikat mit CA, die ich installiert habe. Und der Server überprüft die normalen Anmeldeinformationen (Benutzername, Passwort) wie zuvor. Ich denke, dass ich den Sicherheitsmodus zu Transport auf beiden Seiten ändern muss und mex Endpunkt zu mexHttpsBinding, aber was soll ich als nächstes tun? Bitte helfen Sie es zu lösen. Danke euch allen!

Antwort

0

Endlich habe ich den richtigen Weg gefunden! So Serverseite:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="SyncWcfServices.MainServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceCredentials> 
       <serviceCertificate 
        findValue = "*.mydomain.com" 
        storeLocation = "LocalMachine" 
        storeName = "My" 
        x509FindType = "FindBySubjectName" 
        /> 
       </serviceCredentials> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="ExtendedMaxSize" maxReceivedMessageSize="2147483647"> 
       <security mode="Transport"> 
        <transport clientCredentialType="None"></transport> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="SyncWcfServices.MainService" behaviorConfiguration="SyncWcfServices.MainServiceBehavior"> 
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="SyncWcfServices.IMainService"></endpoint> 
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost:8095/Design_Time_Addresses/SyncWcfServices/MainService/" /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

Client Side:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name = "ServiceCertificate"> 
       <clientCredentials> 
        <serviceCertificate> 
         <authentication certificateValidationMode = "ChainTrust"/> 
        </serviceCertificate> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="ExtendedMaxSize" maxReceivedMessageSize="2147483647"> 
       <security mode="Transport"> 
        <transport clientCredentialType="None"></transport> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://localhost/SyncService/SyncService.svc" 
     binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" 
     behaviorConfiguration = "ServiceCertificate" 
     contract="SyncServiceReference.IMainService" name="WSHttpBinding_IMainService"> 
     </endpoint>    
    </client> 
</system.serviceModel> 

Hoffe, dass es jemand helfen! Siehe auch "Programmierung WCF Services" (4. Auflage) Buch von Juval Lowy & Michael Montgomery. Es ist ein großartiges Buch!