PEAP Machine Authentication
Michael Griego
mgriego at utdallas.edu
Wed Oct 19 19:18:19 CEST 2005
I'm happy to announce that 802.1x/PEAP machine authentication with the
Windows built in supplicant is now possible using FreeRADIUS. In the
past, machine authentication was only possible by proxying machine
authentication requests to another RADIUS server capable of handling
them, such as IAS. FreeRADIUS, along with some updates to Samba, is now
capable of handling these authentications internally.
Here's a synopsis on how to get this working right now:
The first item required to get machine authentication is a patch to the
Samba source. This patch sets a set of flags used when sending the
authentication request to the domain such that workstation logons are
allowed. I expect that the Samba team will include the ability to set
these flags at runtime in a future release. You can find the details of
the patching required at
http://www.open.com.au/archives/radiator/2005-10/msg00037.html. It's a
very simple patch to the samba/source/rpc_client/cli_netlogon.c file.
In the cli_netlogon_sam_network_logon() function (be sure not to edit
the cli_netlogon_sam_logon() function by mistake), there is a call to
the init_id_info2() function. The param_ctrl flags parameter to this
function sets all flags to 0. In order to enable machine
authentication, they should be set to 0x800
(MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT). If you change this and
recompile/reinstall Samba, your ntlm_auth command will now be able to
handle machine authentications. As noted above, it is expected that
these flags will become manipulable at runtime in some future release of
Samba, so this fix is for those who need this functionality now.
Next, when using ntlm_auth, the User-Name received in the request has to
be rewritten. Windows supplicants send the machine name in the form of
host/fully.qualified.domain.name. When you provide the user name to
ntlm_auth, it must be in the form of machineshortname$, the SAM account
form of the name. I have updated the rlm_mschap module so that a call
to the xlat function mschap:User-Name will now properly format the
machine name as above as well as format usernames. In addition, a call
to the xlat function mschap:NT-Domain will also grab the domain name
from the host/ formatted username. Therefore, with this updated code,
the only change to the configuration in the radiusd.conf is to ensure
that your ntlm_auth line looks like the following:
ntlm_auth = "/path/to/ntlm_auth --username=%{mschap:User-Name}
--challenge=%{mschap:Challenge:-00}
--nt-response=%{mschap:NT-Response:-00}
--domain=%{mschap:NT-Domain:-DEFAULTDOMAIN}
The updated rlm_mschap module is available in CVS now. You can grab the
nightly CVS snapshot (the usual caveat of unstable code applies). In
addition, for those familiar with CVS, it is available in the
release_1_0 branch for use with the stable source tree. And, finally,
it will be included in the next stable release of FreeRADIUS.
--Mike
More information about the Freeradius-Users
mailing list