O TLS de 2 vias usando o HAProxy autentica com a linha de comando, mas falha no navegador

0

Para uma prova de desenvolvimento de conceito, eu tenho um servidor HAProxy em execução na minha máquina local (OSX) que espera fazer um TLS bidirecional com qualquer cliente e depois encaminhar esse cliente para um servidor da Web.

Eu segui este tutorial para obter a configuração de autenticação e este tutorial para criar meus próprios certificados. Meu arquivo de configuração haproxy é assim:

global
    log 127.0.0.1 local1 notice

frontend intranet
    mode http
    log-format %T\ %t\ %U
    log global
    bind *:2000 ssl crt both.pem ca-file myCA.pem verify required
    default_backend helpdesk

backend helpdesk
    mode http
    server helpdesk 127.0.0.1:9000 check

both.pem tem a chave RSA privada usada para gerar a CA raiz e o próprio certificado, e myCA.pem é apenas o certificado. Isso funciona, mas se houver uma maneira melhor de fazer isso, por favor me avise. Parece desnecessariamente repetitivo incluir o certificado duas vezes.

Eu posso me conectar ao servidor usando openssl s_client -connect 127.0.0.1:2000 -cert ./derived.crt -key ./derived.key . Também posso conectar substituindo o certificado e a chave derivados pelo certificado raiz e pela chave. Ambas as formas, recebo um handshake de sucesso e uma conexão com o servidor web na porta 9000 (posso enviar GET e receber de volta o html). Para sanidade, também gerou uma segunda CA raiz não relacionada que não consegue fazer o handshake.

Eu tentei adicionar a CA derivada e a CA raiz aos meus certificados, seguindo as instruções do segundo tutorial. Eles são adicionados e confiáveis, mas o Safari ainda não consegue se conectar ao servidor. Ele me diz que o servidor descartou inesperadamente a conexão (suponho que isso significa que o handshake falhou ou possivelmente nem foi tentado). O Chrome diz que recebeu uma resposta vazia.

Eu vou tentar com o carteiro para ver se eu posso voltar a mesma resposta que o openssl recebe quando eu falhar (explicitamente me diz que o handshake falhou), mas eu queria perguntar isso aqui no caso de estar faltando alguma coisa Simples que um de vocês conhece. Qualquer ajuda é muito apreciada.

UPDATE: vejo que precisei adicionar https: // ao início do endereço. Agora o navegador me pede para escolher qual certificado usar. Mas, ele mostra apenas dois certificados que estão disponíveis por padrão no sistema (certificados do trabalho) e não o meu novo, que aparece na lista de chaves.

UPDATE 2: Existem duas seções diferentes no chaveiro para certificados. Um é apenas chamado de "Certificados". É para onde meus certificados vão quando eu os importo. O outro é chamado "Meus Certificados" e parece ser um subconjunto dos "Certificados". Eu estou pensando se eu puder encontrar uma maneira de adicionar meu certificado personalizado aqui, então eu posso usá-lo.

    
por jaredad7 04.10.2017 / 17:50

1 resposta

0

O problema foi resolvido usando um post que acabei encontrando em Pergunte diferente .

O comando openssl pkcs12 -export -clcerts -inkey private.key -in certificate.crt -out MyPKCS12.p12 -name "Your Name" pode ser usado para criar um certificado que pode ser adicionado ao conjunto de chaves e depois selecionado no Safari quando a conexão com o servidor é feita.

    
por 05.10.2017 / 19:47

Tags