我一直在尝试连接到运行在RHEL7上的RabbitMQ服务器,该服务器监听5671端口以进行SSL连接。
RabbitMQ server's SSL listener has been configured like this:
[
{rabbit, [
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile,"/etc/pki/tls/certs/samqp.dcu.ie.chain"},
{certfile,"/etc/pki/tls/certs/samqp.dcu.ie.crt"},
{keyfile,"/etc/pki/tls/private/samqp.dcu.ie.key"},
{verify,verify_peer},
{fail_if_no_peer_cert,false}]}
]}
]
在客户端上,我收到以下异常信息:
客户端机器是Ubuntu 14.04 LTS。
客户端是一个Moodle自定义插件,使用'videlalvaro/php-amqplib'库与服务器通信。
这里是根据文档创建的自签名证书的实际路径和文件名:https://www.rabbitmq.com/ssl.html
$sslOptions = array(
'cafile' => '/home/duro/testca/cacert.pem',
'local_cert' => '/home/duro/client/key-cert.pem',
'peer_name'=>'samqp.dcu.ie',
'verify_peer_name' => true
);
PHP 显然有一个要求,即需要将证书和密钥串联为一个文件,因此会出现 'key-cert.pem'。
这是我从客户端连接的方式,包括实际的 URL:
$connection = new AMQPSSLConnection('samqp.dcu.ie.crt', 5671, 'rMQUsername', 'rMQPasswd', '/', $sslOptions)
在客户端,我收到了这个异常信息:
"stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed"
在服务器端,查看 /var/log/rabbitmq/rabbit@sphinx.log,我看到了这个错误:
=ERROR REPORT==== 3-Mar-2016::14:08:26 ===
SSL: certify: ssl_alert.erl:93:Fatal error: unknown ca
那么,如何使这个连接工作呢?
openssl s_client -connect <hostname>:<port> -tls1 -servername <hostname> | openssl x509 -text -noout
的输出。通过单击“编辑”将其添加到您的问题中(不要将其作为评论发布)。否则,我们无法重现它,也没有足够的信息来帮助排除故障。 - jww