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