我一直在尝试连接到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
那么,如何使这个连接工作?
1 回答
您正在连接到名为 sphinx.dcu.ie 的服务器:
但是,证书中的主机名是 samqp.dcu.ie :
你需要做两件事之一 . 首先,针对证书中指定的服务器发出RabbitMQ请求 . 或者,获取一个使用您要使用的DNS名称颁发的新证书 .
您可以在主题备用名称(SAN)中放置任意数量的DNS名称 . 我经常用调试和测试名称填写它们,例如 localhost , localhost.localdomain 和 127.0.0.1 .
EDIT :对于这个问题:
您需要返回Revision 9左右您的问题和此信息的信息:
你 don't 需要
ca-cert.pem
文件,其中包含数百个CA,其中大多数是错误的 . 您只需要一个正确的CA,并且它曾经被称为 DigiCert High Assurance EV Root CA . 你还需要一个名为 TERENA SSL High Assurance CA 3 的中间版DigiCert High Assurance EV Root CA 证书
您可以从DigiCert Trusted Root Authority Certificates下载 DigiCert High Assurance EV Root CA . 它具有以下属性:
序列号:02:AC:5C:26:6A:0B:40:9B:8F:0B:79:F2:AE:46:25:77
指纹:5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
下载时,它是DER格式 . 您需要将其转换为PEM格式:
然后:
TERENA SSL High Assurance CA 3 证书
现在你需要用 TERENA SSL High Assurance CA 3 做同样的事情 . 我相信你可以在TERENA SSL High Assurance CA Root Certificates找到它 . 它是具有以下属性的:
序列号0b:5c:34:35:67:5b:24:67:c0:d7:32:37:f9:0d:5f:94
指纹SHA1 A7:8A:AB:DE:7F:5B:77:15:40:D3:33:B5:05:87:4C:82:04:AA:D2:06
MY-CACERT.pem
现在您已拥有路径构建所需的CA,请执行以下操作:
然后:
最后,使用 my-cacert.pem .
您应该能够使用OpenSSL的 s_client 进行测试 . 但我似乎无法与外界联系:
如果你可以连接,那么你应该得到 Verify Ok (0) (如果我没记错的话) .