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