Проверка подлинности базы сертификата Redhat Jboss AMQ 7.0.1 не удалась
Я пытаюсь реализовать проверку подлинности на основе сертификатов для Jboss AMQ 7.0.1. Я настроил клиент и посредника в соответствии с примером AMQ "ssl-enabled-dual-authentication", но я получаю следующую ошибку
[org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager] Не удалось проверить пользователя: javax.security.auth.login.FailedLoginException: пользователь имеет значение null
Я пытаюсь использовать клиент Apache Qpid AMQP1.0. Хотя я настроил конфигурацию входа в систему cert base, но, похоже, jaas
PropertiesLoginModule
вызывается.
Ниже приведена трассировка стека серверов.
14: 24: 03,324 DEBUG [org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager] Не удалось проверить пользователя: javax.security.auth.login.FailedLoginException: пользователь имеет значение null в org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule.login(PropertiesLoginModule.java:89) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) [rt.jar:1.8.0_131] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_1] DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_131] в 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] в java.security.AccessController.doPrivileged(собственный метод) [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-server-2.0.0.amq-700008-red. jar: 2.0.0.amq-700008-redhat-2] в org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager.validateUser(ActiveMQJAASSecurityManager.java:94) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] в org.apache.activemq.artemis.core.security.impl.SecurityStoreImpl.authenticate(SecurityStoreImpl.java:128) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] на org.apache.activemq.artemis.protocol.amqp.broker.AMQPConnectionCallback.isSupportsAnonymous(AMQPConnectionCallback.java:104) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache.activemq.artemis.protocol.amqp.brokerctionCallConnect.getSASLMechnisms(AMQPConnectionCallback.java:92) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] at org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.onAuthInit(AMQPConnectionContext.java:315) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.dispatchAuth(ProtonHandler.java:309) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler.inputBuffer(ProtonHandler. Java:204) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext.inputBuffer(AMQPConnectionContext.java:120) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache.activemq.artemis.protocol.amqp.broker.ActiveMQProtonRemotingConnection.bufferReceived(ActiveMQProtonRemotingConnection.java:138) [artemis-amqp-protocol-2.0.0.amq-700008-redhat-2.jar:] в org.apache..artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:628) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:69) [artemis-core-client-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:219) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:631) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:468) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:428) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в org.apache.activemq.artemis.core.protocol.ProtocolHandler$ProtocolDecoder.decode(ProtocolHandler.java:185) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] в io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в org.apache.activemq.artemis.core.protocol.ProtocolHandler$ProtocolDecoder.channelRead(ProtocolHandler.java:128) [artemis-server-2.0.0.amq-700008-redhat-2.jar:2.0.0.amq-700008-redhat-2] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:372) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5. Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:358) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] в io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:350) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] в io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1066) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.handler.ssl.SslHandler.decode(SslHandler.java:900) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.handler.codec.ByteToMessageDecoder.callDecode (ByteToMessageDecoder.java:411) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] в io.netty.handler.codec.ByteToMessageDecoder.channelRead (ByteToMessageDecoder.java: 248) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] в io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:372) [netty-all -4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] в io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:358) [netty-all-4.1.5.Final -redhat-1.jar: 4.1.5.Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:350) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] на io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:372) [netty-all-4.1.5.Final- redhat-1.jar: 4.1.5.Final-redhat-1] на io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:358) [netty-all-4.1.5.Final-redhat-1.jar: 4.1.5.Final-redhat-1] на io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:972) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:386) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:302) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] на io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) [netty-all-4.1.5.Final-redhat-1.jar:4.1.5.Final-redhat-1] в java.lang.Thread.run(поток. Java:748) [rt.jar:1.8.0_131]
1 ответ
Проверка подлинности на основе сертификатов не реализована для клиентов AMQP. Аутентификация для клиентов AMQP осуществляется через SASL, и единственными реализованными механизмами SASL являются PLAIN и ANONYMOUS. Мне не известен механизм SASL, который поддерживает аутентификацию через SSL-сертификат.
Для ясности, аутентификация на основе сертификатов в настоящее время реализована для клиентов "core", OpenWire, STOMP и MQTT (ни один из которых не использует SASL).