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