Я пытаюсь настроить объединенную пару серверов 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, но я не понимаю, где искать. Помогите?
Я решил это, удалив все сертификаты и ключи, которые я сделал, и начал заново. Я выполнил этот контрольный список:
Когда вы используете SSL для аутентификации клиента, используются два отдельных сертификата CA.
Один из них - это тот, который сервер представляет в качестве эмитента сертификата сервера. Клиент должен доверять этому ЦС, чтобы проверить наличие SSL-сертификата хоста.
Другой - центр сертификации, выдавший сертификат клиента. Сервер должен доверять этому, чтобы проверить сертификат SSL клиента.
Даже если вы используете один и тот же фактический CA для обоих сертификатов, вам все равно нужно сообщить своему серверу, что он должен использовать этот сертификат CA обе для собственного сертификата и для проверки клиента. Первое сделано с опцией cacertfile=/srv/byteq/config/ca.crt
- чтобы добавить последнее, нужно добавить cacerts="/srv/byteq/config/ca.crt
.
Больше информации на https://www.rabbitmq.com/ssl.html под заголовком «Доверяйте корневому ЦС клиента».