物联网实战|spring-boot4 + hiveMQ|集成tls 物联网实战|spring-boot4 hiveMQ|集成tls源码如下(mqtt-simulator-hivemq-01)SAN是什么问题点ca证书生成window系统安装openssl将下面命名文件server.cnf,生成ca证书(包含subjectAltName-san)生成CA私钥(进入openssl目录bin下)生成CA证书生成结果ca证书转换jks借助keytools(进入jdk目录bin下)将server.crt拷贝过来spring-boot4 hiveMQ集成pom依赖代码如下结果如下如果ca缺失san证书基于spring-boot4 下面错误物联网实战|spring-boot4 hiveMQ|集成tls源码如下(mqtt-simulator-hivemq-01)https://gitee.com/kcnf-iot/mqtt-simulator/tree/master/mqtt-simulator-hivemq-01SAN是什么Subject DN主体名称旧标准里证书域名写在 CNCommon Name通用名字段只能填1 个域名 例CNshturl.cc/Y只能匹配这一个网址SAN主题备用名称是 X.509 证书标准扩展字段可以填写多个域名、IP、主机名支持 多个独立域名a.com、b.com 泛域名*.shturl. IP 地址192.168.1.1、IPv6 本地主机名、邮箱等问题点ca证书转换jksspring-boot4开启san强校验问题ca证书生成window系统安装opensslhttps://slproweb.com/products/Win32OpenSSL.html将下面命名文件server.cnf,生成ca证书(包含subjectAltName-san)[req] distinguished_name req_distinguished_name x509_extensions v3_req prompt no [req_distinguished_name] CN emqx.local [v3_req] keyUsage keyEncipherment, dataEncipherment, digitalSignature extendedKeyUsage serverAuth subjectAltName alt_names [alt_names] DNS.1 localhost IP.1 127.0.0.1 IP.2 192.168.0.20生成CA私钥(进入openssl目录bin下)openssl genrsa -out server.key 2048生成CA证书openssl req -x509 -new -nodes -key server.key -sha256 -days 3650 -out server.crt -config server.cnf生成结果ca证书转换jks借助keytools(进入jdk目录bin下)将server.crt拷贝过来keytool -importcert -alias server -file server.crt -keystore truststore.jks -storepass 123456 -nopromptspring-boot4 hiveMQ集成pom依赖dependencyManagement dependencies !-- Spring Boot Starter -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version4.0.6/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement!-- HiveMQ MQTT5 客户端同时兼容 MQTT3.1.1 -- dependency groupIdcom.hivemq/groupId artifactIdhivemq-mqtt-client/artifactId version1.3.15/version /dependency代码如下package com.jysemel.iot; import com.hivemq.client.mqtt.MqttClientSslConfig; import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient; import com.hivemq.client.mqtt.mqtt5.Mqtt5Client; import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth; import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect; import javax.net.ssl.TrustManagerFactory; import java.io.InputStream; import java.security.KeyStore; import java.util.UUID; public class HiveMQTLSClientExample { private static final String MQTT_HOST 192.168.0.20; private static final int MQTT_TLS_PORT 8085; private static final String MQTT_USER test; private static final String MQTT_PWD 123456; private static final int KEEP_ALIVE 30; public static void main(String[] args) { mqtt5AsyncClient(); } public static Mqtt5AsyncClient mqtt5AsyncClient() { // 1. 加载CA根证书构建SSL信任配置 MqttClientSslConfig sslConfig buildSslConfig(); // 2. 构建MQTT TLS客户端 String clientId server_ UUID.randomUUID().toString().substring(0, 16); Mqtt5AsyncClient client Mqtt5Client.builder() .identifier(clientId) .serverHost(MQTT_HOST) .serverPort(MQTT_TLS_PORT) .sslConfig(sslConfig) .buildAsync(); // 3. 构建连接报文 Mqtt5SimpleAuth simpleAuth Mqtt5SimpleAuth.builder() .username(MQTT_USER) .password(MQTT_PWD.getBytes()) .build(); Mqtt5Connect connectMsg Mqtt5Connect.builder() .cleanStart(true) .simpleAuth(simpleAuth) .keepAlive(KEEP_ALIVE) .build(); // 4. 发起异步连接 client.connect(connectMsg) .whenComplete((connAck, throwable) - { if (throwable ! null) { throwable.printStackTrace(); System.out.println(MQTT TLS连接失败 ); return; } System.out.println(MQTT TLS连接成功clientId ); }); return client; } private static MqttClientSslConfig buildSslConfig() { try { KeyStore trustStore KeyStore.getInstance(KeyStore.getDefaultType()); try (InputStream is HiveMQTLSClientExample.class.getResourceAsStream(/cert/emqx.jks)) { if (is null) { throw new RuntimeException(信任库文件未找到: /cert/emqx.jks); } String trustStorePassword 123456; trustStore.load(is, trustStorePassword.toCharArray()); } TrustManagerFactory tmf TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); return MqttClientSslConfig.builder() .trustManagerFactory(tmf) // 关键自定义 HostnameVerifier总是验证通过仅测试用 .hostnameVerifier((hostname, session) - true) .build(); } catch (Exception e) { throw new RuntimeException(SSL 初始化失败, e); } } }结果如下如果ca缺失san证书基于spring-boot4 下面错误avax.net.ssl.SSLHandshakeException: No subject alternative names present com.hivemq.client.mqtt.exceptions.ConnectionFailedException: javax.net.ssl.SSLHandshakeException: No subject alternative names present Caused by: javax.net.ssl.SSLHandshakeException: No subject alternative names present at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:130) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:383) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:326) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.check

