RHEL7上的RabbitMQ服务器重置SSL连接
我一直试图连接到RHEL7上的RabbitMQ服务器,该服务器监听5671端口进行SSL连接。RHEL7上的RabbitMQ服务器重置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的LTS 14.04。
客户端是使用'videlalvaro/php-amqplib'库与服务器通信的Moodle定制插件。
下面是根据上创建的文档我的自签名证书的实际路径和文件名: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显然必须使用证书和密钥连接起来以一个文件的要求,因此“键 - 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/[email protected],我看到这个错误:
=ERROR REPORT==== 3-Mar-2016::14:08:26 ===
SSL: certify: ssl_alert.erl:93:Fatal error: unknown ca
那么,如何使这个连接工作?
... error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed"
您正在连接到服务器的名称sphinx.dcu.ie
:
$connection = new AMQPSSLConnection('sphinx.dcu.ie', 5671, ...)
然而,证书中的主机名是samqp.dcu.ie
:
X509v3 Subject Alternative Name:
DNS:samqp.dcu.ie
你需要做两件事之一。首先,针对证书中指定的服务器进行RabbitMQ请求。或者,第二步,获得一个新的证书,并使用您想要使用的DNS名称。
您可以根据自己的喜好在主题备用名称(SAN)中放置尽可能多的DNS名称。我经常填充它们了调试和测试的名称,如localhost
,localhost.localdomain
和127.0.0.1
。
编辑:对于这个问题:
... and server's log now says:
=ERROR REPORT==== 3-Mar-2016::09:52:41 === SSL: certify: ssl_handshake.erl:1490:Fatal error: unknown ca
你需要去回信息Revision 9左右你的问题,并且这样的信息:
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = NL, ST = Noord-Holland, L = Amsterdam, O = TERENA, CN = TERENA SSL High Assurance CA 3
verify return:1
depth=0 businessCategory = Government Entity, jurisdictionC = IE, serialNumber = Government Entity, street = Glasnevin, street = Dublin City University, postalCode = IE, C = IE, ST = Ireland, L = Dublin, O = Dublin City University, OU = ISS, CN = samqp.dcu.ie
verify return:1
你不要需要ca-cert.pem
文件,其中包含数百个CA,其中大部分都是错误的。您只需要一个正确的CA,而其曾经被称为DigiCert High Assurance EV根CA。您还需要中间一个叫TERENA SSL高可信CA 3
DigiCert高保障EV根CA证书
您可以下载DigiCert高保障EV根CA从DigiCert Trusted Root Authority Certificates。它具有以下属性:
- 序列号:02:AC:5C:26:6A:0B:40:9B:8F:0B:79:F2:AE:46:25:77
- 指纹:5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
当您下载它时,它的DER格式。你需要将它与转换为PEM格式:
$ openssl x509 -inform der -in DigiCertHighAssuranceEVRootCA.crt \
-outform PEM -out DigiCertHighAssuranceEVRootCA.pem
然后:
$ cat DigiCertHighAssuranceEVRootCA.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
TERENA SSL高可信CA 3证书
现在你需要做同样的东西与TERENA SSL高保证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
现在,你有你需要的pathbuilding的的CA,执行以下操作:
$ cat DigiCertHighAssuranceEVRootCA.pem > my-cacert.pem
$ cat TERENA_SSL_High_Assurance_CA_3.pem >> my-cacert.pem
$ echo "" >> my-cacert.pem
然后:
$ cat my-cacert.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4DCCA8igAwIBAgIQC1w0NWdbJGfA1zI3+Q1flDANBgkqhkiG9w0BAQsFADBs
...
dnnqz5SeAs6cbSm551qG7Dj8+6f/8e33oqLC5Ldnbt0Ou6PjtZ4O02dN9cnicemR
1B0/YQ==
-----END CERTIFICATE-----
最后,使用my-cacert.pem
。
您应该可以使用OpenSSL的s_client
测试的东西。但我似乎无法从外界连接:
$ openssl s_client -connect sphinx.dcu.ie:5671 -tls1 \
-servername sphinx.dcu.ie -CAfile my-cacert.pem
如果可以连接,那么你应该得到Verify Ok (0)
(如果我没有记错)。
不,它不起作用。我更新了这个问题。 –
再次更新,如果这是你的意思。 –
我通过从$ sslOptions中删除'cafile'和'local_cert'来解决问题,我保留'peer_name'和'verify_peer_name'。消息去和日志条目看起来不错。你可以修改你的答案或添加一个新的答案,我会接受它。那有意义吗? –
请张贴您用于连接服务器的确切URL,并发布openssl s_client -connect: -tls1 -servername 的输出。 openssl x509 -text -noout'。点击*编辑*(不要将其作为评论发布),将其添加到您的问题中。否则,我们无法复制它,并且没有足够的信息来帮助排除故障。 –
jww
我在$连接实例化代码中提供了实际的URL。我还发布了命令输出,并将文件名和路径更新为真实的。 –
谢谢@Djuro。这些信息很容易诊断。我希望每个人都提供它。 – jww