Rabbitmq联合SSL客户端证书不起作用

我正在尝试设置一对经过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”标题下有更多信息。

我通过删除所有的证书和密钥来解决这个问题,并重新开始。 我遵循这个清单:

  1. rabbitmq.config中链接的证书文件是服务器购买的SSL证书。
  2. rabbitmq.config中链接的密钥文件是服务器购买的SSL密钥。
  3. 联合参数中链接的证书文件是客户端本地生成的SSL证书。
  4. 联合参数中链接的密钥文件是客户端本地生成的SSL密钥。
  5. rabbitmq.config中链接的cacertfile是SSL提供程序的中间证书,并在联合参数中validation密钥文件和certfile。
  6. 联合参数中链接的cacertfile是本地生成的证书颁发机构,用于validation购买的SSL密钥和证书。