相关新闻

最新新闻

本地AI模型部署实战:从环境搭建到批量任务自动化

本地AI模型部署实战:从环境搭建到批量任务自动化

这次我们来看一个关于本地模型部署与应用的实战话题。当“免费”和“本地”这两个词组合在一起,意味着我们有机会在个人电脑上,不依赖云端服务,直接运行各类AI模型。这不仅仅是技术探索,更是对硬件资源利用、数据隐私保护和个性化…

2026/8/25 12:19:37
【信息科学与工程学】信息科学领域——第一百三十三篇 半导体器件物理与电子封装21

【信息科学与工程学】信息科学领域——第一百三十三篇 半导体器件物理与电子封装21

编号3599:压电能量收集器机电耦合模型(模型)—— 能源 编号 类型 领域 问题 数学分析及数学物理分析及数学化学分析(含多数学工具推理) 定律/理论逐步推理的数学表达式及参数设计 关联知识 3599 模型 能源 建立悬臂梁式压电能量收集器模型,PZT-5H,谐振频率100…

2026/8/25 12:19:37
AI图表自动化:从文本描述到专业架构图的技术实践

AI图表自动化:从文本描述到专业架构图的技术实践

1. 先搞清楚“diagram-design”到底要解决什么问题看到“diagram-design:别再凑合给 AI 配圆角方块图”这个标题,很多人的第一反应可能是:这不就是个画图工具吗?或者,是不是又一个AI画图的应用?如果你这么想…

2026/8/25 12:19:37
【信息科学与工程学】信息科学领域——第一百三十三篇 半导体器件物理与电子封装22

【信息科学与工程学】信息科学领域——第一百三十三篇 半导体器件物理与电子封装22

: Rapidus 2HP:逻辑密度237.31 MTr/mm,与台积电N2的236.17 MTr/mm相当;2027财年下半年量产,初期6000片/月,一年内提升至2.5万片/月 High-NA EUV:NA从0.33→0.55,可分辨8nm特征,量产窗口2027-2028年,Intel 14A为首个插入点;金属氧化物光刻胶的LER与缺陷率是经济性闸…

2026/8/25 12:19:37
游戏开发核心:一维与二维数组在矩阵类问题中的高效应用

游戏开发核心:一维与二维数组在矩阵类问题中的高效应用

最近在开发一个简单的扫雷游戏时,我遇到了一个核心问题:如何高效地表示和操作棋盘上的格子状态?是使用一维数组,还是二维数组?这个问题看似基础,却直接关系到后续游戏逻辑的清晰度和代码的可维护性。相信很…

2026/8/25 12:19:37
【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识08

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识08

云计算系统集成型解决方案 学科知识续表(D3985~D4044,新增60个编号) 编号 学科(课程) 核心知识点 在云计算/云存储/云网络/云安全/云MaaS中的作用 代表教材/资料/论文 + 数学方程式列表 工业界应用 D3985​ 云安全:IAM(身份与访问管理深度)​ IAM(用户/角色/…

2026/8/25 12:14:36