Java 如何获取HiveMQ客户端中使用的密码套件?

Java 如何获取HiveMQ客户端中使用的密码套件?,java,mqtt,iot,hivemq,Java,Mqtt,Iot,Hivemq,我将HiveMQ服务器配置为识别TLS,并创建了TLS通信。我想打印出正在使用的密码套件。我已经使用了getSslConfig(),但我最终将其作为输出: 可选[com.hivemq.client.internal.mqtt。MqttClientSslConfigImpl@2710] 我知道在MqttClientSslConfig.java中有一个getCipherSuite()方法,但我还没有找到使用它的方法。作为后续行动,我将如何指定使用特定的密码套件?到目前为止,我只使用了默认设置,如下所

我将HiveMQ服务器配置为识别TLS,并创建了TLS通信。我想打印出正在使用的密码套件。我已经使用了getSslConfig(),但我最终将其作为输出:

可选[com.hivemq.client.internal.mqtt。MqttClientSslConfigImpl@2710]

我知道在
MqttClientSslConfig.java
中有一个
getCipherSuite()
方法,但我还没有找到使用它的方法。作为后续行动,我将如何指定使用特定的密码套件?到目前为止,我只使用了默认设置,如下所示:

Mqtt5Client.builder()
        ...
        .sslConfig()
            .cipherSuites(Arrays.asList("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"))
            .applySslConfig()
        ...
代码(如何指定特定密码套件?):


您可以按如下方式配置特定密码套件:

Mqtt5Client.builder()
        ...
        .sslConfig()
            .cipherSuites(Arrays.asList("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"))
            .applySslConfig()
        ...
getSslConfig
返回一个
可选的
。因此,要获得密码套件:

client.getConfig().getSslConfig().get().getCipherSuites()

当我尝试使用:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256时,我得到了一个“没有断开连接的服务器关闭连接”。我试过TLSv1.1、TLSv1.2、TLSv1.3,但都没用。TLS_ECDHE_RSA_与_AES_128_GCM_SHA256一起工作,但奇怪的是,它只在TLSv1.2上工作。“TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384”在TLSv1.2上显示收到的致命警报:握手失败”错误,但在TLSv1.3上显示的是“服务器关闭连接但未断开连接”。我已手动配置config.xml以指定版本。是否需要使用.sslConfig()设置.keyManagerFactory()和.trustManagerFactory()要使其正常工作?您提到的两个密码套件仅存在于TLSv1.2中,因此预计它们仅适用于TLSv1.2。请参阅以下链接:虽然我仍然收到一个
收到的致命警报:在TLSv1.2上使用
TLS_ECDHE_ECDSA_和\u AES_128_GCM_SHA256
但它使用TLSv1.2与TLS\u ECDHE\u RSA\u和\u AES\u 128\u GCM\u SHA256
配合使用(因此两者都在TLS1.2上)这很奇怪。我已经解决了一些问题,并做了一些事情,比如在cacerts文件中添加服务器的证书。我开始怀疑某个地方存在密码套件兼容性问题。这看起来是正确的。请记住,如果要使用TLS 1.3,必须使用Java 11+。
client.getConfig().getSslConfig().get().getCipherSuites()