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