xref: /netbsd-src/external/ibm-public/postfix/dist/proto/FORWARD_SECRECY_README.html (revision 059c16a85b0b39d60ad6d18f53c09510815afa2b)
1<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
2        "http://www.w3.org/TR/html4/loose.dtd">
3
4<html>
5
6<head>
7
8<title>TLS Forward Secrecy in Postfix</title>
9
10<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
11<link rel='stylesheet' type='text/css' href='postfix-doc.css'>
12
13</head>
14
15<body>
16
17<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">
18TLS Forward Secrecy in Postfix
19</h1>
20
21<hr>
22
23<h2> Warning </h2>
24
25<p> Forward secrecy does not protect against active attacks such
26as forged DNS replies or forged TLS server certificates. If such
27attacks are a concern, then the SMTP client will need to authenticate
28the remote SMTP server in a sufficiently-secure manner.  For example,
29by the fingerprint of a (CA or leaf) public key or certificate.
30Conventional PKI relies on many trusted parties and is easily
31subverted by a state-funded adversary.  </p>
32
33<h2> Overview </h2>
34
35<p> Postfix supports forward secrecy of TLS network communication
36since version 2.2. This support was adopted from Lutz J&auml;nicke's
37"Postfix TLS patch" for earlier Postfix versions.  This document
38will focus on TLS Forward Secrecy in the Postfix SMTP client and
39server.  See <a href="TLS_README.html">TLS_README</a> for a general
40description of Postfix TLS support. </p>
41
42<p> Topics covered in this document: </p>
43
44<ul>
45
46<li> <p> Give me some background on forward secrecy in Postfix </p>
47
48<ul>
49
50<li><a href="#dfn_fs">What is Forward Secrecy</a>
51
52<li><a href="#tls_fs">Forward Secrecy in TLS</a>
53
54<li><a href="#server_fs">Forward Secrecy in the Postfix SMTP Server</a>
55
56<li><a href="#client_fs">Forward Secrecy in the Postfix SMTP Client</a>
57
58</ul>
59
60<li> <p> Never mind, just show me what it takes to get forward
61secrecy </p>
62
63<ul>
64
65<li><a href="#quick-start">Getting started, quick and dirty</a>
66
67<li><a href="#test">How can I see that a connection has forward secrecy?</a>
68
69<li><a href="#ciphers"> What ciphers provide forward secrecy? </a>
70
71<li><a href="#status"> What do "Anonymous", "Untrusted", etc. in
72Postfix logging mean? </a>
73
74</ul>
75
76<li> <p> <a href="#credits"> Credits </a> </p>
77
78</ul>
79
80<h2><a name="dfn_fs">What is Forward Secrecy</a></h2>
81
82<p> The term "Forward Secrecy" (or sometimes "Perfect Forward Secrecy")
83is used to describe security protocols in which the confidentiality
84of past traffic is not compromised when long-term keys used by either
85or both sides are later disclosed.  </p>
86
87<p> Forward secrecy is accomplished by negotiating session keys
88using per-session cryptographically-strong random numbers that are
89not saved, and signing the exchange with long-term authentication
90keys.  Later disclosure of the long-term keys allows impersonation
91of the key holder from that point on, but not recovery of prior
92traffic, since with forward secrecy, the discarded random key
93agreement inputs are not available to the attacker. </p>
94
95<p> Forward secrecy is only "perfect" when brute-force attacks on
96the key agreement algorithm are impractical even for the best-funded
97adversary and the random-number generators used by both parties are
98sufficiently strong.  Otherwise, forward secrecy leaves the attacker
99with the challenge of cracking the key-agreement protocol, which
100is likely quite computationally intensive, but may be feasible for
101sessions of sufficiently high value.  Thus forward secrecy places
102cost constraints on the efficacy of bulk surveillance, recovering
103all past traffic is generally infeasible, and even recovery of
104individual sessions may be infeasible given a sufficiently-strong
105key agreement method. </p>
106
107<h2><a name="tls_fs">Forward Secrecy in TLS</a></h2>
108
109<p> Early implementations of the SSL protocol do not provide forward
110secrecy (some provide it only with artificially-weakened "export"
111cipher suites, but we will ignore those here). The client
112sends a random "pre-master secret" to the server encrypted with the
113server's RSA public key.  The server decrypts this with its private
114key, and uses it together with other data exchanged in the clear
115to generate the session key.  An attacker with access to the server's
116private key can perform the same computation at any later time.  </p>
117
118<p> Later revisions to the TLS protocol introduced forward-secrecy
119cipher suites in which the client and server implement a key exchange
120protocol based on ephemeral secrets.  Sessions encrypted with one
121of these newer cipher suites are not compromised by future disclosure
122of long-term authentication keys. </p>
123
124<p> The key-exchange algorithms used for forward secrecy require
125the TLS server to designate appropriate "parameters" consisting of a
126mathematical "group" and an element of that group called a "generator".
127Presently, there are two flavors of "groups" that work with PFS: </p>
128
129<ul>
130
131<li> <p> <b>FFDHE:</b> Finite-field Diffie-Hellman ephemeral key
132exchange groups (also EDH or DHE).  The server needs to be configured
133with a suitably-large prime and a corresponding "generator".  Standard
134choices of the prime and generator are specified in RFC7919, and can be
135used in the TLS 1.3 protocol with the server and client negotiating a
136mutually supported choice.  In earlier versions of TLS (1.0 through
1371.2), when FFDHE key exchange is performed, the server chooses the prime
138and generator unilaterally.  </p>
139
140<li> <p> <b>EECDH:</b> This is short for Ephemeral Elliptic Curve
141Diffie-Hellman (also abbreviated as ECDHE).  EECDH offers better
142security at lower computational cost than FFDHE.  Elliptic curves used
143in cryptography are typically identified by a "name" that stands for a
144set of well-known parameter values, and it is these "named curves" (or,
145in certificates, associated ASN.1 object identifiers) that are used in
146the TLS protocol.  When EECDH key exchange is used, a mutually supported
147named curve is negotiated as part of the TLS handshake. </p>
148
149</ul>
150
151<h2><a name="server_fs">Forward Secrecy in the Postfix SMTP Server</a></h2>
152
153<p> The Postfix &ge; 2.2 SMTP server supports forward secrecy in
154its default configuration.  If the remote SMTP client prefers cipher
155suites with forward secrecy, then the traffic between the server
156and client will resist decryption even if the server's long-term
157authentication keys are <i>later</i> compromised. </p>
158
159<p> Most remote SMTP clients now support forward secrecy (the only
160choice as of TLS 1.3), but some may prefer cipher suites <i>without</i>
161forward secrecy.  Postfix &ge; 2.8 servers can be configured to override
162the client's preference by setting "tls_preempt_cipherlist = yes". </p>
163
164<h3> FFDHE Server support </h3>
165
166<p> Postfix &ge; 3.1 supports 2048-bit-prime FFDHE out of the box, with
167no additional configuration.  You can also generate your own FFDHE
168parameters, but this is not necessary and no longer recommended.  See
169the <a href="#quick-start">quick-start</a> section for details.  </p>
170
171<p> Postfix &ge; 3.8 supports the finite-field Diffie-Hellman ephemeral
172(FFDHE) key exchange group negotiation API of OpenSSL &ge; 3.0.  FFDHE
173groups are explicitly negotiated between client and server starting with
174TLS 1.3.  In earlier TLS versions, the server chooses the group
175unilaterally.  The list of candidate FFDHE groups can be configured via
176"tls_ffdhe_auto_groups", which can be used to select a prioritized list
177of supported groups (most preferred first) on both the server and
178client.  The default list is suitable for most users.  Either, but not
179both of "tls_eecdh_auto_curves" and "tls_ffdhe_auto_groups" may be set
180empty, disabling either EC or FFDHE key exchange in OpenSSL 3.0 with TLS
1811.3.  That said, interoperability will be poor if the EC curves are
182all disabled or don't include the most widely used curves. </p>
183
184<h3> EECDH Server support </h3>
185
186<p> As of Postfix 3.2 and OpenSSL 1.0.2, a range of supported EECDH
187curves is enabled in the server and client, and a suitable mutually
188supported curve is negotiated as part of the TLS handshake.  The list of
189supported curves is configurable via the "tls_eecdh_auto_curves"
190parameter.  With TLS 1.2 the server needs to leave its setting of
191"smtpd_tls_eecdh_grade" at the default value of "auto" (earlier choices
192of an explicit single curve grade are deprecated).  With TLS 1.3, the
193"smtpd_tls_eecdh_grade" parameter is not used, and curve selection is
194unconditionally negotiated. </p>
195
196<h2> <a name="client_fs">Forward Secrecy in the Postfix SMTP Client</a> </h2>
197
198<p> The Postfix &ge; 2.2 SMTP client supports forward secrecy in its
199default configuration.  All supported OpenSSL releases support both
200FFDHE and EECDH key exchange.  If the remote SMTP server supports cipher
201suites with forward secrecy (and does not override the SMTP client's
202cipher preference), then the traffic between the server and client will
203resist decryption even if the server's long-term authentication keys are
204<i>later</i> compromised.  Forward secrecy is always on in TLS 1.3. </p>
205
206<p> Postfix &ge; 3.2 supports the curve negotiation API of OpenSSL
207&ge; 1.0.2.  The list of candidate curves can be changed via the
208"tls_eecdh_auto_curves" configuration parameter, which can be used
209to select a prioritized list of supported curves (most preferred
210first) on both the Postfix SMTP server and SMTP client.  The default
211list is suitable for most users. </p>
212
213<p> Postfix &ge; 3.8 supports the finite-field Diffie-Hellman ephemeral
214(FFDHE) key exchange group negotiation API of OpenSSL &ge; 3.0.
215The list of candidate FFDHE groups can be configured via
216"tls_ffdhe_auto_groups", which can be used to select a prioritized list
217of supported groups (most preferred first) on both the server and
218client.  The default list is suitable for most users.  </p>
219
220<p> The default Postfix SMTP client cipher lists are correctly ordered
221to prefer EECDH and FFDHE cipher suites ahead of similar cipher suites
222that don't implement forward secrecy.  Administrators are strongly
223discouraged from changing the cipher list definitions. </p>
224
225<h2><a name="quick-start">Getting started, quick and dirty</a></h2>
226
227<h3> EECDH Client support (Postfix &ge; 3.2 with OpenSSL &ge; 1.1.1) </h3>
228
229<p> This works "out of the box" with no need for additional
230configuration. </p>
231
232<p> Postfix &ge; 3.2 supports the curve negotiation API of OpenSSL
233&ge; 1.0.2.  The list of candidate curves can be changed via the
234"tls_eecdh_auto_curves" configuration parameter, which can be used
235to select a prioritized list of supported curves (most preferred
236first) on both the Postfix SMTP server and SMTP client.  The default
237list is suitable for most users. </p>
238
239<h3> EECDH Server support (Postfix &ge; 3.2 with OpenSSL &ge; 1.1.1) </h3>
240
241<p> This works "out of the box" with no need for additional
242configuration. </p>
243
244<p> Postfix &ge; 3.2 supports the curve negotiation API of OpenSSL
245&ge; 1.0.2.  The list of candidate curves can be changed via the
246"tls_eecdh_auto_curves" configuration parameter, which can be used
247to select a prioritized list of supported curves (most preferred
248first) on both the Postfix SMTP server and SMTP client.  The default
249list is suitable for most users. </p>
250
251<h3> FFDHE Client support (Postfix &ge; 3.2, OpenSSL &ge; 1.1.1) </h3>
252
253<p> In Postfix &lt; 3.8, or OpenSSL prior to 3.0, FFDHE for TLS 1.2 or
254below works "out of the box", no additional configuration is necessary.
255The most one can do is (not advisable) disable all "kDHE" ciphers, which
256would then disable FFDHE key exchange in TLS 1.2 and below. </p>
257
258<p> With OpenSSL 1.1.1, FFDHE is not supported for TLS 1.3, which uses
259only EECDH key exchange.  Support for FFDHE with TLS 1.3 was added in
260OpenSSL 3.0.  With OpenSSL 3.0 and Postfix 3.8 the list of supported TLS
2611.3 FFDHE groups becomes configurable via the "tls_ffdhe_auto_groups"
262parameter, which can be set empty to disable FFDHE in TLS 1.3, or
263conversely expanded to support more groups.  The default should work
264well for most users. </p>
265
266<h3> FFDHE Server support (Postfix &ge; 2.2, all supported OpenSSL
267versions) </h3>
268
269<p> In Postfix &lt; 3.8, or OpenSSL prior to 3.0, FFDHE for TLS 1.2 or
270below works "out of the box", no additional configuration is necessary.
271One can of course (not advisable) disable all "kDHE" ciphers, which
272would then disable FFDHE key exchange in TLS 1.2 and below. </p>
273
274<p> The built-in default Postfix FFDHE group is a 2048-bit group as of
275Postfix 3.1.  You can optionally generate non-default Postfix SMTP
276server FFDHE parameters for possibly improved security against
277pre-computation attacks, but this is not necessary or recommended.  Just
278leave "smtpd_tls_dh1024_param_file" at its default empty value. </p>
279
280<p> The set of FFDHE groups enabled for use with TLS 1.3 becomes
281configurable with Postfix &ge; 3.8 and OpenSSL &ge; 3.0.  The default
282setting of "tls_ffdhe_auto_groups" enables the RFC7919 2048 and 3072-bit
283groups.  If you need more security, you should probably be using EECDH.
284</p>
285
286<h2><a name="test">How can I see that a connection has forward
287secrecy? </a> </h2>
288
289<p> Postfix can be configured to report information about the
290negotiated cipher, the corresponding key lengths, and the remote
291peer certificate or public-key verification status.  </p>
292
293<ul>
294
295<li> <p> With "smtp_tls_loglevel = 1" and "smtpd_tls_loglevel = 1",
296the Postfix SMTP client and server will log TLS connection information
297to the maillog file. The general logfile format is shown below.
298With TLS 1.3 there may be additional properties logged after the
299cipher name and bits. </p>
300
301<blockquote>
302<pre>
303postfix/smtp[<i>process-id</i>]: Untrusted TLS connection established
304to host.example.com[192.168.0.2]:25: TLSv1 with cipher <i>cipher-name</i>
305(<i>actual-key-size</i>/<i>raw-key-size</i> bits)
306
307postfix/smtpd[<i>process-id</i>]: Anonymous TLS connection established
308from host.example.com[192.168.0.2]: TLSv1 with cipher <i>cipher-name</i>
309(<i>actual-key-size</i>/<i>raw-key-size</i> bits)
310</pre>
311</blockquote>
312
313<li> <p> With "smtpd_tls_received_header = yes", the Postfix SMTP
314server will record TLS connection information in the Received:
315header in the form of comments (text inside parentheses). The general
316format depends on the smtpd_tls_ask_ccert setting. With TLS 1.3 there
317may be additional properties logged after the cipher name and bits. </p>
318
319<blockquote>
320<pre>
321Received: from host.example.com (host.example.com [192.168.0.2])
322	(using TLSv1 with cipher <i>cipher-name</i>
323	(<i>actual-key-size</i>/<i>raw-key-size</i> bits))
324        (Client CN "host.example.com", Issuer "John Doe" (not verified))
325
326Received: from host.example.com (host.example.com [192.168.0.2])
327	(using TLSv1 with cipher <i>cipher-name</i>
328	(<i>actual-key-size</i>/<i>raw-key-size</i> bits))
329        (No client certificate requested)
330</pre>
331</blockquote>
332
333<p> TLS 1.3 examples.  Some of the new attributes may not appear when not
334applicable or not available in older versions of the OpenSSL library.  </p>
335
336<blockquote>
337<pre>
338Received: from localhost (localhost [127.0.0.1])
339        (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
340         key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
341        (No client certificate requested)
342
343Received: from localhost (localhost [127.0.0.1])
344        (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
345         key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
346         client-signature ECDSA (P-256) client-digest SHA256)
347        (Client CN "example.org", Issuer "example.org" (not verified))
348</pre>
349</blockquote>
350
351<ul>
352<li> <p> The "key-exchange" attribute records the type of "Diffie-Hellman"
353group used for key agreement.  Possible values include "DHE", "ECDHE", "X25519"
354and "X448".  With "DHE", the bit size of the prime will be reported in
355parentheses after the algorithm name, with "ECDHE", the curve name. </p>
356
357<li> <p> The "server-signature" attribute shows the public key signature
358algorithm used by the server.  With "RSA-PSS", the bit size of the modulus will
359be reported in parentheses.  With "ECDSA", the curve name.  If, for example,
360the server has both an RSA and an ECDSA private key and certificate, it will be
361possible to track which one was used for a given connection. </p>
362
363<li> <p> The new "server-digest" attribute records the digest algorithm used by
364the server to prepare handshake messages for signing.  The Ed25519 and Ed448
365signature algorithms do not make use of such a digest, so no "server-digest"
366will be shown for these signature algorithms. </p>
367
368<li> <p> When a client certificate is requested with "smtpd_tls_ask_ccert" and
369the client uses a TLS client-certificate, the "client-signature" and
370"client-digest" attributes will record the corresponding properties of the
371client's TLS handshake signature.  </p> </ul>
372
373</ul>
374
375<p> The next sections will explain what <i>cipher-name</i>,
376<i>key-size</i>, and peer verification status information to expect.
377</p>
378
379<h2><a name="ciphers"> What ciphers provide forward secrecy? </a> </h2>
380
381<p> There are dozens of ciphers that support forward secrecy.  What
382follows is the beginning of a list of 51 ciphers available with
383OpenSSL 1.0.1e.  The list is sorted in the default Postfix preference
384order.  It excludes null ciphers that only authenticate and don't
385encrypt, together with export and low-grade ciphers whose encryption
386is too weak to offer meaningful secrecy. The first column shows the
387cipher name, and the second shows the key exchange method.  </p>
388
389<blockquote>
390<pre>
391$ openssl ciphers -v \
392        'aNULL:-aNULL:kEECDH:kEDH:+RC4:!eNULL:!EXPORT:!LOW:@STRENGTH' |
393    awk '{printf "%-32s %s\n", $1, $3}'
394AECDH-AES256-SHA                 Kx=ECDH
395ECDHE-RSA-AES256-GCM-SHA384      Kx=ECDH
396ECDHE-ECDSA-AES256-GCM-SHA384    Kx=ECDH
397ECDHE-RSA-AES256-SHA384          Kx=ECDH
398ECDHE-ECDSA-AES256-SHA384        Kx=ECDH
399ECDHE-RSA-AES256-SHA             Kx=ECDH
400ECDHE-ECDSA-AES256-SHA           Kx=ECDH
401ADH-AES256-GCM-SHA384            Kx=DH
402ADH-AES256-SHA256                Kx=DH
403ADH-AES256-SHA                   Kx=DH
404ADH-CAMELLIA256-SHA              Kx=DH
405DHE-DSS-AES256-GCM-SHA384        Kx=DH
406DHE-RSA-AES256-GCM-SHA384        Kx=DH
407DHE-RSA-AES256-SHA256            Kx=DH
408...
409</pre>
410</blockquote>
411
412<p> To date, all ciphers that support forward secrecy have one of
413five values for the first component of their OpenSSL name: "AECDH",
414"ECDHE", "ADH", "EDH" or "DHE".  Ciphers that don't implement forward
415secrecy have names that don't start with one of these prefixes.
416This pattern is likely to persist until some new key-exchange
417mechanism is invented that also supports forward secrecy.  </p>
418
419<p> The actual key length and raw algorithm key length
420are generally the same with non-export ciphers, but they may
421differ for the legacy export ciphers where the actual key
422is artificially shortened. </p>
423
424<p> Starting with TLS 1.3 the cipher name no longer contains enough
425information to determine which forward-secrecy scheme was employed,
426but TLS 1.3 <b>always</b> uses forward-secrecy.  On the client side,
427up-to-date Postfix releases log additional information for TLS 1.3
428connections, reporting the signature and key exchange algorithms.
429Two examples below (the long single line messages are folded across
430multiple lines for readability): </p>
431
432<blockquote>
433<pre>
434postfix/smtp[<i>process-id</i>]:
435  Untrusted TLS connection established to 127.0.0.1[127.0.0.1]:25:
436  TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
437  key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
438  client-signature ECDSA (P-256) client-digest SHA256
439
440postfix/smtp[<i>process-id</i>]:
441  Untrusted TLS connection established to 127.0.0.1[127.0.0.1]:25:
442  TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
443  key-exchange ECDHE (P-256) server-signature ECDSA (P-256) server-digest SHA256
444</pre>
445</blockquote>
446
447<p> In the above connections, the "key-exchange" value records the
448"Diffie-Hellman" algorithm used for key agreement.  The "server-signature" value
449records the public key algorithm used by the server to sign the key exchange.
450The "server-digest" value records any hash algorithm used to prepare the data
451for signing.  With "ED25519" and "ED448", no separate hash algorithm is used.
452</p>
453
454<p> Examples of Postfix SMTP server logging: </p>
455
456<blockquote>
457<pre>
458postfix/smtpd[<i>process-id</i>]:
459  Untrusted TLS connection established from localhost[127.0.0.1]:25:
460  TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
461  key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
462  client-signature ECDSA (P-256) client-digest SHA256
463
464postfix/smtpd[<i>process-id</i>]:
465  Anonymous TLS connection established from localhost[127.0.0.1]:
466  TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
467  server-signature RSA-PSS (2048 bits) server-digest SHA256
468
469postfix/smtpd[<i>process-id</i>]:
470  Anonymous TLS connection established from localhost[127.0.0.1]:
471  TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
472  server-signature ED25519
473</pre>
474</blockquote>
475
476<p> Note that Postfix &ge; 3.4 server logging may also include a
477"to <i>sni-name</i>" element to record the use of an alternate
478server certificate chain for the connection in question. This happens
479when the client uses the TLS SNI extension, and the server selects
480a non-default certificate chain based on the client's SNI value:
481</p>
482
483<blockquote>
484<pre>
485postfix/smtpd[<i>process-id</i>]:
486  Untrusted TLS connection established from client.example[192.0.2.1]
487  to server.example: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
488  key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
489  client-signature ECDSA (P-256) client-digest SHA256
490</pre>
491</blockquote>
492
493<h2><a name="status"> What do "Anonymous", "Untrusted", etc. in
494Postfix logging mean? </a> </h2>
495
496<p> The verification levels below are subject to man-in-the-middle
497attacks to different degrees.  If such attacks are a concern, then
498the SMTP client will need to authenticate the remote SMTP server
499in a sufficiently-secure manner. For example, by the fingerprint
500of a (CA or leaf) public key or certificate.  Remember that
501conventional PKI relies on many trusted parties and is easily
502subverted by a state-funded adversary.  </p>
503
504<dl>
505
506<dt><b>Anonymous</b> (no peer certificate)</dt>
507
508<dd> <p> <b> Postfix SMTP client:</b> With opportunistic TLS (the "may" security level) the Postfix
509SMTP client does not verify any information in the peer certificate.
510In this case it enables and prefers anonymous cipher suites in which
511the remote SMTP server does not present a certificate (these ciphers
512offer forward secrecy of necessity).  When the remote SMTP server
513also supports anonymous TLS, and agrees to such a cipher suite, the
514verification status will be logged as "Anonymous".  </p> </dd>
515
516<dd> <p> <b> Postfix SMTP server:</b> This is by far most common,
517as client certificates are optional, and the Postfix SMTP server
518does not request client certificates by default (see smtpd_tls_ask_ccert).
519Even when client certificates are requested, the remote SMTP client
520might not send a certificate.  Unlike the Postfix SMTP client, the
521Postfix SMTP server "anonymous" verification status does not imply
522that the cipher suite is anonymous, which corresponds to the
523<i>server</i> not sending a certificate.  </p> </dd>
524
525<dt><b>Untrusted</b> (peer certificate not signed by trusted CA)</dt>
526
527<dd>
528
529<p> <b> Postfix SMTP client:</b> The remote SMTP server presented
530a certificate, but the Postfix SMTP client was unable to check the
531issuing CA signature.  With opportunistic TLS this is common with
532remote SMTP servers that don't support anonymous cipher suites.
533</p>
534
535<p> <b> Postfix SMTP server:</b> The remote SMTP client presented
536a certificate, but the Postfix SMTP server was unable to check the
537issuing CA signature.  This can happen when the server is configured
538to request client certificates (see smtpd_tls_ask_ccert).  </p>
539
540</dd>
541
542<dt><b>Trusted</b> (peer certificate signed by trusted CA, unverified
543peer name)</dt>
544
545<dd>
546
547<p> <b> Postfix SMTP client:</b> The remote SMTP server's certificate
548was signed by a CA that the Postfix SMTP client trusts, but either
549the client was not configured to verify the destination server name
550against the certificate, or the server certificate did not contain
551any matching names.  This is common with opportunistic TLS
552(smtp_tls_security_level is "may" or else "dane" with no usable
553TLSA DNS records) when the Postfix SMTP client's trusted CAs can
554verify the authenticity of the remote SMTP server's certificate,
555but the client is not configured or unable to verify the server
556name. </p>
557
558<p> <b> Postfix SMTP server:</b> The remote SMTP client certificate
559was signed by a CA that the Postfix SMTP server trusts.  The Postfix
560SMTP server never verifies the remote SMTP client name against the
561names in the client certificate. Since the client chooses to connect
562to the server, the Postfix SMTP server has no expectation of a
563particular client hostname. </p>
564
565</dd>
566
567<dt><b>Verified</b> (peer certificate signed by trusted CA and
568verified peer name; or: peer certificate with expected public-key
569or certificate fingerprint)</dt>
570
571<dd>
572
573<p> <b> Postfix SMTP client:</b> The remote SMTP server's certificate
574was signed by a CA that the Postfix SMTP client trusts, and the
575certificate name matches the destination or server name(s).  The
576Postfix SMTP client was configured to require a verified name,
577otherwise the verification status would have been just "Trusted".
578</p>
579
580<p> <b> Postfix SMTP client:</b> The "Verified" status may also
581mean that the Postfix SMTP client successfully matched the expected
582fingerprint against the remote SMTP server public key or certificate.
583The expected fingerprint may come from smtp_tls_policy_maps or from
584TLSA (secure) DNS records.  The Postfix SMTP client ignores the CA
585signature.  </p>
586
587<p> <b> Postfix SMTP server:</b> The status is never "Verified",
588because the Postfix SMTP server never verifies the remote SMTP
589client name against the names in the client certificate, and because
590the Postfix SMTP server does not expect a specific fingerprint in
591the client public key or certificate.  </p>
592
593</dd>
594
595</dl>
596
597<h2><a name="credits">Credits </a> </h2>
598
599<ul>
600
601<li> TLS support for Postfix was originally developed by  Lutz
602J&auml;nicke at Cottbus Technical University.
603
604<li> Wietse Venema adopted and restructured the code and documentation.
605
606<li> Viktor Dukhovni implemented support for many subsequent TLS
607features, including EECDH, and authored the initial version of this
608document.
609
610</ul>
611
612</body>
613
614</html>
615