Назад | Перейти на главную страницу

Федерация Rabbitmq с сертификатами клиентов SSL не работает

Я пытаюсь настроить объединенную пару серверов rabbitmq, аутентифицированных с помощью клиентских сертификатов SSL. Я создал набор ключей и сертификатов, но я получаю эту ошибку на одном сервере, когда другой пытается подключиться в качестве клиента:

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

Я могу бегать openssl s_server... с тем же сертификатом CA, сертификатом сервера и ключом, что и сервер rabbitmq. Когда я это сделаю, я могу подключиться к нему с помощью openssl s_client... используя тот же сертификат CA, сертификат клиента и ключ, с которыми настроен клиент rabbitmq. Это работает нормально - я вижу результат проверки, и соединение передает данные нормально.

Когда я подключаю клиента rabbitmq к запущенному openssl s_server... процесс, последний выводит эту ошибку:

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

Я получаю ту же ошибку, если заменяю сертификат CA на стороне клиента пустым файлом.

Вот параметры федерации:

{"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}

Все это указывает на то, что в конфигурации федерации что-то не так с сертификатом CA, но я не понимаю, где искать. Помогите?

Я решил это, удалив все сертификаты и ключи, которые я сделал, и начал заново. Я выполнил этот контрольный список:

  1. Certfile, связанный с rabbitmq.config, является приобретенным сервером SSL-сертификатом.
  2. Ключевой файл, связанный с rabbitmq.config, является купленным сервером SSL-ключом.
  3. Certfile, связанный в параметре федерации, является локально созданным SSL-сертификатом клиента.
  4. Ключевой файл, связанный с параметром федерации, представляет собой локально созданный ключ SSL клиента.
  5. Файл cacertfile, связанный в rabbitmq.config, является промежуточным сертификатом поставщика SSL и проверяет ключевой файл и файл сертификата в параметре федерации.
  6. Файл cacertfile, связанный с параметром федерации, является локально созданным центром сертификации, который проверяет приобретенный ключ SSL и сертификат.

Когда вы используете SSL для аутентификации клиента, используются два отдельных сертификата CA.

Один из них - это тот, который сервер представляет в качестве эмитента сертификата сервера. Клиент должен доверять этому ЦС, чтобы проверить наличие SSL-сертификата хоста.

Другой - центр сертификации, выдавший сертификат клиента. Сервер должен доверять этому, чтобы проверить сертификат SSL клиента.

Даже если вы используете один и тот же фактический CA для обоих сертификатов, вам все равно нужно сообщить своему серверу, что он должен использовать этот сертификат CA обе для собственного сертификата и для проверки клиента. Первое сделано с опцией cacertfile=/srv/byteq/config/ca.crt - чтобы добавить последнее, нужно добавить cacerts="/srv/byteq/config/ca.crt.

Больше информации на https://www.rabbitmq.com/ssl.html под заголовком «Доверяйте корневому ЦС клиента».