¿Cómo implemento la autenticación del Certificado de Cliente de la manera correcta?

WCF es extremadamente extensible y tiene muchas características listas para usar, sin embargo, continúo luchando con algunos temas y mientras más documentación leo, más confuso estoy.

Espero obtener algunas respuestas de la comunidad. La retroalimentación sobre cualquier suposición o pregunta es extremadamente bienvenida.

Para que quede constancia: para aceptar realmente una sola respuesta, debo dividir esta publicación en varias preguntas, pero podría generar aún más confusión. Estoy bastante seguro de que hay algunos verdaderos expertos de WCF en línea que pueden responder todas las preguntas de este documento a la vez, por lo que puedo aceptar una sola respuesta como el verdadero negocio para configurar la autenticación del certificado de cliente utilizando IIS de la manera correcta.

Déjame hacer un bosquejo de la situación y la solicitud de pareja

1: El requisito de socio y la pregunta para utilizar un certificado de cliente.

Partner X necesita llamar a una API en mi backend y tienen el requisito claro de usar la autenticación de Clientcertificate. Ellos crearon el certificado de cliente y nos proporcionaron el certificado solo con la clave pública, ya que parece lógico que mantengan la clave privada realmente privada y en su propio sistema (s). El certificado se importó en la cuenta de la computadora local y, al observar la ruta de certificación, es válido. Todas las autoridades de certificación intermedias y, al final, la autoridad de certificación raíz son de confianza.

2: Nuestro WCFlado del servidor configuración

Tengo un comportamiento de servicio configurado como tal:

<behavior name="ClientCertificateBehavior">
    <serviceMetadata httpsGetEnabled="true" />
        <serviceCredentials>
        <serviceCertificate findValue="<serialnumber here>" x509FindType="FindBySerialNumber" />
        <clientCertificate>
          <authentication certificateValidationMode="PeerTrust" />
        </clientCertificate>
    </serviceCredentials>
</behavior>

Supongo que cometí un primer error aquí y debería usar ChainTrust para validar el certificado usando su ruta de certificación. ¿Qué piensas?

El servicio se configura como tal:

<service behaviorConfiguration="ClientCertificateBehavior" name="<Full service namespace and servicename>">
    <endpoint binding="basicHttpBinding" bindingConfiguration="Soap11CertificateBasicHttpBinding"
        contract="<The interface>"></endpoint>
</service>

La unión se ve así:

Es un enlace básico para forzar SOAP1.1 (de acuerdo con las especificaciones del socio).

<binding name="Soap11CertificateBasicHttpBinding">
  <security mode="Transport">
    <transport clientCredentialType="Certificate" />
  </security>
</binding>

3: Alojamiento del servicio WCF en IIS y la configuración de IIS

Somos anfitriones de nuestros servicios WCF en IIS7. Configuramos la carpeta en la que residen los servicios para requerir SSL y para aceptar certificados de clientes. Autenticación de autenticación anónima está habilitada.

El problema es que la comunicación del socio funciona y confiamos en que todo estaba bien, sin embargo, cambiar el ajuste de IIS para "requerir" el certificado del cliente nos muestra que de repente ya no es posible llamar a nuestro servicio con éxito.

¿Estoy en lo correcto al asumir que las siguientes cosas no se hacen correctamente?

El serviceCerticate en serviceBehavior no es realmente necesario. Esta es una configuración utilizada por el cliente. ¿O es necesario proporcionar esta información de certificado para que el punto final del servicio coincida con el certificado que está enviando el cliente?

Para que la autenticación del certificado de cliente realmente funcione en IIS, el certificado debe asignarse a un usuario. Este usuario debe tener permisos en la carpeta que contiene los servicios y todos los mecanismos de autenticación (anónimo, ventanas, ...) deben estar deshabilitados. De esta manera, IIS manejará el protocolo de enlace real y validará la comunicación de servicio. ¿O es más una cuestión de seguridad adicional que asigna el certificado a un usuario?

Al establecer 'Aceptar' en IIS, omitimos la validación real del certificado entre el cliente y el servidor.

Todos los mecanismos de autenticación como 'anónimo' y 'ventanas' deben estar deshabilitados en IIS para la carpeta que contiene los servicios.

Respuestas a la pregunta(1)

Su respuesta a la pregunta