前一段时间,有个朋友过来问我关于802.1x的认证问题。具体的问题是这样的:
在802.1x的认证过程中,使用Free Radius加LDAP实现认证服务器,使用LDAP的原因是对方要实现集中管理帐户,而为了保密原因,LDAP中存储的全部是MD5加密过后的密码,而且LDAP不能做任何修改。
现在可供选择的认证方式有2种:pap和mschap。pap认证方式中,freeradius收到客户端发来的认证密码为明文,而mschap则为由NTPASSWORD(MD4加密)计算而来的challenge。而由于MD4和MD5均为不可逆的加密方式,有MD5密文无法得到明文,因此由LDAP中的MD5密文是无法计算出相应的chanllenge与客户端进行对比,所以mschap首先被否决了。
现在只剩下pap认证方式可供选择,而在freeradius的ldap配置文件中,明确提到LDAP认证只能用于明文密码:
# However, LDAP can be used for authentication ONLY when the#Access-Request packet contains a clear-text User-Password#attribute. LDAP authentication will NOT work for any other
# authentication method.
#
# This means that LDAP servers don't understand EAP. If you
# force "Auth-Type = LDAP", and then send the server a
# request containing EAP authentication, then authentication
# WILL NOT WORK.
因此只能修改freeradius中的ldap模块,将收到的明文密码经过MD5加密之后再与LDAP进行认证,返回认证结果。该认证模块位于freeradius的源码目录下src/modules/rlm_ldap/rlm_ldap.c中,将password进行md5计算后再进行对比。经测试,达到了预想的效果。
后记:但是该方式只是实现了简单的MD5密码的存储,在PAP认证过程中,依然传输的是明文密码,其安全性并没有本质改变,因此如果条件允许的话(更改LDAP),还是应该采用MSCHAP的方式进行认证以提高系统的安全性。