2012-06-03 26 views
5

¿Hay alguna forma de usar WCF SSL con NetTcpBinding que no requiera la instalación de un certificado de cliente en la máquina cliente? (SSL V2 si no me equivoco).Uso del certificado Wcf SSl sobre Tcp sin certificado de cliente (solo del lado del servidor)

queremos que el certificado del servidor esté en la tienda de confianza del cliente para la autenticación y encriptar su mensaje mediante la clave pública del servidor, lo que significa que solo la máquina servidor tendrá un certificado de clave privada.

estamos usando un NetTcpBinding y no un CustomBinding en ambos lados. Si se puede hacer, ¿cuál es la configuración correcta para ello? (en las configuraciones del servidor del cliente &)

Gracias de antemano.


aquí están mis wcf Configs.

CONFIG SERVER:



    <configuration> 
     <system.serviceModel> 
     <bindings> 
     <netTcpBinding> 
      <binding name="TcpSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Certificate"/>    
      </security> 
     </binding> 
     </netTcpBinding> 
     </bindings> 
     <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceCredentialsBehavior">   
      <serviceDebug includeExceptionDetailInFaults="True" /> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceAuthorization 
       principalPermissionMode="UseWindowsGroups"> 
      </serviceAuthorization> 
      <serviceCredentials> 
       <windowsAuthentication includeWindowsGruops="true"    
             allowAnonymousLogons="false"/> 
       <clientCertificate> 
        <authentication certificateValidationMode="none"/> 
       </clientCertificate> 
       <serverCertificate 
        findValue="thumbprint" 
        storelocation="LocalMachine" 
        x509FindType="FindMyThumbprint" 
        storeName="My"/> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
     </behaviors> 
    <services> 
     <service behaviorConfiguration="ServiceCredentialsBehavior" 
       name="ServiceModel.Calculator"> 
      <endpoint address="net.tcp://localhost:8040/Calculator" 
        binding="netTcpBinding" 
        bindingConfiguration="TcpSecureBinding" 
        contract="ServiceModel.ICalculator" > 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    </system.serviceModel> 
    </configuration> 

configuración del cliente:



    <configuration> 
     <system.serviceModel> 
     <client> 
     <endpoint address="net.tcp://localhost:8040/Calculator" 
       behaviorConfiguration="endpointCredentialBehavior" 
       binding="netTcpBinding" 
       bindingConfiguration="Binding1" 
       contract="ServiceModel.ICalculator"> 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
      </endpoint> 
     </client> 
     <behaviors> 
     <endpointBehaviors> 
      <behavior name="endpointCredentialBehavior"> 
      </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <bindings> 
     <netTcpBinding> 
      <binding name="Binding1"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Windows" /> 
      </security> 
      </binding> 
      </netTcpBinding> 
     </bindings> 
    </system.serviceModel> 
    </configuration> 

im añadiendo mis actuales configuraciones de servidor & cliente. otras preguntas:

  1. en el nivel de autenticación queremos que el cliente se autentifique certificado de servidor Ther (creo que la clave pública del servidor debe estar en el almacén trustedPeople), es esto posible?

  2. ¿nos recomiendan usar Transport Security or Message?

  3. si queremos autenticar cliente servidor & mediante NTLM (clientCredentialType = Windows) es que puede hacerse además de la autenticación de certificados del servidor o sólo uno de ellos se puede aplicar? hasta ahora, hemos utilizado la autenticación NTLM.

  4. ahora Im consiguiendo excepción: "La actualización solicitada no está soportada por 'net.tcp: // servidor: 8040/**'. Esto podría ser debido a consolidaciones no coincidentes (por ejemplo, la seguridad habilitada en el cliente y no en el servidor) ". entiendo que este error se produjo porque el cliente está usando Windows Security y el servidor en om Certificate, pero cuando también estoy cambiando la seguridad del cliente a Certificate, obtengo un error: "No se proporciona el certificado del cliente". pero no quiero establecer el certificado del cliente y eso es parte de mi problema principal.

  5. leemos que podemos utilizar para la autenticación de certificados del servidor de esta tags:

    
        <identity> 
         <certificate encodedValue="encoded certificate"/> 
        </identity> 
    

