Federação Rabbitmq com certificados de cliente SSL não funcionando

3

Estou tentando configurar um par federado de servidores rabbitmq autenticados com certificados de cliente SSL. Gerei um conjunto de chaves e certificados, mas recebo esse erro em um servidor quando o outro tenta se conectar como um cliente:

=ERROR REPORT==== 7-Mar-2014::16:22:29 ===
SSL: certify: ssl_connection.erl:1678:Fatal error: unknown ca

Eu posso executar openssl s_server... com o mesmo certificado de autoridade de certificação, certificado de servidor e chave com o qual o servidor rabbitmq está configurado. Quando faço isso, posso me conectar a ele com openssl s_client... usando o mesmo certificado CA, certificado de cliente e chave com o qual o cliente rabbitmq está configurado. Isso funciona bem - eu posso ver a saída de verificação e a conexão transmite os dados bem.

Quando conecto o cliente rabbitmq ao processo openssl s_server... em execução, o segundo gera este erro:

ACCEPT
ERROR
139939008452264:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1256:SSL alert number 48
shutting down SSL
CONNECTION CLOSED

Eu recebo o mesmo erro se eu substituir o certificado da CA no lado do cliente por um arquivo vazio.

Veja os parâmetros de federação:

{"uri":"amqps://[HOSTNAME]/%2f?cacertfile=/srv/byteq/config/ca.crt&certfile=/srv/byteq/config/federation_client.crt&keyfile=/srv/byteq/config/federation_client.key&verify=verify_peer&fail_if_no_peer_cert=true","expires":3600000}

Isso tudo está apontando na direção da configuração da federação, de alguma forma, fazendo algo errado com o certificado da CA, mas estou perplexo quanto a onde procurar daqui. Ajuda?

    
por regularfry 07.03.2014 / 18:32

2 respostas

2

Eu resolvi isso excluindo todos os certificados e chaves que eu fiz e comecei novamente. Eu segui esta lista de verificação:

  1. O certfile vinculado no rabbitmq.config é o certificado SSL adquirido do servidor.
  2. O arquivo de chaves vinculado no rabbitmq.config é a chave SSL adquirida do servidor.
  3. O certfile vinculado no parâmetro federation é o certificado SSL gerado localmente pelo cliente.
  4. O arquivo de chave vinculado no parâmetro federation é a chave SSL gerada localmente do cliente.
  5. O cacertfile vinculado no rabbitmq.config é o certificado intermediário do provedor de SSL e valida o arquivo de chave e o arquivo de certificados no parâmetro de federação.
  6. O cacertfile vinculado no parâmetro federation é uma autoridade de certificação gerada localmente, que valida a chave SSL e o certificado adquiridos.
por 10.03.2014 / 17:19
2

Quando você usa o SSL para autenticação de cliente, há dois certificados CA separados envolvidos.

Um é aquele que o servidor apresenta como o emissor do certificado do servidor. O cliente precisa confiar nessa autoridade de certificação para verificar se o certificado SSL do host.

O outro é o CA que emitiu o certificado do cliente. O servidor precisa confiar nisso para verificar o certificado SSL do cliente.

Mesmo se você estiver usando a mesma autoridade de certificação real para os dois certificados, ainda precisará informar seu servidor de que deve usar esse certificado de autoridade para seu próprio certificado e para verificar isso do cliente. O primeiro é feito com a opção cacertfile=/srv/byteq/config/ca.crt - para adicionar o último, você precisa adicionar cacerts="/srv/byteq/config/ca.crt .

Há mais informações no link sob o título "Confiar na CA raiz do cliente".

    
por 10.03.2014 / 10:39