The Java code seems to contain two places where the certificate subjects are being parsed. One is used in the client:
and the second is used in the broker:
Both are actually doing the same - extracting the CN and DC components from the subject and creating the username. It should be reconsidered whether we want to reuse the SSLUtil functionality from the common part of the code in the broker code as well.
However, a bigger problem is that the implementation in both places are not working correctly in all situations. One can very easily create a certificate with a subject / DN like this:
such certificate actually doesn't contain a CN. But both current implementations will still identify the CN as USER1" in the code. I would expect that this will happen only in very rare cases, but it should still be handled properly.