haproxy con autenticación de certificado de cliente firmada por una CA 'común'

6

Disculpe si publiqué esto aquí incorrectamente, sé que la pregunta es en parte sobre el propio haproxy.

Estoy configurando haproxy como un terminador SSL / equilibrador de carga frente a una API que debemos exponer a través de Internet a un cliente.

El plan era utilizar SSL / HTTPS mutuo (bidireccional) para verificar que ambas partes son quienes son, ya que no hay más autenticación en la API. Además de esto, también utilizaremos una lista blanca de IP.

Ahora el cliente nos ha otorgado un certificado que ambas partes utilizan para los certificados de servidor y cliente, este certificado está firmado por una CA "común" (DigiCert). Aunque entiendo que esto es bueno desde la perspectiva del cliente, ya que el certificado también se compara con el nombre de host del servidor al que está accediendo, sin embargo, no parece ser tan seguro (al menos no con haproxy)

De la forma en que lo entiendo actualmente, tengo que decirle a HAProxy que confíe en los certificados firmados por Digicert usando la directiva 'archivo-ca', sin embargo, no hay manera de decirle que, además de eso, también debe ser un certificado de cliente específico, porque no quiero confiar en todos los certificados de cliente firmados por DigiCert.

¿Hay una manera de hacer esto con HAProxy? De lo contrario, supongo que la única forma de avanzar sería hacer certificados de clientes autofirmados para ambas partes e intercambiarlos (o, más bien, las solicitudes de firma de certificados y hacer que la otra parte los firme).

¿O es que mi entendimiento del concepto de certificado de cliente completo es incorrecto?

    
pregunta Sartsj 21.01.2015 - 12:22
fuente

3 respuestas

4

Sobre la base de la respuesta de StackzOfZtuff, me di cuenta de que realmente es posible hacer que el haproxy haga esto por sí mismo mediante el uso de un acl.

Con las siguientes 2 líneas simplemente puedo verificar el CN en el certificado del cliente. Y denegar solicitudes que no tengan un CN coincidente.

acl validcert ssl_c_s_dn(cn) -m str VALID\ CERT\ CN
http-request deny if !validcert
    
respondido por el Sartsj 29.05.2015 - 15:51
fuente
2

Puede leer el campo "Nombre común" del certificado y luego pasarlo al final de la siguiente manera:

  

enlace

Y si luego combina esto con la propia CA que emite los certificados, entonces puede poner un nombre de usuario en ese campo. Y luego leerlo con HAProxy.

Se describe aquí: enlace

    
respondido por el StackzOfZtuff 28.02.2015 - 01:16
fuente
0

No estoy familiarizado con HAProxy, pero no creo que pueda configurarse para hacer su lógica de autenticación, lo que significa aceptar solo algunos de los certificados con la misma CA, durante el proceso de verificación de certificación.

  

¿Hay una manera de hacer esto con HAProxy? De lo contrario, supongo que la única forma de avanzar sería hacer certificados de clientes autofirmados para ambas partes e intercambiarlos (o, más bien, las solicitudes de firma de certificados y hacer que la otra parte los firme).

Puedes crear tu CA sobre openssl sin mucho trabajo. Es probable que también deba autorizar a los clientes, por lo que puede proporcionar cierta información en el asunto del certificado de los clientes y verificarlos en la capa de aplicación.

    
respondido por el Amabo 28.01.2015 - 20:50
fuente

Lea otras preguntas en las etiquetas