I'm attempting to setup PEAPv0/EAP-TLS which uses EAP-TLS as the inner authentication method within PEAP. Unlike EAP-TLS, PEAPv0/EAP-TLS sends the client certificate within the secure SSL tunnel, thus protecting the user's identity. While RFC-5216 suggests that EAP-TLS can optionally support a privacy mode in which the client certificate is pushed through the SSL tunnel, I've not found any way to enable this option. I have no particual interest in using PEAPv0/EAP-TLS other than the fact that I know it does what I want to accomplish. I would be perfectly happy to use EAP-TLS in Privacy mode, or PEAPv0/MSCHAPv2 with a required client certificate. However, both these modes pass the client certificate in the clear.<br>
<br>Here's what my testing has shown:<br><br>EAP-TLS: Works with both Windows XP Supplicant and Juniper Odyssey Access Client 4.8<br>PEAPv0/EAP-MSCHAPv2- Works with both Windows XP Supplicant and Juniper Odyssey Access Client 4.8<br>
PEAPv0/EAP-MSCHAPv2 + Requierd Client Certificate- Works with Juniper Odyssey Access Client 4.8 (XP Supplicant doesn't support MSCHAPv2 + Certificate) <br> PEAPv0/EAP-TLS- Fails on both supplicants<br><br>I don't think my TLS settings are improper, as both EAP-TLS and PEAPv0/MS-CHAPv2 + Client Certifciate work fine. The debug logs shows the client certificate verified properly. <br>
<br>I've tried pretty much every combination of PEAP options, and after each permutation I forced a reauthentication so that I could analyze the packets in Wireshark. No combination of settings forced the client certificate through the SSL tunnel. I thought "        use_tunneled_reply = yes" might help, but it did not. <br>
<br>I have pasted the relevant configuration settings below as well as a full log of the failure when I attempt to use PEAPv0/EAP-TLS.<br>The relevant settings: Other than "default_eap_type = "tls" my settings are identical for PEAPv0/EAP-MSCHAPv2 which works fine.<br>
<br>The failure log seems to suggest that "tls" is not a supported authentication mode within PEAP.<br><br>[files] users: Matched entry DEFAULT at line 200<br>++[files] returns ok<br>++[expiration] returns noop<br>
++[logintime] returns noop<br>[pap] Found existing Auth-Type, not changing it.<br>++[pap] returns noop<br>Found Auth-Type = EAP<br>+- entering group authenticate {...}<br><b>rlm_eap: No EAP session matching the State variable.</b><br>
<b>[eap] Either EAP-request timed out OR EAP-response to an unknown EAP-request</b><br>[eap] Failed in handler<br>++[eap] returns invalid<br>Failed to authenticate the user.<br>Login incorrect: [Jason Wittlin-Cohen] (from client Wireless port 0 via TLS tunnel)<br>
} # server inner-tunnel<br>[peap] Got tunneled reply code 3<br>[peap] Got tunneled reply RADIUS code 3<br>[peap] Tunneled authentication was rejected.<br>[peap] FAILURE<br><br><b>PEAPv0/EAP-TLS Failure Log: </b><a href="http://pastebin.com/m900e269">http://pastebin.com/m900e269</a><br>
<b>PEAPv0/MSCHAPv2 Success Log:</b> <a href="http://pastebin.com/m16114697">http://pastebin.com/m16114697</a><br><b>PEAPv.0/MSCHAPv2+Cert Success Log: </b><a href="http://pastebin.com/m429d9c12">http://pastebin.com/m429d9c12</a><br>
<b>EAP-TLS Success Log:</b> <a href="http://pastebin.com/m2b1c62f4">http://pastebin.com/m2b1c62f4</a><br><br>Relevant Settings:<br><br> eap {<br><br>        default_eap_type = "peap"<br>        timer_expire = 60<br>
        ignore_unknown_eap_types = no<br>        cisco_accounting_username_bug = no<br>        max_sessions = 2048<br>  }<br> Module: Linked to sub-module rlm_eap_tls<br> Module: Instantiating eap-tls<br>   tls {<br>        rsa_key_exchange = no<br>
        dh_key_exchange = yes<br>        rsa_key_length = 512<br>        dh_key_length = 3072<br>        verify_depth = 0<br>        pem_file_type = yes<br>        private_key_file = "/etc/freeradius/certs/server_key.pem"<br>
        certificate_file = "/etc/freeradius/certs/server_cert.pem"<br>        CA_file = "/etc/freeradius/certs/cacert.pem"<br>        dh_file = "/etc/freeradius/certs/dh3072.pem"<br>        random_file = "/etc/freeradius/certs/random"<br>
        fragment_size = 1024<br>        include_length = yes<br>        check_crl = no<br>        cipher_list = "HIGH"<br>        make_cert_command = "/etc/freeradius/certs/bootstrap"<br>    cache {<br>
        enable = no<br><br>  peap {<br>        default_eap_type = "tls"<br>        copy_request_to_tunnel = no<br>        use_tunneled_reply = yes<br>        proxy_tunneled_request_as_eap = no<br>        virtual_server = "inner-tunnel"<br>
   }<br><br> Module: Linked to sub-module rlm_eap_mschapv2<br> Module: Instantiating eap-mschapv2<br>   mschapv2 {<br>        with_ntdomain_hack = no<br><br>modules mschap:<br><br> Module: Instantiating mschap<br>  mschap {<br>
        use_mppe = yes<br>        require_encryption = yes<br>        require_strong = yes<br>        with_ntdomain_hack = no<br>  }<br><br>Users:<br><br>"DEFAULT" Cleartext-Password := "**************************************", EAP-TLS-Require-Client-Cert := Yes <br>
<br>Note: (*'s represent a 32 character randomly generated password)<br><br>Thanks in advance,<br><br>Jason<br><br>-- <br>Jason Wittlin-Cohen<br>Yale Law School, Class of 2010<br><a href="mailto:jason.wittlin-cohen@yale.edu">jason.wittlin-cohen@yale.edu</a><br>
<br>