我正在尝试设置一对经过SSL客户端证书authentication的rabbitmq服务器。 我已经生成了一组密钥和证书,但是当另一个服务器尝试作为客户端连接时,我在一台服务器上发生了这个错误:
=ERROR REPORT==== 7-Mar-2014::16:22:29 === SSL: certify: ssl_connection.erl:1678:Fatal error: unknown ca
我可以使用与rabbitmq服务器configuration相同的CA证书,服务器证书和密钥运行openssl s_server... 当我这样做时,我可以通过openssl s_client...连接到它openssl s_client...使用与rabbitmq客户端configuration相同的CA证书,客户端证书和密钥。 这工作正常 – 我可以看到validation输出,并连接传输数据罚款。
当我连接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
如果我用一个空文件replace客户端的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}
这一切都指向了联邦configuration的方向在某种程度上犯了CA证书的错误,但我很难从哪里看这里。 帮帮我?
当您使用SSL进行客户端身份validation时,涉及两个单独的CA证书。
一个是服务器作为服务器证书的颁发者提供的服务器。 客户端需要信任此CA以validation主机的SSL证书。
另一个是颁发客户证书的CA。 服务器需要信任这个以validation客户端的SSL证书。
即使您对两个证书都使用相同的实际CA,您仍然需要通知您的服务器应该使用该CA证书作为自己的证书, 并validation客户端。 前者是用cacertfile=/srv/byteq/config/ca.crt – 为了添加后者,需要添加cacerts="/srv/byteq/config/ca.crt 。
在https://www.rabbitmq.com/ssl.html的“信任客户的根CA”标题下有更多信息。
我通过删除所有的证书和密钥来解决这个问题,并重新开始。 我遵循这个清单: