ActiveMQ Artemis配置SSL后非法客户端仍可连接如何解决
问题根因与修复方案
你遇到的配置失效问题由以下几个常见遗漏点导致,按优先级排序修复即可:
- 未开启Broker全局安全总开关
这是用户名密码校验失效的核心原因,Artemis的身份认证、权限校验需要显式开启总开关,默认关闭状态下所有安全规则都不生效。
在broker.xml的<core>节点下添加配置:
<security-enabled>true</security-enabled>
- 客户端SSL连接协议前缀错误
SSL连接必须使用ssl://前缀,你当前用的tcp://前缀会导致SSL参数不生效,证书校验逻辑被直接跳过。修改ActiveMQConnectionFactory的连接URL:
ActiveMQConnectionFactory artemisConnectionFactory = new ActiveMQConnectionFactory( "ssl://localhost:61617?sslEnabled=true&trustStorePath=" + pathToTrustStore + "&trustStorePassword=" + truststorePassword );
注意不要硬编码密码,优先使用注入的truststorePassword变量,needClientAuth是服务端配置,客户端无需添加该参数。
3. 权限配置存在非法空格broker.xml的security-settings中,角色列表逗号后存在空格,Artemis会将空格识别为角色名的一部分,导致权限匹配失败,去掉空格即可:
<permission type="createNonDurableQueue" roles="admins,users"/> <!-- 所有permission的roles属性都要去掉逗号后的空格 -->
- 确认登录模块配置正常
检查Brokeretc目录下的login.config文件,确保存在以下默认配置(自定义修改过配置的情况下可能丢失),该配置负责读取用户、角色文件做身份校验:
activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule required debug=false reload=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties"; };
- SSL证书校验调试
如果修复后依然存在证书校验失效问题,可在Broker启动脚本中添加JVM调试参数,查看SSL握手过程的具体报错:
-Djavax.net.debug=ssl,handshake
需确认Broker的truststore已导入所有合法客户端的公钥,客户端的truststore已导入Broker的公钥,即可完成双向证书校验。
内容的提问来源于stack exchange,提问作者ShreyasJavahar
相关产品推荐
相关产品推荐

