EAP-TLS Failed in handler question

Phil Mayers p.mayers at imperial.ac.uk
Mon Nov 19 11:08:50 CET 2012


On 11/19/2012 08:23 AM, PENZ Robert wrote:
>
> My first question is, how can I decode a EAP-Message from the debug

Wireshark, or read the EAP RFC and decode it manually (see below)

> log to check if the request is itself ok. Here is first packet from

No, this is *not* the first packet, because it has a "State" attribute, 
which is only present in 2nd and subsequent packets of the EAP exchange.

The reason you're getting the error message is that the "State" 
attribute is unknown, so FR can't proceed with the EAP session and has 
no choice but to drop it.

Check you haven't reduced the "timer_expire" value in eap.conf to a 
too-low value.

How many FR servers do you have serving this NAS? Is it possible the NAS 
is sending packets in a round-robin fashion (which is bad) which is why 
you're seeing a packet for which you don't have State?

I guess it's possible something is mangling the State attribute from the 
previous packet (which is *actually* the first packet).

Otherwise, the client or NAS is doing something odd.

> this client in some time, and it already generates the error. But the
> same client worked before and after it for days without a problem:

It *could* be that the client just got stuck and is responding (very) 
late. But I'm quite surprised the NAS didn't timeout the EAP auth before 
that.

>
> rad_recv: Access-Request packet from host 10.xxx.xxx.4 port 44519,
> id=151, length=244 User-Name = "host/xxxxxxxxxxxxx.tirol.local"
> EAP-Message = 0x02ff00690d800000005f160301005a01
>

Ok so this says:

02 - eap response
ff - eap ID 255 - bit odd..
0069 - length in hex
0d - eap type 13 (EAP-TLS)
80 - eap TLS flags = length included
0000005f - tls length
160301 - TLS packet 0x16==22==handshake record, version 3,1 (TLS 1.0)
005a - record length
01 - handshake=client hello

etc. etc.

So, it's the start of an EAP-TLS exchange, but as above, it's *not* the 
first packet. If you start a tcpdump on the server, you'll see how this 
works:

C: Access-Request, no state, EAP-Identity=abc
S: Access-Challenge, state=xxxx, EAP-TLS blah
C: Access-Request, state=xxxx, EAP-TLS blah

i.e. the NAS has to reflect the "State" back to FreeRADIUS on each 
packet. Something is interfering with that, or erasing the "State" at 
your end (a timer or restart).

> rlm_eap: No EAP session matching the State variable

See?

> Invalid means I return a reject ... should I return something else?

No.

> Is this a client problem or a misconfiguration on my part?

It's probably a client or NAS problem, unless you've set timer_expire 
too low.

However: I guess this could also happen right after the server is 
restarted. Could that be it - is a cron job restarting it maybe?


More information about the Freeradius-Users mailing list