Pero, creo que esta autenticación de la identidad se realiza mediante un certificado codificado cuando preffer que la identificación del CERT se realizará buscando en la clave pública del servidor en la tienda del cliente (trustedPeople). ¿esta información es realmente cierta? que éste Etiquetas de identidad son alternativo de buscar la clave pública en el cliente "s tienda de confianza?

esperanza de que será capaz de ayudar en esta modales, gracias de nuevo.

+0

Es posible. ¿Qué has intentado hasta ahora? – Bernard

+0

No debe necesitar un certificado de cliente a menos que lo solicite específicamente; ¿Cómo se ve tu configuración de enlace? –

+0

¿Alguien puede ayudarme con nuestro problema, por favor? – AmirT

Respuesta

11

se está utilizando netTcpBiding y la necesidad de utilizar Seguridad de transporte, entonces tiene 3 opciones, la primera opción requiere certificado de servicio, la segunda no requiere certificación, la tercera requiere certificado de servicio y certificado de cliente. Para su escenario, debe usar la opción 1 que autenticará el servicio a través de su certificado y Procera Confidencialidad e Integridad para los mensajes

C >> Confidencialidad
I >> Integridad
A >> Autenticación (Eso sucederá para el cliente)

1- Opción uno proporcionar (C + I) sin autenticación ocurrirá para el cliente, en este caso el protocolo SSL TCP (no el SSL HTPS) se utiliza para proporcionar la C e I, y el servicio será

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

también porque el SSL TCP se utiliza el servicio debe proporcionar un certificado para el cliente, por lo que necesita instalar un certificado en el servidor y conigurar el servicio para usar este certificado para probar su identidad, también necesita instalar el certificado de la autoridad de certificación raíz para el ser certificado de vicio en la máquina cliente (típicamente en las Autoridades LocalMachine/de confianza de certificación raíz), y el servicio necesita tener el comportamiento siguiente para especificar el certificado para el servicio

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 

2- segunda opción proporciona (A + [C + I]), C e I son opcionales a medida que se configura a través del elemento protectionLevel. la autenticación del cliente será ventanas de autenticación (típicamente el uso de Windows Corriente de Seguridad para lograr la A, C e I)

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

3- opción 3 proporcionan (A + C + I), el C y no son opcionales y la autenticación del cliente será a través de certificado de cliente (cada cliente debe tener su propio certificado), En este caso, el SSL TCP (no el SSL HTPS) se utilizará para proporcionar la a, C y I.

<!--//Below are the configuration for both the service and the client--> 
<binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"></transport> 
     </security> 
    </binding> 

también porque se utilizará TCP SSL, entonces el servicio debe proporcionar un certificado para el cliente, por lo que debe instalar un certificado en el servidor y configurar el servicio para usar este certificado para probar su identidad, también necesita instalar el certificado de la autoridad de certificación raíz para el certificado de servicio en la máquina cliente (típicamente en las Autoridades de Certificación LocalMachine/Trusted Root), y el servicio debe tener el siguiente comportamiento para especificar el certificado para el servicio

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
+0

¿Cómo debe verse la configuración del punto final del cliente para usar solo la clave de CA raíz pública? He intentado configurar mi servicio con un certificado de máquina firmado por la CA raíz, pero cuando configuro el cliente para usar la CA raíz, el cliente y el servidor no pueden hablar. Pero cuando pongo la clave pública del certificado de la máquina de servicio en el cliente (y cambio el "findValue" a ese nombre de certs), entonces funciona. ¿Qué estoy haciendo mal? –

+0

Respuesta de [Ryan Gunn's Blog] (https://talkdotnet.wordpress.com/tag/nettcp/) – noobob

Cuestiones relacionadas