Compartir a través de


Cómo crear un servicio que emplee un validador de certificado personalizado

En este tema se muestra cómo implementar un validador del certificado personalizado y cómo configurar el cliente o credenciales del servicio para reemplazar la lógica de validación de certificado predeterminada por el validador del certificado personalizado.

Si se utiliza el certificado X.509 para autenticar un cliente o servicio, Windows Communication Foundation (WCF) utiliza de forma predeterminada el almacén de certificados de Windows y Crypto API para validar el certificado y asegurarse que es de confianza. Puede que la funcionalidad de validación de certificado integrada no sea suficiente y se deba cambiar. WCF proporciona una manera fácil de cambiar la lógica de validación, ya que permite a los usuarios agregar un validador de certificado personalizado. Si se especifica un validador de certificado personalizado, WCF no utiliza la lógica de validación de certificado integrada, pero se basa en el validador personalizado en su lugar.

Procedimientos

Crear un validador de certificado personalizado

  1. Defina una clase nueva derivada a partir de X509CertificateValidator.

  2. Implemente el método Validate abstracto. El certificado que se debe validar se pasa como un argumento al método. Si el certificado pasado no es válido según la lógica de la validación, este método inicia SecurityTokenValidationException. Si el certificado es válido, el método vuelve al autor de la llamada.

    Nota

    Para devolver errores de autenticación al cliente, genere una FaultException en el método Validate.

Especificar un validador de certificado personalizado en configuración de servicio

  1. Agregue un elemento <behaviors> y serviceBehaviors section al elemento <system.ServiceModel>.

  2. Agregue Behavior element y defina el atributo name en un valor adecuado.

  3. Agregue <serviceCredentials> Element al elemento <behavior>.

  4. Agregue un elemento <clientCertificate> al elemento <serviceCredentials>.

  5. Agregue <authentication> of <clientCertificate> Element al elemento <clientCertificate>.

  6. Defina el atributo customCertificateValidatorType en el tipo de validador. El ejemplo siguiente define el atributo en el espacio de nombres y nombre del tipo.

  7. Defina el atributo certificateValidationMode a Custom.

    <configuration>
     <system.serviceModel>
      <behaviors>
       <serviceBehaviors>
        <behavior name="ServiceBehavior">
         <serviceCredentials>
          <clientCertificate>
          <authentication certificateValidationMode="Custom" customCertificateValidatorType="Samples.MyValidator, service" />
          </clientCertificate>
         </serviceCredentials>
        </behavior>
       </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    </configuration>
    

Especificar un validador de certificado personalizado mediante la configuración del cliente

  1. Agregue un elemento <behaviors> y serviceBehaviors section al elemento <system.ServiceModel>.

  2. Agregue un elemento <endpointBehaviors>.

  3. Agregue un elemento <behavior> y establezca el atributo name en un valor adecuado.

  4. Agregue un elemento <clientCredentials>.

  5. Agregue <serviceCertificate> of <clientCredentials> Element.

  6. Agregue <authentication> of <serviceCertificate> Element como se muestra en el ejemplo siguiente.

  7. Defina el atributo customCertificateValidatorType en el tipo de validador.

  8. Defina el atributo certificateValidationMode a Custom. El ejemplo siguiente define el atributo en el espacio de nombres y nombre del tipo.

    <configuration>
     <system.serviceModel>
      <behaviors>
       <endpointBehaviors>
        <behavior name="clientBehavior">
         <clientCredentials>
          <serviceCertificate>
           <authentication certificateValidationMode="Custom" 
                  customCertificateValidatorType=
             "Samples.CustomX509CertificateValidator, client"/>
          </serviceCertificate>
         </clientCredentials>
        </behavior>
       </endpointBehaviors>
      </behaviors>
     </system.serviceModel>
    </configuration>
    

Especificar un validador de certificado personalizado mediante el código en el servicio

  1. Especifique el validador de certificado personalizado en la propiedad ClientCertificate. Puede obtener acceso a las credenciales de servicio mediante la propiedad Credentials.

  2. Establezca la propiedad CertificateValidationMode en Custom.

Especificar un validador de certificado personalizado mediante el código en el cliente

  1. Especifique el validador de certificado personalizado mediante la propiedad CustomCertificateValidator. Puede obtener acceso a las credenciales de cliente mediante la propiedad Credentials. (La clase de cliente generada por ServiceModel Metadata Utility Tool (Svcutil.exe) siempre deriva a partir de la clase ClientBase.)

  2. Establezca la propiedad CertificateValidationMode como Custom.

Ejemplo

Descripción

El ejemplo siguiente muestra una implementación de un validador de certificado personalizado y su uso en el servicio.

Código

Consulte también

Referencia

X509CertificateValidator