Hello Michael, > -----Ursprüngliche Nachricht----- > Von: Michael Osipov <micha...@apache.org> > Gesendet: Dienstag, 18. März 2025 22:50 > An: users@tomcat.apache.org > Betreff: Re: JNDIRealm with required ChannelBindingToken fails > > On 2025/03/18 16:22:42 "Thomas Hoffmann (Speed4Trade GmbH)" wrote: > > Hello Tomcat-Team, > > we are currently using a JNDIRealm to authenticate against an > ActiveDirectory via LDAPs. > > For security reasons, the LDAP-Server should be configured to enforce > channel binding token (CBT). > > > > If CBT is set to enforced however, the JNDIRealm fails with this exception: > > > > org.apache.catalina.realm.JNDIRealm.getPrincipal Exception performing > authentication > > javax.naming.AuthenticationException: [LDAP: error code 49 - 80090346: > LdapErr: DSID-0C0906AD, comment: AcceptSecurityContext error, data > 80090346, v4563 ]; remaining name 'ou=xxx,dc=com' > > at > java.naming/com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3260 > ) > > ... > > > > Java should support CBT since version 16 according to these pages: > https://bugs.openjdk.org/browse/JDK-8258824 > https://bugs.openjdk.org/browse/JDK-8247311 > > > > It mentions, that a JNDI environment property > "com.sun.jndi.ldap.tls.cbtype" should be set, to make JNDI work with CBT. > > > > Looking at the class JNDIRealm.java --> > getDirectoryContextEnvironment() I can't find any property with this name > or any way to inject additional properties. > > > > The realm configuration in Tomcat is quite common, nothing special: > > <Realm className="org.apache.catalina.realm.JNDIRealm" > > adCompat="true" > > allRolesMode ="authOnly" > > connectionTimeout="3000" > > connectionURL="ldaps://server1:636" > > ... > > useDelegatedCredential="true" > > spnegoDelegationQop="auth" > > /> > > > > Does anybody have succeeded in JNDIReal with CBT? > > Could the connection issue be solved with standard methods? > > There is none and the JNDIRealm does not provide a way to pass arbitrary > properties to the DirContext. you best shot is to extend the class, override > getDirectoryContextEnvironment() and pass the desired property. > > It was actually backported to older versions: > https://bugs.openjdk.org/browse/JDK-8245527 > > My recommendation is to test it in an isolated environment first: > * Plain DirContext > * ldapsearch(1) + Cyrus SASL > > In our huge interprise this isn't enforced, I guess that qop-auth is still > good > enough with aes256-cts-hmac-sha1-96 (SSF 256). Even back then when I > co-reviewed the PR I did not fully understand what the huge benefit of TLS- > CB is if you have AES-256 and auth-conf with Kerberos, but I am not a > security expert. > > Michael >
Thank you for your quick reply and confirmation of the current situation. I can test if overriding the getDirectoryContextEnvironment() works. As far as I understood the CBT is created by some connection parameters and prevents MITM attacks via an SSL-Proxy (like Strict-Transport-Security for HTTP does on a higher level). Would it be worth to create a feature request for Tomcat? Companies get more sensitive about security features nowadays and the complexity of the feature doesn’t look very high. Thanks! Thomas