LDAP Channel Binding

Bernd Eckenfels ecki at zusammenkunft.net
Tue Feb 18 18:02:20 UTC 2020


Hello,

> While JGSS has channel binding, the SASL/GSSAPI mech has not called it.
> I can add a SASL property which takes a byte[] value so when it's not null the
> implementation can set a ChannelBinding object using it as appData (with no addresses).

I think this would be helpful in general, for sun-ldap this would probably need to set it itself, as it manages the sockets directly.

If I understand correctly there are also different token formats, so it might need a way to request the Microsoft Format. Somewhere I read "Microsoft channel binding token ms-cbt" but I cant find it anymore. tls-unique is specified in rfc5929.

> Then the TLS layer needs to provide a method to get the bytes.

Yes JSSE would need a API to get to this, I think we discussed a handshake callback for this (and other applications like logging the master key).

> I've also read about the SASL/GS2 mech (RFC 5801) which claims to support channel binding. Do you know if Microsoft ever support it?

The AD implementation is fairly limited for years, the current documentation, specification (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/e7d814a5-4cb5-4b0d-b408-09d79988b550) or rootDSE entries do not suggest this method is supported (At least I haven't seen it+). But on the other hand Microsoft might notice that they have neglected it and invest in interop, so... (I think OpenLDAP does support it).

+ I am not sure if it could actually happen by extending GSS-SPNEGO, but that would really be a strange layering of multiple security mechanisms.

Gruss
Bernd
--
http://bernd.eckenfels.net
________________________________
Von: Weijun Wang <weijun.wang at oracle.com>
Gesendet: Dienstag, Februar 18, 2020 3:18 PM
An: Bernd Eckenfels
Cc: security-dev at openjdk.java.net
Betreff: Re: LDAP Channel Binding

While JGSS has channel binding, the SASL/GSSAPI mech has not called it. I can add a SASL property which takes a byte[] value so when it's not null the implementation can set a ChannelBinding object using it as appData (with no addresses).

But who will be setting the property? Whoever calls the SASL methods will need to provide the appData. Is it the TLS channel binding defined in RFC 5929? Then the TLS layer needs to provide a method to get the bytes.

I've also read about the SASL/GS2 mech (RFC 5801) which claims to support channel binding. Do you know if Microsoft ever support it?

Thanks,
Max

> On Feb 18, 2020, at 7:43 PM, Bernd Eckenfels <ecki at zusammenkunft.net> wrote:
>
> Hello Michael,
>
> I am not sure why you say so, when the channel binding option is turned on as Microsoft recommends and plans to default to in March the Java LDAP directory implementation will no longer be able to connect when using GSSAPI or DIGEST-MD5 over LDAPs.
>
> I think this should be possible. It will most likely require changes in JSSE, SASL, JNDI and JNDI-LDAP (both in implementations but also public APIs (in SASL maybe only properties?). It looks like JGSS might not need a  new API.
>
> If there are also SPNEGO/NTLM external SASL mechanisms which are used with JNDI, that would be an additional check condition if the new APIs are enough to handle that.
>
> Gruss
> Bernd
> --
> http://bernd.eckenfels.net
> Von: Michael Osipov <1983-01-06 at gmx.net>
> Gesendet: Sunday, February 16, 2020 11:02:16 AM
> An: Weijun Wang <weijun.wang at oracle.com>
> Cc: Bernd Eckenfels <ecki at zusammenkunft.net>; security-dev at openjdk.java.net <security-dev at openjdk.java.net>
> Betreff: Re: LDAP Channel Binding
>
> Am 2020-02-14 um 15:53 schrieb Weijun Wang:
> >
> >
> >> On Jan 22, 2020, at 6:31 AM, Michael Osipov <1983-01-06 at gmx.net> wrote:
> >>
> >> Am 2020-01-21 um 17:57 schrieb Bernd Eckenfels:
> >>> Hello,
> >>>
> >>> I have now repeated the tests with LdapEnforceChannelBinding=2 and I
> >>> could see the rejection with error code 80090346 for GSSAPI and
> >>> DIGEST-MD5 with TLS.
> >>>
> >>> The simple bind with TLS and the GSSAPI or DIGEST-MD5 without TLS but
> >>> with auth-int/conf all work with signing and binding required (I.e
> >>> after Microsoft charged defaults in March)
> >>>
> >>> (Which makes the TLS binding a bit useless, but we should still think
> >>> about supporting it.)
> >>>
> >>> Jgss seems to already allow to set it, so only JSSE needs to provide
> >>> an api for sasl/jndi.
> >>
> >> How? I am confused! The Kerberos SaslClient does not use/set GSS channel
> >> bindings. I don't see any in com.sun.security.sasl.gsskerb.
> >
> > Are you suggesting any change here? JGSS has channel binding method but the SASL mech has not called it.
>
> None yet, because we do not know what channel binding is actually used.
> We assume that MS uses TLS channel binding regardless of the underlying
> authentication scheme.
>
> M

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/security-dev/attachments/20200218/f32b5b21/attachment-0001.htm>


More information about the security-dev mailing list