Você não pode solicitar um certificado para um determinado caminho, porque a negociação de TLS já foi concluída antes que o caminho seja conhecido. Portanto, quando você souber o caminho, será tarde demais.
Da mesma forma, não é possível "encaminhar" um certificado de cliente - se esse proxy estiver em mode http
, haverá duas sessões TLS - uma entre cliente e proxy e outra entre proxy e servidor de backend . O proxy não possui a chave privada do certificado do cliente, portanto, não pode negociar o TLS com o backend usando o certificado do cliente. Se fosse possível usar o certificado de cliente de alguém sem estar em posse de sua chave privada, o certificado do cliente seria inútil - o certificado também é a chave pública e as chaves públicas são "públicas" porque, por si mesmas, não representam qualquer coisa de valor.
É possível encaminhar os atributos do certificado apresentado pelo cliente, definindo-os como cabeçalhos de solicitação HTTP no proxy usando layer 5 busca , mas isso provavelmente não satisfaria um back-end que precisa ver o certificado real.
É possível injetar todo o certificado do cliente em um cabeçalho de solicitação para o backend ...
http-request set-header X-Client-Certificate %[ssl_c_der,base64]
... mas é improvável que isso seja útil no cenário que você descreve.
Da mesma forma, você pode usar bind ... ssl ... verify optional
em vez de required
e, em seguida, bloquear solicitações para caminhos específicos, a menos que um certificado já tenha sido apresentado ...
http-request deny if { path_beg /login/idcard } !{ ssl_fc_has_crt }
... isso tornaria o certificado opcional, mas negaria solicitações com esse prefixo de caminho se um certificado ainda não tivesse sido apresentado.
Novamente, tecnicamente válido, mas não necessariamente o que você realmente precisa.