On 10/14/2011 10:43 PM, subcon wrote:
I've searched for this sort of posting, but found issues unrelated that
responded to my search string, so I decided to post it here.

OK, currently I have Radius authenticating LDAP users via PAP.  Works great.

Imagine I want to store x509 certificate data (specifically a client
certificate) in an attribute in LDAP (perhaps as a binary attribute, etc).

I would like FreeRADIUS, should it be passed a client certificate INSTEAD of
a user/pass, to take the DN of the cert and match it to some attribute which
contains said DN and cert-data.

Ok. It's been a while since I looked at this, but IIRC there is some special search/attribute syntax support in (some) LDAP servers for X.509 certs in the DIT.


The ultimate goal of all of this is to allow the continued use of LDAP and
store the certificates (to be compared against) in the tree and not on some
filesystem basis.

Note that I want FreeRADIUS to continue supporting PAP user/pass auth, but
only as a secondary fall-back (e.g: customer doesn't have client cert
installed on machine, but has a user and password).

Is this possible? Does this make sense to you? Let me know if I need to
re-explain anything.

I think it should be possible.

First, ensure you're running the most recent version of FreeRADIUS. When you've done that, you will have two options:

1. You can examing the "TLS-Client-Cert-Subject" variable in a FreeRADIUS unlang policy, and possibly use this to query your LDAP server via LDAP xlat. For example:

 authorize {
    ...
    eap
    if (TLS-Client-Cert-Subject) {
      # we've done enough EAP-TLS to know the client cert
      update request {
Tmp-String-0 := "%{ldap:ldap:///basedn?cn?sub?certsubject=%{TLS-Client-Cert-Subject}}";
      }
      if (Tmp-String-0) {
        # cert was found in LDAP
        ok
      }
      else {
        reject
      }
    }
  ]

However, I'm not certain the TLS-* attributes (see sites-available/default in a recent version of the server) are available in the authorize section - I have a feeling they are only present in post-auth, by which time it's too late to reject them, so...

2. Use the "verify" config of the "tls" module under "eap", and use an external script to perform the check against LDAP. For example:

  eap {
    tls {
      verify {
        client = "/path/to/script %{TLS-Client-Cert-Filename}"
      }
    }
  }

...then your script can use the (temporary) file given in the 1st argument to query against LDAP.

Hope this helps.

Cheers,
Phil


Thank you,

subcon

--
View this message in context: 
http://freeradius.1045715.n5.nabble.com/FreeRADIUS-EAP-TLS-Lookup-Client-Cert-From-LDAP-DIT-tp4904006p4904006.html
Sent from the FreeRadius - User mailing list archive at Nabble.com.
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html


-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to