You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 21环境下Azure DPS设备注册遇SSLHandshakeException问题求助

Azure DPS X509设备注册失败:SSLHandshakeException (protocol_version) 解决思路

这个错误的核心是TLS协议版本不兼容——Azure DPS目前要求至少使用TLS 1.2进行通信,而Java 21环境下,Azure IoT Provisioning SDK可能没有自动适配正确的协议版本,导致握手时协议协商失败。以下是针对性的解决步骤:

1. 显式配置TLS版本到ProvisioningDeviceClient

在创建客户端时,通过ProvisioningDeviceClientOptions指定兼容的SSL上下文,强制使用TLS 1.2或1.3:

// 初始化TLS 1.2 SSL上下文
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, new SecureRandom());

// 构建客户端配置选项
ProvisioningDeviceClientOptions clientOptions = new ProvisioningDeviceClientOptions();
clientOptions.setSslContext(sslContext);

// 创建客户端时传入配置
ProvisioningDeviceClient provisioningDeviceClient = ProvisioningDeviceClient.create(
    GLOBAL_ENDPOINT,
    ID_SCOPE,
    PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL,
    securityProviderX509,
    clientOptions);

// 执行注册
ProvisioningDeviceClientRegistrationResult result = provisioningDeviceClient.registerDeviceSync();

2. 升级Azure IoT SDK版本

旧版本的Azure IoT Provisioning Device SDK for Java可能对Java 21的TLS支持不完善,检查并升级依赖到最新版本(以Maven依赖为例):

<dependency>
    <groupId>com.microsoft.azure.sdk.iot</groupId>
    <artifactId>provisioning-device-client</artifactId>
    <version>最新版本号</version>
</dependency>

3. JVM全局强制指定TLS协议

如果不想修改代码,可以通过JVM启动参数强制整个进程使用兼容的TLS版本:

-Dhttps.protocols=TLSv1.2,TLSv1.3

额外排查要点

  • 虽然Event Hub能正常连接,但DPS与Event Hub的SDK实现逻辑不同,TLS协商机制可能存在差异,不能直接等同;
  • 确认X509证书有效性:检查证书有效期、密钥长度(至少2048位)、证书链是否完整,避免因证书问题间接引发握手失败。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:16:23