Merged two documents into one.
authoraland <aland>
Tue, 27 Aug 2002 16:46:44 +0000 (16:46 +0000)
committeraland <aland>
Tue, 27 Aug 2002 16:46:44 +0000 (16:46 +0000)
doc/eap [deleted file]
doc/rlm_eap

diff --git a/doc/eap b/doc/eap
deleted file mode 100644 (file)
index 303661b..0000000
--- a/doc/eap
+++ /dev/null
@@ -1,295 +0,0 @@
-
-
-            Extensible Authentication Protocol (EAP)
-
-
-INTRODUCTION
-
-  Extensible Authentication Protocol(EAP), rfc2284, is a general protocol 
-  that allows network access points to support multiple authentication 
-  methods. Each EAP-Type indicates a specific authentication mechanism. 
-  802.1x standard authenticates wireless LAN users trying to access
-  enterprise networks.
-
-  RADIUS attribute used for EAP is EAP-Message, 79(rfc2869). RADIUS 
-  communicates all EAP messages by embedding them in this attribute.
-
-  General Terminology
-  Supplicant/EAP Client - is the software on the end-user/client machine
-                          (machine with the wireless card).
-  Authenticator/NAS/Access Point(AP) -  A network device providing users 
-                                    with a point of entry into the network.
-  EAPOL - EAP over LAN as defined in 802.1x standard.
-  EAPOW - EAP over Wireless.
-
-
-   +----------+        +----------+        +----------+
-   |          |  EAPOL |          | RADIUS |          |
-   |  EAP     |<------>|  Access  |<------>|  RADIUS  |
-   |  Client  |  EAPOW |  Point   |  (EAP) |  Server  |
-   |          |        |          |        |          |
-   +----------+        +----------+        +----------+
-
-
-   The sequence of events, for EAP-MD5, runs as follows:
-    1. The end-user associates with the Access Point(AP).
-    2. The supplicant specifies AP to use EAP by sending EAP-Start.
-    3. AP requests the supplicant to Identify itself (EAP-Identity).
-    4. Supplicant then sends its Identity (username) to the AP.
-    5. AP forwards this EAP-response AS-IS to the RADIUS server.
-       (The supplicant and the RADIUS server mutually authenticate via AP.
-       AP just acts as a passthru till authentication is finished.)
-    6. The server sends a challenge to the supplicant.
-    7. The supplicant carries out a hash on the password and sends 
-       this hashed password to the RADIUS server as its response.
-    8. The RADIUS server performs a hash on the password for that supplicant 
-       in its user database and compares the two hashed values and 
-       authenticates the client if the two values match(EAP-Success/EAP-Failure)
-    9. AP now opens a port to accept data from the end-user.
-
-  Currently, EAP is widely used in wireless networks than in wired networks.
-  In 802.11/wireless based networking, following sequence of events happen in 
-  addition to the above EAP events.
-
-   10. RADIUS server and the supplicant agree to a specific WEP key.
-   11. The supplicant loads the key ready for logging on.
-   12. The RADIUS server sends the key for this session (Session key) to the AP.
-   13. The AP encrypts its Broadcast key with the Session key
-   14. The AP sends the encypted key to the supplicant
-   15. The supplicant decrypts the Broadcast key with the Session key and 
-       the session continues using the Broadcast and Session keys until 
-       the session ends.
-   (Please note that WEP is not yet supported in freeradius)
-
-
-  References:
-       The Implementation of EAP over RADIUS is based on the following RFCs
-       rfc2869 -- RADIUS Extensions
-       rfc2284 -- PPP Extensible Authentication Protocol (EAP)
-       rfc2716 -- PPP EAP TLS Authentication Protocol
-
-  Following links help to understand HOW EAP works
-       www.ieee802.org/1/mirror/8021/docs2000/ieee_plenary.PDF 
-
-
-EAP CODE ORGANIZATION
-
-  EAP is implemented as a module in freeradius 
-  and the code is placed in src/modules/rlm_eap. 
-  All EAP-Types are organized as subdirectories in rlm_eap/types/.
-  Currently Freeradius supports only 2 EAP-Types (EAP-MD5, EAP-TLS).
-
-  Each EAP-Type, like types/rlm_eap_md5, contains a chunk of code that 
-  knows how to deal with a particular kind of authentication mechanism. 
-
-  To add a new EAP-Type then a new directory should be created as 
-  rlm_eap/types/rlm_eap_XXXX, where XXXX is EAP-Type name 
-  ie for EAP-Type like ONE TIME PASSWORD (OTP) it would be rlm_eap_otp 
-  and for LEAP it would be rlm_eap_leap.
-
-  src/modules/rlm_eap -- contains the basic EAP and generalized interfaces 
-    to all the EAP-Types.
-  rlm_eap/types -- contains all the supported EAP-Types
-  rlm_eap/types/rlm_eap_md5 -- EAP-MD5 authentication.
-  rlm_eap/types/rlm_eap_tls -- EAP-TLS based authentication.
-
-   
-IMPLEMENTATION (For Developers)
-
-  The rlm_eap module only deals with EAP specific authentication mechanism
-  and the generic interface to interact with all the EAP-Types. 
-
-  Currently, these are the existing interfaces,
-       int     attach(CONF_SECTION *conf, void **type_arg);
-       int     initiate(void *type_arg, EAP_HANDLER *handler);
-       int     authenticate(void *type_arg, EAP_HANDLER *handler);
-       int     detach(void **type_arg);
-
-  attach() and detach() functions allocate and deallocate all the 
-  required resources.
-
-  initiate() function begins the conversation when EAP-Identity response 
-  is received. Incase of EAP-MD5, initiate() function sends the challenge.
-
-  authenticate() function uses specific EAP-Type authentication mechanism
-  to authenticate the user. During authentication many EAP-Requests and
-  EAP-Responses takes place for each authentication. Hence authenticate()
-  function may be called many times. EAP_HANDLER contains the complete 
-  state information required.
-
-CONFIGURATION
-
-  Add the eap configuration stanza to the modules section in radiusd.conf
-  to load and control rlm_eap and all the supported EAP-Types:
-
-  For example:
-       modules {
-               ...
-               eap {
-                       md5 {
-                       }
-                   ...
-               }
-               ...
-       }
-
-  NOTE: You cannot have empty eap stanza. Atleast one EAP-Type sub-stanza  
-  should be defined as above, otherwise the server will not know what type
-  of eap authentication mechanism to be used and the server will exit 
-  with error.
-
-  All the various options and their associated default values for each
-  EAP-Type are documented in the sample radiusd.conf that is provided 
-  with the distribution.
-
-  NOTE: EAP cannot authorize a user. It can only authenticate.
-  Other Freeradius modules authorize the user and lets EAP to authenticate.
-  
-HOW DO I USE IT (FAQ/Examples)
-
-  1. How can I enable EAP-MD5 authentication ?
-
-  In radiusd.conf
-
-       modules {
-               ...
-               eap {
-                       default_eap_type = md5
-                       md5 {
-                       }
-                   ...
-               }
-               ...
-       }
-       # eap sets the authenticate type as EAP
-       authorize {
-               ...
-               eap
-       }
-
-       # eap authentication takes place.
-       authenticate {
-               eap
-       }
-  
-  2. My Userbase is in LDAP and I want to use EAP-MD5 authentication 
-
-  In radiusd.conf
-
-       modules {
-               ...
-               eap {
-                       default_eap_type = md5
-                       md5 {
-                       }
-                   ...
-               }
-               ...
-       }
-       # ldap gets the Configured password.
-       # eap sets the authenticate type as EAP
-       authorize {
-               ldap
-               eap
-       }
-
-       # eap authentication takes place.
-       authenticate {
-               eap
-       }
-
-  3. How can I Proxy EAP messages, with/without User-Name attribute
-      in the Access-Request packets 
-
-   With User-Name attribute in Access-Request packet,
-   EAP-proxying is just same as RADIUS-proxying.
-
-   If User-Name attribute is not present in Access-Request packet,
-   Freeradius can proxy the request with the following configuration
-   in radiusd.conf
-
-   # eap module should be configured as the First module in 
-   # the authorize stanza
-
-       authorize {
-               eap
-               ...  other modules.
-       }
-
-   With this configuration, eap_authorize creates User-Name attribute
-   from EAP-Identity response, if it is not present.
-   Once User-Name attribute is created, RADIUS proxying takes care
-   of EAP proxying.
-
-  4. How Freeradius can handle EAP-START messages ?
-
-   In most of the cases this is handled by the Authenticator.
-
-   Only if it is required then, in radiusd.conf
-
-       authorize {
-               eap
-               ...  other modules.
-       }
-
-   With the above configuration, RADIUS server immediately responds with
-   EAP-Identity request.
-       
-   NOTE: EAP doesnot check for any Identity or maintains any state in case
-   of EAP-START. It blindly responds with EAP-Identity request.
-   Proxying is handled only after EAP-Identity response is received.
-
-  5. I want to enable multiple EAP-Types, how can I configure ?
-  
-  In radiusd.conf
-
-       modules {
-               ...
-               eap {
-                       default_eap_type = tls
-                       md5 {
-                       }
-                       tls {
-                               ...
-                       }
-                   ...
-               }
-               ...
-       }
-
-   The above configuration will let the server load all the EAP-Types,
-   but the server can have only one default EAP-Type, as above.
-
-   Once EAP-Identity response is received by the server, based on the
-   default_eap_type, the server will send a new request (MD5-Challenge 
-   request incase of md5, TLS-START request incase of tls) to the supplicant.
-   If the supplicant is rfc2284 compliant and doesnot support the
-   EAP-Type sent by the server then it sends EAP-Acknowledge with the
-   supported EAP-Type. If this EAP-Type is supported by the server then it 
-   will send the respective EAP-request.
-  
-   Example: If the supplicant supports only EAP-MD5 but the server
-   default_eap_type is configured as EAP-TLS, as above, then the server
-   will send TLS-START after EAP-Identity is received. Supplicant will
-   respond with EAP-Acknowledge(EAP-MD5). Server now responds with
-   MD5-Challenge.
-
-
-INSTALLATION
-  EAP and EAP-MD5 doesnot require any additional packages.
-  Freeradius contains all the required packages.
-  For EAP-TLS, OPENSSL, <http://www.openssl.org/>, is required to be installed.
-  Any version from 0.9.6b, should fairly work with this module.
-
-
-CAVEATS
-    It probably still has bugs.  Most notably, there is a small memory
-    leak somewhere in the eap_tls code.  I suspect it's because of my 
-    misuse of OPENSSL libraries, but I have no proof yet.
-
-
-ACKNOWLEDGEMENTS
-   Primary author - Raghu <raghud@mail.com>
-
index 694ed13..50f2897 100644 (file)
@@ -1,8 +1,131 @@
-EAP/TLS support is experimental.
 
 
-HOWTO setup documents to integrate & configure the following
 
 
-1. XSupplicant - freeradius (EAP/TLS) notes may be found at:
+            Extensible Authentication Protocol (EAP)
+
+
+INTRODUCTION
+
+  Extensible Authentication Protocol(EAP), rfc2284, is a general protocol 
+  that allows network access points to support multiple authentication 
+  methods. Each EAP-Type indicates a specific authentication mechanism. 
+  802.1x standard authenticates wireless LAN users trying to access
+  enterprise networks.
+
+  RADIUS attribute used for EAP is EAP-Message, 79(rfc2869). RADIUS 
+  communicates all EAP messages by embedding them in this attribute.
+
+  General Terminology
+  Supplicant/EAP Client - is the software on the end-user/client machine
+                          (machine with the wireless card).
+  Authenticator/NAS/Access Point(AP) -  A network device providing users 
+                                    with a point of entry into the network.
+  EAPOL - EAP over LAN as defined in 802.1x standard.
+  EAPOW - EAP over Wireless.
+
+
+   +----------+        +----------+        +----------+
+   |          |  EAPOL |          | RADIUS |          |
+   |  EAP     |<------>|  Access  |<------>|  RADIUS  |
+   |  Client  |  EAPOW |  Point   |  (EAP) |  Server  |
+   |          |        |          |        |          |
+   +----------+        +----------+        +----------+
+
+
+   The sequence of events, for EAP-MD5, runs as follows:
+    1. The end-user associates with the Access Point(AP).
+    2. The supplicant specifies AP to use EAP by sending EAP-Start.
+    3. AP requests the supplicant to Identify itself (EAP-Identity).
+    4. Supplicant then sends its Identity (username) to the AP.
+    5. AP forwards this EAP-response AS-IS to the RADIUS server.
+       (The supplicant and the RADIUS server mutually authenticate via AP.
+       AP just acts as a passthru till authentication is finished.)
+    6. The server sends a challenge to the supplicant.
+    7. The supplicant carries out a hash on the password and sends 
+       this hashed password to the RADIUS server as its response.
+    8. The RADIUS server performs a hash on the password for that supplicant 
+       in its user database and compares the two hashed values and 
+       authenticates the client if the two values match(EAP-Success/EAP-Failure)
+    9. AP now opens a port to accept data from the end-user.
+
+  Currently, EAP is widely used in wireless networks than in wired networks.
+  In 802.11/wireless based networking, following sequence of events happen in 
+  addition to the above EAP events.
+
+   10. RADIUS server and the supplicant agree to a specific WEP key.
+   11. The supplicant loads the key ready for logging on.
+   12. The RADIUS server sends the key for this session (Session key) to the AP.
+   13. The AP encrypts its Broadcast key with the Session key
+   14. The AP sends the encypted key to the supplicant
+   15. The supplicant decrypts the Broadcast key with the Session key and 
+       the session continues using the Broadcast and Session keys until 
+       the session ends.
+   (Please note that WEP is not yet supported in freeradius)
+
+
+  References:
+       The Implementation of EAP over RADIUS is based on the following RFCs
+       rfc2869 -- RADIUS Extensions
+       rfc2284 -- PPP Extensible Authentication Protocol (EAP)
+       rfc2716 -- PPP EAP TLS Authentication Protocol
+
+  Following links help to understand HOW EAP works
+       www.ieee802.org/1/mirror/8021/docs2000/ieee_plenary.PDF 
+
+
+EAP CODE ORGANIZATION
+
+  EAP is implemented as a module in freeradius 
+  and the code is placed in src/modules/rlm_eap. 
+  All EAP-Types are organized as subdirectories in rlm_eap/types/.
+  Currently Freeradius supports only 2 EAP-Types (EAP-MD5, EAP-TLS).
+
+  Each EAP-Type, like types/rlm_eap_md5, contains a chunk of code that 
+  knows how to deal with a particular kind of authentication mechanism. 
+
+  To add a new EAP-Type then a new directory should be created as 
+  rlm_eap/types/rlm_eap_XXXX, where XXXX is EAP-Type name 
+  ie for EAP-Type like ONE TIME PASSWORD (OTP) it would be rlm_eap_otp 
+  and for LEAP it would be rlm_eap_leap.
+
+  src/modules/rlm_eap -- contains the basic EAP and generalized interfaces 
+    to all the EAP-Types.
+  rlm_eap/types -- contains all the supported EAP-Types
+  rlm_eap/types/rlm_eap_md5 -- EAP-MD5 authentication.
+  rlm_eap/types/rlm_eap_tls -- EAP-TLS based authentication.
+
+   
+CONFIGURATION
+
+  Add the eap configuration stanza to the modules section in radiusd.conf
+  to load and control rlm_eap and all the supported EAP-Types:
+
+  For example:
+       modules {
+               ...
+               eap {
+                       md5 {
+                       }
+                   ...
+               }
+               ...
+       }
+
+  NOTE: You cannot have empty eap stanza. Atleast one EAP-Type sub-stanza  
+  should be defined as above, otherwise the server will not know what type
+  of eap authentication mechanism to be used and the server will exit 
+  with error.
+
+  All the various options and their associated default values for each
+  EAP-Type are documented in the sample radiusd.conf that is provided 
+  with the distribution.
+
+  NOTE: EAP cannot authorize a user. It can only authenticate.
+  Other Freeradius modules authorize the user and lets EAP to authenticate.
+  
+
+EAP CLIENTS
+
+  1. XSupplicant - freeradius (EAP/TLS) notes may be found at:
 
    http://www.eax.com/802/
    or http://www.missl.cs.umd.edu/wireless/eaptls/
 
    http://www.eax.com/802/
    or http://www.missl.cs.umd.edu/wireless/eaptls/
