AW: AW: EAP-TLS Failed in handler question
Phil Mayers
p.mayers at imperial.ac.uk
Tue Dec 11 14:10:13 CET 2012
On 10/12/12 20:00, PENZ Robert wrote:
> @PhilMayers: Did you get the Mail with the full logfile? do you need more?
Ok, your NAS is buggy I'm afraid. In some small percentage of cases, it
is not handling the wrapping of EAP id values from 255 to 0.
The following sequence of (redacted) packets shows the problem (see line
~2389268 in your debug for this example, but there are lots of others in
there):
Access-Request packet from host NAS port 54217, id=183, length=151
User-Name = "host/blah"
EAP-Message = 0x02ff...
NAS-IP-Address = NAS
Service-Type = Login-User
Calling-Station-Id = "MAC"
NAS-Port-Id = "x:y"
NAS-Port = x00y
NAS-Port-Type = Ethernet
Message-Authenticator = 0x26710066ee2e161ba4979519e82cde59
...
[eap] EAP packet type response id 255 length 33
...
+- entering group EAP {...}
[eap] EAP Identity
[eap] processing type tls
[tls] Requiring client certificate
[tls] Initiate
[tls] Start returned 1
...
Sending Access-Challenge of id 183 to 10.15.132.5 port 54217
EAP-Message = 0x010000060d20
Message-Authenticator = 0x00000000000000000000000000000000
State = 0xe043a0c1e043ad9227375e26b2f8cb62
Note that the access-request contains an EAP response with id=255, and
we return an EAP request with id=0, having wrapped around. The NAS
follows up with:
Access-Request packet from host 10.15.132.5 port 54217, id=184, length=241
User-Name = "host/blah"
EAP-Message = 0x02ff...
NAS-IP-Address = NAS
Service-Type = Login-User
Calling-Station-Id = "MAC"
NAS-Port-Id = "x:y"
NAS-Port = x00y
NAS-Port-Type = Ethernet
State = 0xe043a0c1e043ad9227375e26b2f8cb62
Message-Authenticator = 0x03a814fd68371689281f1e66a4728614
...
[eap] EAP packet type response id 255 length 105
...
rlm_eap: No EAP session matching the State variable.
That is - we send an Access-Challenge containing an EAP request id=0,
the client responds with an Access-Request containing EAP response
id=255. This is obviously wrong.
FreeRADIUS mixes certain data into the "State" value with a "xor"
including the EAP id - that's why you're getting that particular error
message, but the underlying problem is that the NAS is not always
handling EAP id value wrap correctly.
I'm curious as to why the EAP id values are so large - I don't think
most NASes do this, they start from id=1 on every conversation, but I
don't know if it's legal.
The ID wrapping seems to work in other cases; I'm not certain, but it
*may* be that it only fails if the sequence is:
C: access-request EAP-response id=255 EAP-Identity
S: access-challenge EAP-request id=0 PEAP-start
C: access-request EAP-response id=255 PEAP-data
i.e. if the initial EAP-identity is the one with id=255.
But anyway - I think your NAS is buggy. There's no way you can solve
this in FreeRADIUS - you obviously can't rewrite the EAP id, so I think
you'll need to open a bug report with the vendor.
There is one thing you *might* be able to do which *might* work, but
it's dependent on what the NAS does - if I'm right and it's only
Identity packets that don't wrap properly, you might be able to detect
EAP identity packets and modify the ID and *maybe* the Extreme switch
will reply in-sequence. Like so:
authorize {
if ("%{EAP-Message[0]}" =~ /^0x02ff(....)01(.+)/) {
# we have an EAP-identity packet id=255, see if we can force a wrap
update request {
EAP-Message := "0x0201%{1}01%{2}"
}
}
....
}
However - I have no idea if this syntax will even work, and to be honest
I'm extremely dubious that, if it does, the Extreme would respond properly.
Cheers,
Phil
More information about the Freeradius-Users
mailing list