【问题标题】:Java 8 SSL handshake failure from amqp client to rabbitmq server从 amqp 客户端到 rabbitmq 服务器的 Java 8 SSL 握手失败
【发布时间】:2018-04-18 17:25:00
【问题描述】:

请阅读上一篇文章的上下文。那个问题就解决了。 Re-creating the queue and re-connecting to rabbitMQ

现在,我正在尝试在 rabbitmq 服务器和 rabbit 客户端之间设置启用 ssl 的连接。我正在使用带有弹簧云总线的弹簧靴。没有 SSL,一切都可以完美运行。

  • 用它来运行 java rabbit 客户端。

> 版本

Java 1.8

spring-cloud-starter-bus-amqp => 1.3.1.RELEASE

Spring Boot 父级 => 1.5.9.RELEASE

sudo java -Djavax.net.debug=all -Dhttps.protocols=TLSv1 -jar target/rabbit-client-0.0.1-SNAPSHOT.jar

试过 -Dhttps.cipherSuites=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 作为 好吧

  • 我使用了以下命令,它的结果为已验证 [ok]。这告诉我,rabbitmq 服务器已正确配置证书。
openssl s_client -connect my.rabbitmq.com:5671 -cert nonprod.crt -key nonprod.key -CAfile nonprod-chain.crt -tls1 -prexit
  • 我可以从 chrome 浏览器访问 rabbitmq managemnet 门户,它信任证书,因为我在钥匙串中添加了信任。
  • 我已将证书和 CA 证书添加到 java 密钥库并信任它。
  • Amqp 客户端无法建立连接并在启用 SSL 时失败。

Link to view error and debug logs

这是我认为可能存在但不确定的问题。

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLSv1.1 出现在列表中 不受支持的密码,可能是 rabbitmq 服务器要求的 加密套件。

【问题讨论】:

  • 请:屏幕截图中的日志不好 - 不可搜索,不便于阅读,重要部分通常会被截断。请编辑您的帖子并将屏幕截图替换为文本 - 可以在几秒钟内复制控制台...
  • 提供您客户端的确切 Java 版本。
  • Java 1.8, spring-cloud-starter-bus-amqp=> 1.3.1.RELEASE, Spring boot parent => 1.5.9.RELEASE
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 在 TLSv1.1 和 TLSv1(.0) 中不受支持,因为 TLS 规范要求这样做。所有 GCM 密码套件,实际上所有 AEAD 密码套件,仅在 1.2 或更高版本中工作。您的日志显示 CCS/Finished 上发生的错误,在版本 1.2 和该套件成功协商很久之后。 服务器要求客户端进行身份验证,也就是发送证书,但它没有,这足以让许多服务器中止握手。要么更改服务器不请求身份验证,要么更改客户端以提供身份验证,就像您对 openssl 所做的那样。
  • 谢谢@dave_thompson_085。我不确定为什么找不到证书,因为我已将其添加到密钥库中,并且 CA 权限与服务器中使用的相同。

标签: java ssl rabbitmq sslhandshakeexception spring-cloud-bus


【解决方案1】:

问题是 Erlang OTP 由于无效的 Key Usage 字段而将证书拒绝为坏证书。遵循这些指南来创建证书。 http://erlang.org/documentation/doc-5.7.4/lib/ssl-3.10.7/doc/html/pkix_certs.html

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 2017-10-09
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多