Ok, some feedback regarding the StartTLS handling...

In order to have this operation working, we had to 'bend' MINA a bit. We added an session attribute to handle the response. Let me explain.

When a startTLS request is processed by the server, we do two things:
- we setup the SSL filter in the MINA chain
- when done, we send back the startTLS response to the client

The client, receiving the startTLS response, initiate the TLS handshake to finish the TLS establishement.

And now, we have a problem, because as the SSL filter has been setup *before* sending the startTLS response to the client, we can't anymore send this response because the SslFilter will try to encrypt it.

Otoh, if we start by sending the response before establishing the SslFilter, there is a high risk that the client start the HS before the SslFilter is installed.

This is a typical chicken&egg issue.

The way we 'solved' (aka 'hacked') it, was to set a flag telling the SslFilter "do not encrypt the next message, but only the next one".

This worked, but is not safe, in a concurrent system.

Jonathan, who rewrote the SslFilter entirely, removed this flag and replaced it by something way smarter. But he is suggesting not using what he implemented. He said, rightfully, that we should instead writhe a StartTLS filter that would deal with all this crap. The idea would be to install the StartTLS filter, which would only process startTLS request and Response, and which would by pass the SslFilter when the response has to be sent. This is possible because it has access to the chain, and can call the 'writeMessage' of any filter (ie bypassing the SslFilter).

I'm working around the idea.


On 17/01/2022 17:13, Emmanuel Lécharny wrote:
Pb solved.

I now have issue with the startTLS extended request handling on the server.


Will look at it tonite.

On 17/01/2022 14:50, Emmanuel Lécharny wrote:
Ok, beside a few tweaks, MINA 2.2 works just fine with the LDAP API.

However, there aws a removal of the SslSession from the IoSession, and it's used by the server in the ExternalSaslServer:

     public byte[] evaluateResponse( byte[] initialResponse ) throws SaslException
     {
         try
         {
             SSLSession sslSession = ( SSLSession ) getLdapSession().getIoSession().getAttribute( SslFilter.SSL_SESSION );              Certificate[] peerCertificates = sslSession.getPeerCertificates();

             if ( null == peerCertificates || 1 > peerCertificates.length )
             {
                 throw new SaslException( "No peer certificate provided - cancel bind." );
             }

             getLdapSession().setCoreSession( authenticate( peerCertificates[0] ) );
             state = NegotiationState.COMPLETED;
         }

We can most certainly get it back in MINA.



On 17/01/2022 09:37, Emmanuel Lécharny wrote:
Hi !

this morning, I will test the LDAP API (and the server) with a new version of MINA (2.2) which has a totally rewritten SSL handler.

Hopefully, it will solve the TLS 1.3 issue and be slightly faster.

I'll keep you informed !




--
*Emmanuel Lécharny - CTO* 205 Promenade des Anglais – 06200 NICE
T. +33 (0)4 89 97 36 50
P. +33 (0)6 08 33 32 61
[email protected] https://www.busit.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to