@@ -11,47 +134,222 @@ HOWTO setup documents to integrate & configure the following
 
    http://www.open1x.org/
 
 
    http://www.open1x.org/
 
-2. XP - freeradius (EAP/TLS) notes may be found at: 
+  2. XP - freeradius (EAP/TLS) notes may be found at: 
 
    http://www.denobula.com/EAPTLS.pdf
 
 
    http://www.denobula.com/EAPTLS.pdf
 
-----------------------------------------------------------------------
-  A summary of how EAP works, as posted to the list by
-John Lindsay <jlindsay@internode.com.au>
 
 
-To make it clear for everyone, the supplicant is the software on the client 
-(machine with the wireless card).
+HOW DO I USE IT (FAQ/Examples)
+
+  1. How can I enable EAP-MD5 authentication ?
+
+  In radiusd.conf
+
+       modules {
+               ...
+               eap {
+                       default_eap_type = md5
+                       md5 {
+                       }
+                   ...
+               }
+               ...
+       }
+       # eap sets the authenticate type as EAP
+       authorize {
+               ...
+               eap
+       }
+
+       # eap authentication takes place.
+       authenticate {
+               eap
+       }
+  
+  2. My Userbase is in LDAP and I want to use EAP-MD5 authentication 
+
+  In radiusd.conf
+
+       modules {
+               ...
+               eap {
+                       default_eap_type = md5
+                       md5 {
+                       }
+                   ...
+               }
+               ...
+       }
+       # ldap gets the Configured password.
+       # eap sets the authenticate type as EAP
+       authorize {
+               ldap
+               eap
+       }
+
+       # eap authentication takes place.
+       authenticate {
+               eap
+       }
+
+  3. How can I Proxy EAP messages, with/without User-Name attribute
+      in the Access-Request packets 
+
+   With User-Name attribute in Access-Request packet,
+   EAP-proxying is just same as RADIUS-proxying.
+
+   If User-Name attribute is not present in Access-Request packet,
+   Freeradius can proxy the request with the following configuration
+   in radiusd.conf
+
+   # eap module should be configured as the First module in 
+   # the authorize stanza
+
+       authorize {
+               eap
+               ...  other modules.
+       }
+
+   With this configuration, eap_authorize creates User-Name attribute
+   from EAP-Identity response, if it is not present.
+   Once User-Name attribute is created, RADIUS proxying takes care
+   of EAP proxying.
+
+  4. How Freeradius can handle EAP-START messages ?
+
+   In most of the cases this is handled by the Authenticator.
+
+   Only if it is required then, in radiusd.conf
+
+       authorize {
+               eap
+               ...  other modules.
+       }
+
+   With the above configuration, RADIUS server immediately responds with
+   EAP-Identity request.
+       
+   NOTE: EAP doesnot check for any Identity or maintains any state in case
+   of EAP-START. It blindly responds with EAP-Identity request.
+   Proxying is handled only after EAP-Identity response is received.
+
+  5. I want to enable multiple EAP-Types, how can I configure ?
+  
+  In radiusd.conf
+
+       modules {
+               ...
+               eap {
+                       default_eap_type = tls
+                       md5 {
+                       }
+                       tls {
+                               ...
+                       }
+                   ...
+               }
+               ...
+       }
+
+   The above configuration will let the server load all the EAP-Types,
+   but the server can have only one default EAP-Type, as above.
+
+   Once EAP-Identity response is received by the server, based on the
+   default_eap_type, the server will send a new request (MD5-Challenge 
+   request incase of md5, TLS-START request incase of tls) to the supplicant.
+   If the supplicant is rfc2284 compliant and doesnot support the
+   EAP-Type sent by the server then it sends EAP-Acknowledge with the
+   supported EAP-Type. If this EAP-Type is supported by the server then it 
+   will send the respective EAP-request.
+  
+   Example: If the supplicant supports only EAP-MD5 but the server
+   default_eap_type is configured as EAP-TLS, as above, then the server
+   will send TLS-START after EAP-Identity is received. Supplicant will
+   respond with EAP-Acknowledge(EAP-MD5). Server now responds with
+   MD5-Challenge.
+
+
+INSTALLATION
+  EAP and EAP-MD5 doesnot require any additional packages.
+  Freeradius contains all the required packages.
+  For EAP-TLS, OPENSSL, <http://www.openssl.org/>, is required to be installed.
+  Any version from 0.9.6b, should fairly work with this module.
+
+
+CAVEATS
+    It probably still has bugs.  Most notably, there is a small memory
+    leak somewhere in the eap_tls code.  I suspect it's because of my 
+    misuse of OPENSSL libraries, but I have no proof yet.
+
+
+IMPLEMENTATION (For Developers)
+
+  The rlm_eap module only deals with EAP specific authentication mechanism
+  and the generic interface to interact with all the EAP-Types. 
+
+  Currently, these are the existing interfaces,
+       int     attach(CONF_SECTION *conf, void **type_arg);
+       int     initiate(void *type_arg, EAP_HANDLER *handler);
+       int     authenticate(void *type_arg, EAP_HANDLER *handler);
+       int     detach(void **type_arg);
+
+  attach() and detach() functions allocate and deallocate all the 
+  required resources.
+
+  initiate() function begins the conversation when EAP-Identity response 
+  is received. Incase of EAP-MD5, initiate() function sends the challenge.
+
+  authenticate() function uses specific EAP-Type authentication mechanism
+  to authenticate the user. During authentication many EAP-Requests and
+  EAP-Responses takes place for each authentication. Hence authenticate()
+  function may be called many times. EAP_HANDLER contains the complete 
+  state information required.
+
+
+HOW EAP WORKS
+  as posted to the list, by John Lindsay <jlindsay@internode.com.au>
+
+  To make it clear for everyone, the supplicant is the software on the
+  client (machine with the wireless card).
+
+  The EAP process doesn't start until the client has associated with
+  the Access Point using Open authentication.  If this process isn't
+  crystal clear you need to go away and gain understanding.
+
+  Once the association is made the AP blocks all traffic that is not
+  802.1x so although associated the connection only has value for EAP.
+  Any EAP traffic is passed to the radius server and any radius traffic
+  is passed back to the client.
 
 
-The EAP process doesn't start until the client has associated with the 
-Access Point using Open authentication.  If this process isn't crystal 
-clear you need to go away and gain understanding.
+  So, after the client has associated to the Access Point, the
+  supplicant starts the process for using EAP over LAN by asking the
+  user for their logon and password.
 
 
-Once the association is made the AP blocks all traffic that is not 802.1x 
-so although associated the connection only has value for EAP.  Any EAP 
-traffic is passed to the radius server and any radius traffic is passed 
-back to the client.
+  Using 802.1x and EAP the supplicant sends the username and a one-way
+  hash of the password to the AP.
 
 
-So, after the client has associated to the Access Point, the supplicant 
-starts the process for using EAP over LAN by asking the user for their 
-logon and password.
+  The AP encapsulates the request and sends it to the RADIUS server.
 
 
-Using 802.1x and EAP the supplicant sends the username and a one-way hash 
-of the password to the AP.
+  The radius server needs a plaintext password so that it can perform
+  the same one-way hash to determine that the password is correct.  If
+  it is, the radius server issues an access challenge which goes back
+  via to the AP to the client. (my study guide says client but my
+  brain says 'supplicant')
 
 
-The AP encapsulates the request and sends it to the RADIUS server.
+  The client sends the EAP response to the challenge via the AP to the
+  RADIUS server.
 
 
-The radius server needs a plaintext password so that it can perform the 
-same one-way hash to determine that the password is correct.  If it is, the 
-radius server issues an access challenge which goes back via to the AP to 
-the client. (my study guide says client but my brain says 'supplicant')
+  If the response is valid the RADIUS server sends a success message
+  and the session WEP key (EAP over wireless) to the client via the
+  AP.  The same session WEP key is also sent to the AP in the success
+  packet.
 
 
-The client sends the EAP response to the challenge via the AP to the RADIUS 
-server.
+  The client and the AP then begin using session WEP keys. The WEP key
+  used for multicasts is then sent from the AP to the client.  It is
+  encrypted using the session WEP key.
 
 
-If the response is valid the RADIUS server sends a success message and the 
-session WEP key (EAP over wireless) to the client via the AP.  The same 
-session WEP key is also sent to the AP in the success packet.
+ACKNOWLEDGEMENTS
+   Primary author - Raghu <raghud@mail.com>
 
 
-The client and the AP then begin using session WEP keys. The WEP key used 
-for multicasts is then sent from the AP to the client.  It is encrypted 
-using the session WEP key.