haproxy con autenticazione del certificato client firmata dalla CA "comune"

6

Scusami se l'ho postato qui a torto, so che la domanda riguarda in parte la stessa haproxy.

Sto configurando haproxy come terminatore SSL / bilanciamento del carico di fronte a un'API che dobbiamo esporre su Internet a un cliente.

Il piano prevedeva l'utilizzo di SSL (HTTPS) bidirezionale (bidirezionale) per verificare che entrambe le parti fossero chi sono, dal momento che non vi è ulteriore autenticazione sull'API stessa. Inoltre, utilizzeremo anche una whitelist IP.

Ora il cliente ci ha fornito un certificato che entrambe le parti utilizzano per entrambi i certificati server e client, questo certificato è firmato da una CA "comune" (DigiCert). Mentre capisco questo è buono dal punto di vista del cliente, in quanto il certificato viene anche confrontato con il nome host del server a cui accede, tuttavia il contrario non sembra essere sicuro (almeno non con haproxy)

Per come la conosco attualmente, devo dire a HAProxy di fidarsi dei certificati firmati da Digicert usando la direttiva "ca-file", tuttavia, non c'è modo di dire che oltre a ciò deve anche essere un certificato client specifico, perché non voglio fidarmi di tutti i certificati client firmati da DigiCert.

C'è un modo per farlo con HAProxy? In caso contrario, suppongo che l'unica soluzione sarebbe quella di creare certificati client autofirmati per entrambe le parti e di scambiarli (o meglio, le richieste di firma del certificato e far firmare all'altra parte).

O la mia interpretazione dell'intero concetto di certificato del cliente è sbagliata?

    
posta Sartsj 21.01.2015 - 12:22
fonte

3 risposte

4

Basandosi sulla risposta di StackzOfZtuff, ho scoperto che è possibile che abbiaproxy lo faccia da solo usando un acl.

Con le seguenti 2 righe posso semplicemente controllare il CN nel certificato cliente. E nega le richieste che non hanno un CN corrispondente.

acl validcert ssl_c_s_dn(cn) -m str VALID\ CERT\ CN
http-request deny if !validcert
    
risposta data 29.05.2015 - 15:51
fonte
2

Puoi leggere il campo "Nome comune" del certificato e poi passarlo al back-end in questo modo:

http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]

E se poi unisci questo con una CA che emette i certificati, puoi inserire un nome utente in quel campo. E poi leggerlo con HAProxy.

Descritto qui: link

    
risposta data 28.02.2015 - 01:16
fonte
0

Non ho familiarità con HAProxy, ma non penso che possa essere configurato per fare la tua logica di autenticazione, ovvero accettare solo alcuni dei certificati con la stessa CA, durante il processo di verifica della certificazione.

Is there a way to do this with HAProxy? If not, I guess the only way forward would be to make self-signed client certificates for both sides and exchange them (or rather, certificate signing requests, and have the other party sign them).

Puoi creare CA in cima a openssl con poco lavoro. Probabilmente è necessario autorizzare anche i client, quindi puoi fornire alcune informazioni nell'oggetto del certificato dei clienti e controllarle nel livello applicazione.

    
risposta data 28.01.2015 - 20:50
fonte

Leggi altre domande sui tag