[RADIATOR] random EAP authentication errors since 4.17

Heikki Vatiainen hvn at open.com.au
Tue Dec 13 06:59:44 UTC 2016

On 1.12.2016 17.02, Hartmaier Alexander wrote:

> We're fighting duplicate requests due to slow responses because of
> PEAP-TLS many exchanged packets.
> Is FarmSize still unusable when enabling EAP_UseState because the EAP
> context data isn't shared between the forked childs?

This has not changed. EAP_UseState does not change this. Even if EAP 
context data kept by Radiator could be shared between children, there's 
still the TLS state that lives within the TLS library that can not be 
easily shared.

> Can Gossip be used to share this state between the childs or the State
> attribute to balance all requests of one EAP session always to the same
> child?

Gossip, or some other method, could be used for sharing EAP context. 
However, the problem with TLS based EAP methods is the TLS state.

> I've added this line to all PostAuthHooks and everything seems to work
> as it should:
> my $self = $p->{AuthBy};
> my $context = $self->getEAPContext($p);

I strongly advice to get context like this:
my $context = $p->{EAPContext};

> return
>         if Net::SSLeay::session_reused($context->{ssl});
> As I currently don't log if an auth was an EAP auth or a session
> resumption I can't tell if the session resumption works.

The session_reused() call will tell this.

Please note that as I wrote earlier, I'd consider EAP authentication 
that uses TLS session resumption as EAP authentication too.

> Can you please advice how to log session resumption?

For now I'd use the session_reused() check with the Hook.

For help with hooks, I have thought about the following: Add a resume 
counter in EAP context. If resume support is off, the counter would 
always have undefined value. When resume support is enabled, the counter 
would be initialised to 0 and incremented for each resume. This would 
allow you to simply check 'if ($context->{eap_tls_resume_count})' to see 
if a TLS resume was done.

This counter could also be used to enforce policies, for example, an 
upper for how many times (not just for how long) a session can be 
resumed. This could also be something that can be logged in 
authentication log for example for statistics.

When the resume happens and information that needs to be kept over 
resumed sessions is recovered, a hook can be added to do any local 
processing that might be required to recover custom information used by 
the current configuration. In addition to this, a user specific opaque 
value (could be a simple scalar or reference, for example) can be copied 
over by the code. The user hooks could then use this as they wish.

In short: we can enhance the support for storing configuration specific 
data in the resume information and can add a counter that can be used to 
detect resumption with hooks.


> Thanks, Alex
> On 2016-11-30 18:09, Hartmaier Alexander wrote:
>> On 2016-11-30 17:45, Heikki Vatiainen wrote:
>>> On 30.11.2016 18.02, Hartmaier Alexander wrote:
>>>> Let me clarify our setup:
>>>> EAPTLS_CertificateVerifyHook parses the cert issuer and subject and
>>>> populates
>>>>     $context->{customer} = $customer;
>>> [cut]
>>> Thanks, this clarifies the situation. You need to save information
>>> across resumed authentications.
>>>> I assume that the PostAuthHook is also run for resumed sessions but
>>>> EAPTLS_CertificateVerifyHook isn't which leads to the lack of the
>>>> $context contents and thus the failure of the PostAuthHook.
>>> Correct. Certificate verification runs only during full TLS handshake.
>>> Handler's PostAuthHook runs always when Handler is finishing its work.
>>> It does not matter if the TLS handshake within an AuthBy was full or
>>> resumed.
>>> I'll get back to you about how to save custom information across
>>> resumed authentications. For more about what is saved now, see EAP.pm
>>> and eap_save_resume_context and its counterpart just below. When
>>> thinking about possible options would a hook work for you? Another
>>> possibly might be to automatically save suitably named context
>>> variables, for example $context->{custom_info} would be automatically
>>> saved and restored.
>>> The reason for this change was to allow the user of State attribute
>>> with EAP authentication and more clearly separate information that is
>>> needed during one EAP authentication dialog from information that
>>> needs to be kept across resumed authentications.
>>> Thanks,
>>> Heikki
>> Correct me if I'm wrong but can a resumed session every be not accepted?
>> As it means that a successful auth has happened before.
>> Should a PostAuth hook, or some of the other hooks, be run at all in
>> this case?
>> It might make sense to differenciate between an authentication and a
>> resumption.
>> As the 'last_reply_attrs' are already stored in the context it might be
>> the easiest option to either use a different hook instead of PostAuth,
>> continue using PostAuth if you decide to not call PostAuth for resumed
>> 'auths' or detect the resumption in the Hook and just bail out of it at
>> the very beginning.
>> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
>> T-Systems Austria GesmbH Rennweg 97-99, 1030 Wien
>> Handelsgericht Wien, FN 79340b
>> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
>> Notice: This e-mail contains information that is confidential and may
>> be privileged.
>> If you are not the intended recipient, please notify the sender and then
>> delete this e-mail immediately.
>> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
>> _______________________________________________
>> radiator mailing list
>> radiator at lists.open.com.au
>> http://lists.open.com.au/mailman/listinfo/radiator
> _______________________________________________
> radiator mailing list
> radiator at lists.open.com.au
> http://lists.open.com.au/mailman/listinfo/radiator

Heikki Vatiainen <hvn at open.com.au>

Radiator: the most portable, flexible and configurable RADIUS server
anywhere. SQL, proxy, DBM, files, LDAP, NIS+, password, NT, Emerald,
Platypus, Freeside, TACACS+, PAM, external, Active Directory, EAP, TLS,
DIAMETER etc. Full source on Unix, Windows, MacOSX, Solaris, VMS, 
NetWare etc.

More information about the radiator mailing list