Added StartTLS support.
This is a rebased version and slightly modified version of patch submitted by Matthieu Cerda <matthieu.cerda@gmail.com> via pull-request #29 (https://github.com/nginxinc/nginx-ldap-auth/pull/29)
This commit is contained in:
parent
b732f8c585
commit
7ed1e2dfc9
|
|
@ -86,7 +86,10 @@ For detailed instructions, see [Configuring the Reference Implementation](https:
|
|||
proxy_cache_valid 200 <strong>10m</strong>;
|
||||
|
||||
# URL and port for connecting to the LDAP server
|
||||
proxy_set_header X-Ldap-URL "<strong>ldaps</strong>://<strong>example.com</strong>:<strong>636</strong>";
|
||||
proxy_set_header X-Ldap-URL "<strong>ldap</strong>://<strong>example.com</strong>";
|
||||
|
||||
# Negotiate a TLS-enabled (STARTTLS) connection before sending credentials
|
||||
proxy_set_header X-Ldap-Starttls "true";
|
||||
|
||||
# Base DN
|
||||
proxy_set_header X-Ldap-BaseDN "<strong>cn=Users,dc=test,dc=local</strong>";
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ class LDAPAuthHandler(AuthHandler):
|
|||
# parameter header default
|
||||
'realm': ('X-Ldap-Realm', 'Restricted'),
|
||||
'url': ('X-Ldap-URL', None),
|
||||
'starttls': ('X-Ldap-Starttls', 'false'),
|
||||
'basedn': ('X-Ldap-BaseDN', None),
|
||||
'template': ('X-Ldap-Template', '(cn=%(username)s)'),
|
||||
'binddn': ('X-Ldap-BindDN', ''),
|
||||
|
|
@ -193,6 +194,20 @@ class LDAPAuthHandler(AuthHandler):
|
|||
ctx['action'] = 'initializing LDAP connection'
|
||||
ldap_obj = ldap.initialize(ctx['url']);
|
||||
|
||||
# Python-ldap module documentation advises to always
|
||||
# explicitely set the LDAP version to use after running
|
||||
# initialize() and recommends using LDAPv3. (LDAPv2 is
|
||||
# deprecated since 2003 as per RFC3494)
|
||||
#
|
||||
# Also, the STARTTLS extension requires the
|
||||
# use of LDAPv3 (RFC2830).
|
||||
ldap_obj.protocol_version=ldap.VERSION3
|
||||
|
||||
# Establish a STARTTLS connection if required by the
|
||||
# headers.
|
||||
if ctx['starttls'] == 'true':
|
||||
ldap_obj.start_tls_s()
|
||||
|
||||
# See http://www.python-ldap.org/faq.shtml
|
||||
# uncomment, if required
|
||||
# ldap_obj.set_option(ldap.OPT_REFERRALS, 0)
|
||||
|
|
@ -257,6 +272,9 @@ if __name__ == '__main__':
|
|||
group.add_argument('-u', '--url', metavar="URL",
|
||||
default="ldap://localhost:389",
|
||||
help=("LDAP URI to query (Default: ldap://localhost:389)"))
|
||||
group.add_argument('-s', '--starttls', metavar="starttls",
|
||||
default="false",
|
||||
help=("Establish a STARTTLS protected session (Default: false)"))
|
||||
group.add_argument('-b', metavar="baseDn", dest="basedn", default='',
|
||||
help="LDAP base dn (Default: unset)")
|
||||
group.add_argument('-D', metavar="bindDn", dest="binddn", default='',
|
||||
|
|
@ -279,6 +297,7 @@ if __name__ == '__main__':
|
|||
auth_params = {
|
||||
'realm': ('X-Ldap-Realm', args.realm),
|
||||
'url': ('X-Ldap-URL', args.url),
|
||||
'starttls': ('X-Ldap-Starttls', args.starttls),
|
||||
'basedn': ('X-Ldap-BaseDN', args.basedn),
|
||||
'template': ('X-Ldap-Template', args.filter),
|
||||
'binddn': ('X-Ldap-BindDN', args.binddn),
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ http {
|
|||
proxy_cache_key "$http_authorization$cookie_nginxauth";
|
||||
|
||||
# As implemented in nginx-ldap-auth-daemon.py, the ldap-auth daemon
|
||||
# communicates with an OpenLDAP server, passing in the following
|
||||
# communicates with a LDAP server, passing in the following
|
||||
# parameters to specify which user account to authenticate. To
|
||||
# eliminate the need to modify the Python code, this file contains
|
||||
# 'proxy_set_header' directives that set the values of the
|
||||
|
|
@ -61,17 +61,25 @@ http {
|
|||
#
|
||||
# Parameter Proxy header
|
||||
# ----------- ----------------
|
||||
# url X-Ldap-URL
|
||||
# starttls X-Ldap-Starttls
|
||||
# basedn X-Ldap-BaseDN
|
||||
# binddn X-Ldap-BindDN
|
||||
# bindpasswd X-Ldap-BindPass
|
||||
# cookiename X-CookieName
|
||||
# realm X-Ldap-Realm
|
||||
# template X-Ldap-Template
|
||||
# url X-Ldap-URL
|
||||
|
||||
# (Required) Set the URL and port for connecting to the LDAP server,
|
||||
# by replacing 'example.com' and '636'.
|
||||
proxy_set_header X-Ldap-URL "ldaps://example.com:636";
|
||||
# by replacing 'example.com'.
|
||||
# Do not mix ldaps-style URL and X-Ldap-Starttls as it will not work.
|
||||
proxy_set_header X-Ldap-URL "ldap://example.com";
|
||||
|
||||
# (Optional) Establish a TLS-enabled LDAP session after binding to the
|
||||
# LDAP server.
|
||||
# This is the 'proper' way to establish encrypted TLS connections, see
|
||||
# http://www.openldap.org/faq/data/cache/185.html
|
||||
#proxy_set_header X-Ldap-Starttls "true";
|
||||
|
||||
# (Required) Set the Base DN, by replacing the value enclosed in
|
||||
# double quotes.
|
||||
|
|
|
|||
Loading…
Reference in New Issue