Hey, Olaf. Thanks for the report! This looks like a bug to me. I think the
broker should keep track of the connection's cert(s) itself instead of
relying on the connection since when the connection is no longer valid the
certs are no longer available.

Can you open a Jira [1]?


Justin

[1] https://issues.apache.org/jira/browse/ARTEMIS

On Sun, Nov 17, 2024 at 2:46 PM Gustav, Olaf <olaf.gus...@amprion.net>
wrote:

> Hi,
>
> we are using ActiveMQ Artemis 2.33 as MQTT broker. It runs on jdk-21.
> Clients are authenticated using mutual TLS. The certificate DN is then used
> to map to a user and eventually to the configured roles.
>
> During testing we discovered, that the provided will message is not sent
> as expected. We got the following error messages:
>
> WARN  [org.apache.activemq.artemis.core.server] AMQ222216: Security
> problem while authenticating: AMQ229031: Unable to validate user from /
> 127.0.0.1:51770. Username: null; SSL certificate subject DN: unavailable
> 2024-11-13 11:40:42,824 ERROR
> [org.apache.activemq.artemis.core.protocol.mqtt] AMQ834007: Authorization
> failure sending will message: AMQ229031: Unable to validate user from /
> 127.0.0.1:51770. Username: null; SSL certificate subject DN: unavailable
>
> I did some research in the code base. The class
> org.apache.activemq.artemis.core.remoting.CertificateUtil retrieves the
> certificate subject DN based on the actual client certificate provided by
> an existing connection. When trying to send a mqtt will message, there is
> no connection to the client anymore. Consequently, the broker fails to get
> the DN. Since the subject DN serves as the key in the authentication cache
> (org.apache.activemq.artemis.core.security.impl. SecurityStoreImpl), the
> will message fails to be checked against access permissions.
>
> Is the mqtt will message mechanism implemented correctly or did I miss
> anything?
>
> As a workaround, I used the RemotingConnection.clientID as authentication
> cache key instead of the DN. That works as long as the parameter
> security-invalidation-interval is properly defined, that means
> security-invalidation-interval >> sessionExpiryInterval. Does the will
> mechanism really rely heavily on the authentication/authorization cache?
>
> Regards
> Olaf
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@activemq.apache.org
> For additional commands, e-mail: users-h...@activemq.apache.org
> For further information, visit: https://activemq.apache.org/contact
>
>
>

Reply via email to