reauth-problem with WPA2-tls
Andreas Hartmann
andihartmann at 01019freenet.de
Fri Jun 4 21:11:27 CEST 2010
Andreas Hartmann schrieb:
> Bjørn Mork schrieb:
>> Andreas Hartmann <andihartmann at 01019freenet.de> writes:
>>
>>> Fri Jun 4 11:22:48 2010 : Info: [tls] WARNING: No information in
>>> ^^^^^^^^^^^^^^^^^^^^^^^^^
>>> cached session!
>>> ^^^^^^^^^^^^^^^
>>>
>>> Fri Jun 4 11:22:48 2010 : Info: [eap] Freeing handler
>>> Fri Jun 4 11:22:48 2010 : Info: ++[eap] returns reject
>>> Fri Jun 4 11:22:48 2010 : Info: Failed to authenticate the user.
>>> Fri Jun 4 11:22:48 2010 : Auth: Login incorrect: [myuser at mydom] (from
>>> client WAP610N port 0 cli 00-13-....)
>>> Fri Jun 4 11:22:48 2010 : Info: Using Post-Auth-Type Reject
>>> Fri Jun 4 11:22:48 2010 : Info: +- entering group REJECT {...}
>>> Fri Jun 4 11:22:48 2010 : Info: [attr_filter.access_reject] expand:
>>> %{User-Name} -> myuser at mydom
>>> Fri Jun 4 11:22:48 2010 : Debug: attr_filter: Matched entry DEFAULT at
>>> line 11
>>> Fri Jun 4 11:22:48 2010 : Info: ++[attr_filter.access_reject] returns
>>> updated
>>> Fri Jun 4 11:22:48 2010 : Info: Delaying reject of request 11 for 1 seconds
>>>
>>>
>>> What does it mean: No information in cached session? Couldn't the key be
>>> found (what's the key? The username "myuser" or "myuser at mydom" or
>>> soemthing else - do I have the chance to debug it?) or was the key
>>> found, but there was no data associated?
>>
>> I wondered about the same... You can find the session store and
>> retrieve code in src/modules/rlm_eap/libeap/eap_tls.c :
>>
>> } else if (!SSL_session_reused(tls_session->ssl)) {
>> RDEBUG2("Saving response in the cache");
>>
>> vp = paircopy2(request->reply->vps, PW_USER_NAME);
>> pairadd(&vps, vp);
>>
>> vp = paircopy2(request->packet->vps, PW_STRIPPED_USER_NAME);
>> pairadd(&vps, vp);
>>
>> if (vps) {
>> SSL_SESSION_set_ex_data(tls_session->ssl->session,
>> eaptls_session_idx, vps);
>> } else {
>> RDEBUG2("WARNING: No information to cache: session caching will be disabled for this session.");
>> SSL_CTX_remove_session(tls_session->ctx,
>> tls_session->ssl->session);
>> }
>>
>> /*
>> * Else the session WAS allowed. Copy the cached
>> * reply.
>> */
>>
>> } else {
>>
>> vp = SSL_SESSION_get_ex_data(tls_session->ssl->session,
>> eaptls_session_idx);
>> if (!vp) {
>> RDEBUG("WARNING: No information in cached session!");
>> return eaptls_fail(handler, peap_flag);
>> } else {
>> RDEBUG("Adding cached attributes to the reply:");
>> debug_pair_list(vp);
>> pairadd(&request->reply->vps, paircopy(vp));
>>
>> /*
>> * Mark the request as resumed.
>> */
>> vp = pairmake("EAP-Session-Resumed", "1", T_OP_SET);
>> if (vp) pairadd(&request->packet->vps, vp);
>> }
>> }
>>
>>
>> So I guess the warning means that either SSL_SESSION_set_ex_data() or
>> SSL_SESSION_get_ex_data() failed. A useful change would be testing the
>> return value of SSL_SESSION_set_ex_data() and print a warning if it
>> fails, possibly using ERR_get_error() and ERR_error_string() or similar
>> to get the actual error. The latter would also be useful in the
>> SSL_SESSION_get_ex_data() failure case
>
> Debugging of SSL_SESSION_set_ex_data()
>
> The returncode of the function is 1 (don't know, if it should be 0 - but
> it could be correct too, if it means, that one pair has been stored).
>
> vps, which SSL_SESSION_set_ex_data() is given as argument, consists of
> one NULL element.
>
> request->packet->vps->name gives User-Name, request->reply-vps is null
> (should be PW_USER_NAME). But there cant be any password, because there
> exists no password, because the authentication is done exclusively with
> keys.
> Could this problem be solved by a configuration entry or must it be
> hacked? Is it possible to give wpa_supplicant a dummy password?
Well,
SSL_SESSION_set_ex_data-Error: error:00000000:lib(0):func(0):reason(0) -
SSL couldn't find an error.
>
> Debugging of SSL_SESSION_get_ex_data()
>
> At resuming, Index is 2 (eaptls_session_idx). This would be ok. Seems,
> that the returncode 1 from SSL_SESSION_set_ex_data() means, that nothing
> has been saved.
But: no error has been detected:
SSL_SESSION_get_ex_data-Error: error:00000000:lib(0):func(0):reason(0)
Now, I looked at the SSL-session_id.
tls_session->ssl->session->session_id is empty when the data is saved to
the session.
At the time the data is fetched from the session during reauth, the
session_id is not empty (means: there is another id).
I tested to unload the datas after they have been saved - there was no
problem! The data could be retrieved again.
Could there be a problem with the session-handling? There seem to be
different sessions? This would be an explanation why there are no errors
while storing or restoring the data.
Kind regards,
Andreas
More information about the Freeradius-Users
mailing list