我正在尝试为Jboss AMQ 7.0.1实现证书基础身份验证 我根据AMQ示例设置了客户端和代理端,并且#34; ssl-enabled-dual-authentication" 但我收到了以下错误
[org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager] 无法验证用户: javax.security.auth.login.FailedLoginException:User为null
我正在尝试使用Apache Qpid AMQP1.0客户端。 虽然我已经配置了证书基础登录配置,但似乎是jaas
正在调用PropertiesLoginModule
。
以下是服务器堆栈跟踪。
14:24:03,324调试 [org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager] 无法验证用户: javax.security.auth.login.FailedLoginException:User为null 在org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule.login(PropertiesLoginModule.java:89) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[rt.jar:1.8.0_131] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar中:1.8.0_131] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar中:1.8.0_131] at java.lang.reflect.Method.invoke(Method.java:498)[rt.jar:1.8.0_131] 在javax.security.auth.login.LoginContext.invoke(LoginContext.java:755) [rt.jar中:1.8.0_131] 在javax.security.auth.login.LoginContext.access $ 000(LoginContext.java:195) [rt.jar中:1.8.0_131] 在javax.security.auth.login.LoginContext $ 4.run(LoginContext.java:682) [rt.jar中:1.8.0_131] 在javax.security.auth.login.LoginContext $ 4.run(LoginContext.java:680) [rt.jar中:1.8.0_131] at java.security.AccessController.doPrivileged(Native Method)[rt.jar:1.8.0_131] 在javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) [rt.jar中:1.8.0_131] 在javax.security.auth.login.LoginContext.login(LoginContext.java:587) [rt.jar中:1.8.0_131] at org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager.getAuthenticatedSubject(ActiveMQJAASSecurityManager.java:185) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager.validateUser(ActiveMQJAASSecurityManager.java:94) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at org.apache.activemq.artemis.core.security.impl.SecurityStoreImpl.authenticate(SecurityStoreImpl.java:128) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at org.apache.activemq.artemis.protocol.amqp.broker.AMQPConnectionCallback.isSupportsAnonymous(AMQPConnectionCallback.java:104) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.protocol.amqp.broker.AMQPConnectionCallback.getSASLMechnisms(AMQPConnectionCallback.java:92) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.onAuthInit(AMQPConnectionContext.java:315) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.dispatchAuth(ProtonHandler.java:309) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] 在org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.inputBuffer(ProtonHandler.java:204) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.inputBuffer(AMQPConnectionContext.java:120) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.protocol.amqp.broker.ActiveMQProtonRemotingConnection.bufferReceived(ActiveMQProtonRemotingConnection.java:138) [ARTEMIS-AMQP - 协议 - 2.0.0.amq-700008-红帽-2.jar:] at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl $ DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:628) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:69) [ARTEMIS核 - 客户2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:219) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:631) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:468) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] 在io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:428) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at org.apache.activemq.artemis.core.protocol.ProtocolHandler $ ProtocolDecoder.decode(ProtocolHandler.java:185) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at org.apache.activemq.artemis.core.protocol.ProtocolHandler $ ProtocolDecoder.channelRead(ProtocolHandler.java:128) [ARTEMIS - 服务器 - 2.0.0.amq-700008-红帽-2.jar:2.0.0.amq-700008-红帽-2] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] 在io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1066) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:900)[netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.DefaultChannelPipeline $ HeadContext.channelRead(DefaultChannelPipeline.java:1334) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.epoll.AbstractEpollStreamChannel $ EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:972) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:386) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] 在io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:302) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] at io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run(SingleThreadEventExecutor.java:873) [网状-全4.1.5.Final-红帽-1.jar:4.1.5.Final-红帽-1] 在java.lang.Thread.run(Thread.java:748)[rt.jar:1.8.0_131]
答案 0 :(得分:1)
AMQP客户端未实现基于证书的身份验证。 AMQP客户端的身份验证是通过SASL实现的,唯一实现的SASL机制是PLAIN和ANONYMOUS。我不知道支持通过SSL证书进行身份验证的SASL机制。
要明确的是,目前基于证书的身份验证是针对“核心”,OpenWire,STOMP和& MQTT客户端(均未使用SASL)。