Home | History | Annotate | Line # | Download | only in admin
      1   1.1.1.5      tron # $OpenLDAP$
      2  1.1.1.11  christos # Copyright 1999-2024 The OpenLDAP Foundation, All Rights Reserved.
      3       1.1     lukem # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
      4       1.1     lukem 
      5       1.1     lukem H1: Using TLS
      6       1.1     lukem 
      7       1.1     lukem OpenLDAP clients and servers are capable of using the
      8       1.1     lukem {{TERM[expand]TLS}} ({{TERM:TLS}}) framework to provide
      9       1.1     lukem integrity and confidentiality protections and to support
     10       1.1     lukem LDAP authentication using the {{TERM:SASL}} {{TERM:EXTERNAL}} mechanism. 
     11       1.1     lukem TLS is defined in {{REF:RFC4346}}.
     12       1.1     lukem 
     13  1.1.1.10  christos Note: For generating certificates, please reference {{URL:http://www.openldap.org/faq/data/cache/185.html}}
     14       1.1     lukem 
     15       1.1     lukem H2: TLS Certificates
     16       1.1     lukem 
     17       1.1     lukem TLS uses {{TERM:X.509}} certificates to carry client and server
     18       1.1     lukem identities.  All servers are required to have valid certificates,
     19       1.1     lukem whereas client certificates are optional.  Clients must have a
     20       1.1     lukem valid certificate in order to authenticate via SASL EXTERNAL.
     21       1.1     lukem For more information on creating and managing certificates,
     22  1.1.1.10  christos see the {{PRD:OpenSSL}} or {{PRD:GnuTLS}} documentation,
     23   1.1.1.5      tron depending on which TLS implementation libraries you are using.
     24       1.1     lukem 
     25       1.1     lukem H3: Server Certificates
     26       1.1     lukem 
     27       1.1     lukem The {{TERM:DN}} of a server certificate must use the {{EX:CN}}
     28       1.1     lukem attribute to name the server, and the {{EX:CN}} must carry the
     29       1.1     lukem server's fully qualified domain name. Additional alias names and
     30       1.1     lukem wildcards may be present in the {{EX:subjectAltName}} certificate
     31       1.1     lukem extension.  More details on server certificate names are in
     32       1.1     lukem {{REF:RFC4513}}.
     33       1.1     lukem 
     34       1.1     lukem H3: Client Certificates
     35       1.1     lukem 
     36       1.1     lukem The DN of a client certificate can be used directly as an
     37       1.1     lukem authentication DN.
     38       1.1     lukem Since X.509 is a part of the {{TERM:X.500}} standard and LDAP
     39       1.1     lukem is also based on X.500, both use the same DN formats and
     40       1.1     lukem generally the DN in a user's X.509 certificate should be
     41       1.1     lukem identical to the DN of their LDAP entry. However, sometimes
     42       1.1     lukem the DNs may not be exactly the same, and so the mapping
     43       1.1     lukem facility described in 
     44       1.1     lukem {{SECT:Mapping Authentication Identities}}
     45       1.1     lukem can be applied to these DNs as well.
     46       1.1     lukem 
     47       1.1     lukem H2: TLS Configuration
     48       1.1     lukem 
     49       1.1     lukem After obtaining the required certificates, a number of options must
     50       1.1     lukem be configured on both the client and the server to enable TLS and
     51       1.1     lukem make use of the certificates.  At a minimum, the clients must be
     52       1.1     lukem configured with the name of the file containing all of the
     53       1.1     lukem {{TERM[expand]CA}} (CA) certificates it will trust. The server must
     54       1.1     lukem be configured with the {{TERM:CA}} certificates and also its own
     55       1.1     lukem server certificate and private key.
     56       1.1     lukem 
     57       1.1     lukem Typically a single CA will have issued the server certificate
     58       1.1     lukem and all of the trusted client certificates, so the server only
     59       1.1     lukem needs to trust that one signing CA. However, a client may wish
     60       1.1     lukem to connect to a variety of secure servers managed by different
     61       1.1     lukem organizations, with server certificates generated by many
     62       1.1     lukem different CAs. As such, a client is likely to need a list of
     63       1.1     lukem many different trusted CAs in its configuration.
     64       1.1     lukem 
     65       1.1     lukem H3: Server Configuration
     66       1.1     lukem 
     67       1.1     lukem The configuration directives for slapd belong in the global directives
     68       1.1     lukem section of {{slapd.conf}}(5). 
     69       1.1     lukem 
     70       1.1     lukem H4: TLSCACertificateFile <filename>
     71       1.1     lukem 
     72       1.1     lukem This directive specifies the {{TERM:PEM}}-format file containing
     73       1.1     lukem certificates for the CA's that slapd will trust. The certificate for
     74       1.1     lukem the CA that signed the server certificate must be included among
     75       1.1     lukem these certificates. If the signing CA was not a top-level (root) CA,
     76       1.1     lukem certificates for the entire sequence of CA's from the signing CA to
     77       1.1     lukem the top-level CA should be present. Multiple certificates are simply
     78       1.1     lukem appended to the file; the order is not significant.
     79       1.1     lukem 
     80       1.1     lukem H4: TLSCACertificatePath <path>
     81       1.1     lukem 
     82       1.1     lukem This directive specifies the path of a directory that contains
     83       1.1     lukem individual {{TERM:CA}} certificates in separate files.  In addition,
     84  1.1.1.10  christos this directory must be specially managed using the OpenSSL {{rehash}}
     85  1.1.1.10  christos command. When using this feature, the OpenSSL library will attempt to
     86       1.1     lukem locate certificate files based on a hash of their name and serial number.
     87  1.1.1.10  christos The OpenSSL {{rehash}} command is used to generate symbolic links with the
     88       1.1     lukem hashed names that point to the actual certificate files. As such,
     89       1.1     lukem this option can only be used with a filesystem that actually supports
     90       1.1     lukem symbolic links. In general, it is simpler to use the
     91       1.1     lukem {{EX:TLSCACertificateFile}} directive instead.
     92       1.1     lukem 
     93       1.1     lukem H4: TLSCertificateFile <filename>
     94       1.1     lukem 
     95       1.1     lukem This directive specifies the file that contains the slapd server
     96       1.1     lukem certificate. Certificates are generally public information and
     97       1.1     lukem require no special protection.
     98       1.1     lukem 
     99       1.1     lukem H4: TLSCertificateKeyFile <filename>
    100       1.1     lukem 
    101       1.1     lukem This directive specifies the file that contains the private key
    102       1.1     lukem that matches the certificate stored in the {{EX:TLSCertificateFile}}
    103       1.1     lukem file. Private keys themselves are sensitive data and are usually
    104       1.1     lukem password encrypted for protection. However, the current implementation
    105       1.1     lukem doesn't support encrypted keys so the key must not be encrypted
    106       1.1     lukem and the file itself must be protected carefully.
    107       1.1     lukem 
    108       1.1     lukem H4: TLSCipherSuite <cipher-suite-spec>
    109       1.1     lukem 
    110       1.1     lukem This directive configures what ciphers will be accepted and the
    111       1.1     lukem preference order. {{EX:<cipher-suite-spec>}} should be a cipher
    112       1.1     lukem specification for OpenSSL. You can use the command
    113       1.1     lukem 
    114       1.1     lukem >	openssl ciphers -v ALL
    115       1.1     lukem 
    116       1.1     lukem to obtain a verbose list of available cipher specifications.
    117   1.1.1.2     lukem 
    118       1.1     lukem Besides the individual cipher names, the specifiers {{EX:HIGH}},
    119       1.1     lukem {{EX:MEDIUM}}, {{EX:LOW}}, {{EX:EXPORT}}, and {{EX:EXPORT40}}
    120       1.1     lukem may be helpful, along with {{EX:TLSv1}}, {{EX:SSLv3}},
    121       1.1     lukem and {{EX:SSLv2}}.
    122       1.1     lukem 
    123   1.1.1.5      tron To obtain the list of ciphers in GnuTLS use:
    124   1.1.1.5      tron 
    125   1.1.1.5      tron >	gnutls-cli -l
    126   1.1.1.5      tron 
    127       1.1     lukem H4: TLSRandFile <filename>
    128       1.1     lukem 
    129       1.1     lukem This directive specifies the file to obtain random bits from when
    130       1.1     lukem {{FILE:/dev/urandom}} is not available. If the system provides
    131       1.1     lukem {{FILE:/dev/urandom}} then this option is not needed, otherwise a
    132       1.1     lukem source of random data must be configured.  Some systems (e.g. Linux)
    133       1.1     lukem provide {{FILE:/dev/urandom}} by default, while others (e.g. Solaris)
    134       1.1     lukem require the installation of a patch to provide it, and others may
    135       1.1     lukem not support it at all. In the latter case, EGD or PRNGD should be
    136       1.1     lukem installed, and this directive should specify the name of the EGD/PRNGD
    137       1.1     lukem socket. The environment variable {{EX:RANDFILE}} can also be used
    138       1.1     lukem to specify the filename. Also, in the absence of these options, the
    139       1.1     lukem {{EX:.rnd}} file in the slapd user's home directory may be used if
    140       1.1     lukem it exists. To use the {{EX:.rnd}} file, just create the file and
    141       1.1     lukem copy a few hundred bytes of arbitrary data into the file. The file
    142       1.1     lukem is only used to provide a seed for the pseudo-random number generator,
    143       1.1     lukem and it doesn't need very much data to work.
    144       1.1     lukem 
    145  1.1.1.10  christos This directive is ignored with GnuTLS.
    146   1.1.1.5      tron 
    147   1.1.1.7  christos H4: TLSDHParamFile <filename>
    148       1.1     lukem 
    149       1.1     lukem This directive specifies the file that contains parameters for
    150       1.1     lukem Diffie-Hellman ephemeral key exchange.  This is required in order
    151   1.1.1.7  christos to use DHE-based cipher suites, including all DSA-based suites (i.e.
    152   1.1.1.7  christos {{EX:TLSCertificateKeyFile}} points to a DSA key), and RSA when the 'key
    153   1.1.1.7  christos encipherment' key usage is not specified in the certificate.  Parameters can be
    154   1.1.1.7  christos generated using the following command
    155       1.1     lukem 
    156       1.1     lukem >	openssl dhparam [-dsaparam] -out <filename> <numbits>
    157   1.1.1.7  christos or
    158   1.1.1.7  christos >	certtool --generate-dh-params --bits <numbits> --outfile <filename>
    159       1.1     lukem 
    160   1.1.1.8  christos H4: TLSECName <name>
    161   1.1.1.8  christos 
    162   1.1.1.8  christos This directive specifies the curve to use for Elliptic Curve
    163  1.1.1.11  christos Diffie-Hellman ephemeral key exchange.  This option is only needed
    164   1.1.1.8  christos to use ECDHE-based cipher suites in OpenSSL.  The names of supported
    165   1.1.1.8  christos curves may be shown using the following command
    166   1.1.1.8  christos 
    167   1.1.1.8  christos >	openssl ecparam -list_curves
    168   1.1.1.8  christos 
    169  1.1.1.11  christos See the OpenSSL documentation for details.
    170  1.1.1.10  christos This directive is not used for GnuTLS.
    171   1.1.1.8  christos For GnuTLS the curves may be specified in the ciphersuite.
    172   1.1.1.8  christos 
    173       1.1     lukem H4: TLSVerifyClient { never | allow | try | demand }
    174       1.1     lukem 
    175       1.1     lukem This directive specifies what checks to perform on client certificates
    176       1.1     lukem in an incoming TLS session, if any. This option is set to {{EX:never}}
    177       1.1     lukem by default, in which case the server never asks the client for a
    178       1.1     lukem certificate. With a setting of {{EX:allow}} the server will ask
    179       1.1     lukem for a client certificate; if none is provided the session proceeds
    180       1.1     lukem normally. If a certificate is provided but the server is unable to
    181       1.1     lukem verify it, the certificate is ignored and the session proceeds
    182       1.1     lukem normally, as if no certificate had been provided. With a setting of
    183       1.1     lukem {{EX:try}} the certificate is requested, and if none is provided,
    184       1.1     lukem the session proceeds normally. If a certificate is provided and it
    185       1.1     lukem cannot be verified, the session is immediately terminated. With a
    186       1.1     lukem setting of {{EX:demand}} the certificate is requested and a valid
    187       1.1     lukem certificate must be provided, otherwise the session is immediately
    188       1.1     lukem terminated.
    189       1.1     lukem 
    190       1.1     lukem Note: The server must request a client certificate in order to
    191       1.1     lukem use the SASL EXTERNAL authentication mechanism with a TLS session.
    192       1.1     lukem As such, a non-default {{EX:TLSVerifyClient}} setting must be configured
    193       1.1     lukem before SASL EXTERNAL authentication may be attempted, and the
    194       1.1     lukem SASL EXTERNAL mechanism will only be offered to the client if a valid
    195       1.1     lukem client certificate was received.
    196       1.1     lukem 
    197       1.1     lukem H3: Client Configuration
    198       1.1     lukem 
    199       1.1     lukem Most of the client configuration directives parallel the server
    200       1.1     lukem directives. The names of the directives are different, and they go
    201       1.1     lukem into {{ldap.conf}}(5) instead of {{slapd.conf}}(5), but their
    202       1.1     lukem functionality is mostly the same. Also, while most of these options may
    203       1.1     lukem be configured on a system-wide basis, they may all be overridden by
    204       1.1     lukem individual users in their {{.ldaprc}} files.
    205       1.1     lukem 
    206       1.1     lukem The LDAP Start TLS operation is used in LDAP to initiate TLS
    207       1.1     lukem negotiation.  All OpenLDAP command line tools support a {{EX:-Z}}
    208       1.1     lukem and {{EX:-ZZ}} flag to indicate whether a Start TLS operation is to
    209       1.1     lukem be issued.  The latter flag indicates that the tool is to cease
    210       1.1     lukem processing if TLS cannot be started while the former allows the
    211       1.1     lukem command to continue.
    212       1.1     lukem 
    213       1.1     lukem In LDAPv2 environments, TLS is normally started using the LDAP
    214       1.1     lukem Secure URI scheme ({{EX:ldaps://}}) instead of the normal LDAP URI
    215       1.1     lukem scheme ({{EX:ldap://}}).  OpenLDAP command line tools allow either
    216       1.1     lukem scheme to used with the {{EX:-H}} flag and with the {{EX:URI}}
    217       1.1     lukem {{ldap.conf}}(5) option.
    218       1.1     lukem 
    219       1.1     lukem 
    220       1.1     lukem H4: TLS_CACERT <filename>
    221       1.1     lukem 
    222       1.1     lukem This is equivalent to the server's {{EX:TLSCACertificateFile}} option. As
    223       1.1     lukem noted in the {{SECT:TLS Configuration}} section, a client typically
    224       1.1     lukem may need to know about more CAs than a server, but otherwise the
    225       1.1     lukem same considerations apply.
    226       1.1     lukem 
    227       1.1     lukem H4: TLS_CACERTDIR <path>
    228       1.1     lukem 
    229       1.1     lukem This is equivalent to the server's {{EX:TLSCACertificatePath}} option. The
    230  1.1.1.10  christos specified directory must be managed with the OpenSSL {{rehash}}
    231  1.1.1.10  christos command as well.
    232       1.1     lukem 
    233       1.1     lukem H4: TLS_CERT <filename>
    234       1.1     lukem 
    235       1.1     lukem This directive specifies the file that contains the client certificate.
    236       1.1     lukem This is a user-only directive and can only be specified in a user's
    237       1.1     lukem {{.ldaprc}} file.
    238       1.1     lukem 
    239       1.1     lukem H4: TLS_KEY <filename>
    240       1.1     lukem 
    241       1.1     lukem This directive specifies the file that contains the private key
    242       1.1     lukem that matches the certificate stored in the {{EX:TLS_CERT}}
    243       1.1     lukem file. The same constraints mentioned for {{EX:TLSCertificateKeyFile}}
    244       1.1     lukem apply here. This is also a user-only directive.
    245       1.1     lukem 
    246       1.1     lukem H4: TLS_RANDFILE <filename>
    247       1.1     lukem 
    248       1.1     lukem This directive is the same as the server's {{EX:TLSRandFile}}
    249       1.1     lukem option.
    250       1.1     lukem 
    251       1.1     lukem H4: TLS_REQCERT { never | allow | try | demand }
    252       1.1     lukem 
    253       1.1     lukem This directive is equivalent to the server's {{EX:TLSVerifyClient}}
    254       1.1     lukem option. However, for clients the default value is {{EX:demand}}
    255       1.1     lukem and there generally is no good reason to change this setting.
    256       1.1     lukem 
    257