From: Wietse Venema
With mandatory TLS encryption, the Postfix SMTP server will by -default only use SSLv3 or TLSv1. SSLv2 is only used when TLS encryption +default disable SSLv2. SSLv2 is used only when TLS encryption is optional. The mandatory TLS protocol list is specified via the smtpd_tls_mandatory_protocols configuration parameter. The corresponding smtpd_tls_protocols parameter (Postfix ≥ 2.6) controls the SSL/TLS protocols used with opportunistic TLS.
+Note that the OpenSSL library only supports protocol exclusion +(not inclusion). For this reason, Postfix can exclude only protocols +that are known at the time the Postfix software is written. If new +protocols are added to the OpenSSL library, they cannot be excluded +without corresponding changes to the Postfix source code.
+For a server that is not a public Internet MX host, Postfix supports configurations with no server certificates that use only the anonymous ciphers. This is @@ -727,9 +733,10 @@ ciphers:
smtpd_tls_mandatory_ciphers = high smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 smtpd_tls_security_level = encrypt - smtpd_tls_mandatory_protocols = TLSv1 - # Also available with Postfix ≥ 2.5: + # Preferred form with Postfix ≥ 2.5: smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 + # Alternative form. + smtpd_tls_mandatory_protocols = TLSv1 @@ -773,8 +780,8 @@ secure for most situations.Postfix 2.8 and later, in combination with OpenSSL 0.9.7 and later allows TLS servers to preempt the TLS client's cipher preference list. -This is only possible with SSLv3, as in SSLv2 the client chooses the -cipher from a list supplied by the server.
+This is possible only with SSLv3 and later, as in SSLv2 the client +chooses the cipher from a list supplied by the server.By default, the OpenSSL server selects the client's most preferred cipher that the server supports. With SSLv3 and later, the server @@ -1010,9 +1017,9 @@ table, specify the "encrypt" security level.
Examples:
In the example below, traffic to example.com and its sub-domains -via the corresponding MX hosts always uses TLS. The protocol version will be -"SSLv3" or "TLSv1" (the default setting of smtp_tls_mandatory_protocols -excludes "SSLv2"). Only high or medium strength (i.e. 128 bit or +via the corresponding MX hosts always uses TLS. The SSLv2 protocol +will be disabled (the default setting of smtp_tls_mandatory_protocols +excludes "SSLv2"). Only high- or medium-strength (i.e. 128 bit or better) ciphers will be used by default for all "encrypt" security level sessions.
@@ -1883,7 +1890,7 @@ Postfix < 2.6, the minimum opportunistic TLS cipher grade is always "export".With mandatory TLS encryption, the Postfix SMTP client will by -default only use SSLv3 or TLSv1. SSLv2 is only used when TLS encryption +default disable SSLv2. SSLv2 is used only when TLS encryption is optional. The mandatory TLS protocol list is specified via the smtp_tls_mandatory_protocols configuration parameter. The corresponding smtp_tls_protocols parameter (Postfix ≥ 2.6) controls @@ -1897,9 +1904,10 @@ the SSL/TLS protocols used with opportunistic TLS.
smtp_tls_mandatory_ciphers = medium smtp_tls_mandatory_exclude_ciphers = RC4, MD5 smtp_tls_exclude_ciphers = aNULL - smtp_tls_mandatory_protocols = SSLv3, TLSv1 - # Also available with Postfix ≥ 2.5: + # Preferred form with Postfix ≥ 2.5: smtp_tls_mandatory_protocols = !SSLv2 + # Alternative form. + smtp_tls_mandatory_protocols = SSLv3, TLSv1 # Also available with Postfix ≥ 2.6: smtp_tls_ciphers = export smtp_tls_protocols = !SSLv2 diff --git a/postfix/html/lmtp.8.html b/postfix/html/lmtp.8.html index 67090be43..a72db682a 100644 --- a/postfix/html/lmtp.8.html +++ b/postfix/html/lmtp.8.html @@ -477,7 +477,7 @@ SMTP(8) SMTP(8) non-empty value is specified, this overrides the obsolete smtp_tls_per_site parameter. - smtp_tls_mandatory_protocols (SSLv3, TLSv1) + smtp_tls_mandatory_protocols (!SSLv2) List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. diff --git a/postfix/html/postconf.5.html b/postfix/html/postconf.5.html index ec54b00c4..9c8ff40f0 100644 --- a/postfix/html/postconf.5.html +++ b/postfix/html/postconf.5.html @@ -4775,7 +4775,7 @@ configuration parameter. See there for details.The LMTP-specific version of the smtp_tls_mandatory_protocols configuration parameter. See there for details.
@@ -11052,7 +11052,7 @@ attribute. See smtp_tls_policy_maList of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. In main.cf the values are separated by @@ -11061,12 +11061,19 @@ whitespace, commas or colons. In the policy table "protocols" attribute empty value means allow all protocols. The valid protocol names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1".
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+With Postfix ≥ 2.5 the parameter syntax is expanded to support protocol exclusions. One can now explicitly exclude SSLv2 by setting "smtp_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and SSLv3 set "smtp_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing -the protocols to include, rather than protocols to exclude, is still -supported; use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is +supported, but not recommended. The exclusion form more closely +matches the behaviour when the OpenSSL library is newer than Postfix. +Since SSL version 2 has known protocol weaknesses and is now deprecated, the default setting excludes "SSLv2". This means that by @@ -11079,9 +11086,10 @@ and higher.
Example:
-smtp_tls_mandatory_protocols = TLSv1 -# Alternative form with Postfix ≥ 2.5: +# Preferred form with Postfix ≥ 2.5: smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 +# Alternative form. +smtp_tls_mandatory_protocols = TLSv1
This feature is available in Postfix 2.3 and later.
@@ -11338,14 +11346,18 @@ separator is colon. An empty value means allow all protocols. The valid protocol names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1". +Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+To include a protocol list its name, to exclude it, prefix the name with a "!" character. To exclude SSLv2 even for opportunistic TLS set "smtp_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set "smtp_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to -include, is supported, but not recommended. OpenSSL provides no mechanisms -for excluding protocols not known at compile-time. If Postfix is linked -against an OpenSSL library that supports additional protocol versions, -they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not +recommended. The exclusion form more closely matches the behaviour +when the OpenSSL library is newer than Postfix.Example:
@@ -14848,7 +14860,7 @@ works in addition to the exclusions listed with smtpd_tls_mandatory_protocols -(default: SSLv3, TLSv1)
The SSL/TLS protocols accepted by the Postfix SMTP server with mandatory TLS encryption. If the list is empty, the server supports all @@ -14857,12 +14869,19 @@ of protocol names separated by whitespace, commas or colons. The supported protocol names are "SSLv2", "SSLv3" and "TLSv1", and are not case sensitive.
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+With Postfix ≥ 2.5 the parameter syntax is expanded to support protocol exclusions. One can now explicitly exclude SSLv2 by setting "smtpd_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and SSLv3 set "smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing -the protocols to include, rather than protocols to exclude, is still -supported, use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is +supported, but not recommended. The exclusion form more closely +matches the behaviour when the OpenSSL library is newer than Postfix. +Since SSL version 2 has known protocol weaknesses and is now deprecated, the default setting excludes "SSLv2". This means that @@ -14896,14 +14915,18 @@ names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1". In smtp_tls_policy_maps table entries, "protocols" attribute values are separated by a colon.
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+To include a protocol list its name, to exclude it, prefix the name with a "!" character. To exclude SSLv2 even for opportunistic TLS set "smtpd_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set "smtpd_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to -include, is supported, but not recommended. OpenSSL provides no mechanisms -for excluding protocols not known at compile-time. If Postfix is linked -against an OpenSSL library that supports additional protocol versions, -they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not +recommended. The exclusion form more closely matches the behaviour +when the OpenSSL library is newer than Postfix.Example:
diff --git a/postfix/html/smtp.8.html b/postfix/html/smtp.8.html
index 67090be43..a72db682a 100644
--- a/postfix/html/smtp.8.html
+++ b/postfix/html/smtp.8.html
@@ -477,7 +477,7 @@ SMTP(8) SMTP(8)
non-empty value is specified, this overrides the
obsolete smtp_tls_per_site parameter.
- smtp_tls_mandatory_protocols (SSLv3, TLSv1)
+ smtp_tls_mandatory_protocols (!SSLv2)
List of SSL/TLS protocols that the Postfix SMTP
client will use with mandatory TLS encryption.
diff --git a/postfix/html/smtpd.8.html b/postfix/html/smtpd.8.html
index 51d526662..b7c4cd113 100644
--- a/postfix/html/smtpd.8.html
+++ b/postfix/html/smtpd.8.html
@@ -473,7 +473,7 @@ SMTPD(8) SMTPD(8)
exclude from the Postfix SMTP server cipher list at
mandatory TLS security levels.
- smtpd_tls_mandatory_protocols (SSLv3, TLSv1)
+ smtpd_tls_mandatory_protocols (!SSLv2)
The SSL/TLS protocols accepted by the Postfix SMTP
server with mandatory TLS encryption.
diff --git a/postfix/man/man5/postconf.5 b/postfix/man/man5/postconf.5
index 09506eae2..ff4b8fa2c 100644
--- a/postfix/man/man5/postconf.5
+++ b/postfix/man/man5/postconf.5
@@ -2639,7 +2639,7 @@ The LMTP-specific version of the smtp_tls_mandatory_exclude_ciphers
configuration parameter. See there for details.
.PP
This feature is available in Postfix 2.3 and later.
-.SH lmtp_tls_mandatory_protocols (default: SSLv3, TLSv1)
+.SH lmtp_tls_mandatory_protocols (default: !SSLv2)
The LMTP-specific version of the smtp_tls_mandatory_protocols
configuration parameter. See there for details.
.PP
@@ -6653,7 +6653,7 @@ specified on a per-destination basis via the TLS policy "exclude"
attribute. See smtp_tls_policy_maps for notes and examples.
.PP
This feature is available in Postfix 2.3 and later.
-.SH smtp_tls_mandatory_protocols (default: SSLv3, TLSv1)
+.SH smtp_tls_mandatory_protocols (default: !SSLv2)
List of SSL/TLS protocols that the Postfix SMTP client will use with
mandatory TLS encryption. In main.cf the values are separated by
whitespace, commas or colons. In the policy table "protocols" attribute
@@ -6661,12 +6661,18 @@ whitespace, commas or colons. In the policy table "protocols" attribute
empty value means allow all protocols. The valid protocol names, (see
\\fBfBSSL_get_version\fR(3)\fR), are "SSLv2", "SSLv3" and "TLSv1".
.PP
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1"
+and "TLSv1.2". If an older Postfix version is linked against OpenSSL
+1.0.1 or later, these, or any other new protocol versions, are
+unconditionally enabled.
+.PP
With Postfix >= 2.5 the parameter syntax is expanded to support
protocol exclusions. One can now explicitly exclude SSLv2 by setting
"smtp_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and
SSLv3 set "smtp_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing
-the protocols to include, rather than protocols to exclude, is still
-supported; use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is
+supported, but not recommended. The exclusion form more closely
+matches the behaviour when the OpenSSL library is newer than Postfix.
.PP
Since SSL version 2 has known protocol weaknesses and is now
deprecated, the default setting excludes "SSLv2". This means that by
@@ -6681,9 +6687,10 @@ Example:
.nf
.na
.ft C
-smtp_tls_mandatory_protocols = TLSv1
-# Alternative form with Postfix >= 2.5:
+# Preferred form with Postfix >= 2.5:
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
+# Alternative form.
+smtp_tls_mandatory_protocols = TLSv1
.fi
.ad
.ft R
@@ -6917,14 +6924,18 @@ separator is colon. An empty value means allow all protocols. The valid
protocol names, (see \\fBfBSSL_get_version\fR(3)\fR), are "SSLv2", "SSLv3"
and "TLSv1".
.PP
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1"
+and "TLSv1.2". If an older Postfix version is linked against OpenSSL
+1.0.1 or later, these, or any other new protocol versions, are
+unconditionally enabled.
+.PP
To include a protocol list its name, to exclude it, prefix the name
with a "!" character. To exclude SSLv2 even for opportunistic TLS set
"smtp_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set
"smtp_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to
-include, is supported, but not recommended. OpenSSL provides no mechanisms
-for excluding protocols not known at compile-time. If Postfix is linked
-against an OpenSSL library that supports additional protocol versions,
-they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not
+recommended. The exclusion form more closely matches the behaviour
+when the OpenSSL library is newer than Postfix.
.PP
Example:
.nf
@@ -9554,7 +9565,7 @@ works in addition to the exclusions listed with smtpd_tls_exclude_ciphers
(see there for syntax details).
.PP
This feature is available in Postfix 2.3 and later.
-.SH smtpd_tls_mandatory_protocols (default: SSLv3, TLSv1)
+.SH smtpd_tls_mandatory_protocols (default: !SSLv2)
The SSL/TLS protocols accepted by the Postfix SMTP server with
mandatory TLS encryption. If the list is empty, the server supports all
available SSL/TLS protocol versions. A non-empty value is a list
@@ -9562,12 +9573,18 @@ of protocol
names separated by whitespace, commas or colons. The supported protocol
names are "SSLv2", "SSLv3" and "TLSv1", and are not case sensitive.
.PP
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1"
+and "TLSv1.2". If an older Postfix version is linked against OpenSSL
+1.0.1 or later, these, or any other new protocol versions, are
+unconditionally enabled.
+.PP
With Postfix >= 2.5 the parameter syntax is expanded to support
protocol exclusions. One can now explicitly exclude SSLv2 by setting
"smtpd_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and
SSLv3 set "smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing
-the protocols to include, rather than protocols to exclude, is still
-supported, use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is
+supported, but not recommended. The exclusion form more closely
+matches the behaviour when the OpenSSL library is newer than Postfix.
.PP
Since SSL version 2 has known protocol weaknesses and is now
deprecated, the default setting excludes "SSLv2". This means that
@@ -9599,14 +9616,18 @@ names, (see \\fBfBSSL_get_version\fR(3)\fR), are "SSLv2", "SSLv3" and
"TLSv1". In smtp_tls_policy_maps table entries, "protocols" attribute
values are separated by a colon.
.PP
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1"
+and "TLSv1.2". If an older Postfix version is linked against OpenSSL
+1.0.1 or later, these, or any other new protocol versions, are
+unconditionally enabled.
+.PP
To include a protocol list its name, to exclude it, prefix the name
with a "!" character. To exclude SSLv2 even for opportunistic TLS set
"smtpd_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set
"smtpd_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to
-include, is supported, but not recommended. OpenSSL provides no mechanisms
-for excluding protocols not known at compile-time. If Postfix is linked
-against an OpenSSL library that supports additional protocol versions,
-they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not
+recommended. The exclusion form more closely matches the behaviour
+when the OpenSSL library is newer than Postfix.
.PP
Example:
.nf
diff --git a/postfix/man/man8/smtp.8 b/postfix/man/man8/smtp.8
index 354ceb57c..793d79b0e 100644
--- a/postfix/man/man8/smtp.8
+++ b/postfix/man/man8/smtp.8
@@ -398,7 +398,7 @@ when TLS is not already enabled for that server.
Optional lookup tables with the Postfix SMTP client TLS security
policy by next-hop destination; when a non-empty value is specified,
this overrides the obsolete smtp_tls_per_site parameter.
-.IP "\fBsmtp_tls_mandatory_protocols (SSLv3, TLSv1)\fR"
+.IP "\fBsmtp_tls_mandatory_protocols (!SSLv2)\fR"
List of SSL/TLS protocols that the Postfix SMTP client will use with
mandatory TLS encryption.
.IP "\fBsmtp_tls_scert_verifydepth (9)\fR"
diff --git a/postfix/man/man8/smtpd.8 b/postfix/man/man8/smtpd.8
index 008c87800..921a2272f 100644
--- a/postfix/man/man8/smtpd.8
+++ b/postfix/man/man8/smtpd.8
@@ -399,7 +399,7 @@ use with mandatory TLS encryption.
.IP "\fBsmtpd_tls_mandatory_exclude_ciphers (empty)\fR"
Additional list of ciphers or cipher types to exclude from the
Postfix SMTP server cipher list at mandatory TLS security levels.
-.IP "\fBsmtpd_tls_mandatory_protocols (SSLv3, TLSv1)\fR"
+.IP "\fBsmtpd_tls_mandatory_protocols (!SSLv2)\fR"
The SSL/TLS protocols accepted by the Postfix SMTP server with
mandatory TLS encryption.
.IP "\fBsmtpd_tls_received_header (no)\fR"
diff --git a/postfix/proto/TLS_README.html b/postfix/proto/TLS_README.html
index b2500d351..063321020 100644
--- a/postfix/proto/TLS_README.html
+++ b/postfix/proto/TLS_README.html
@@ -704,12 +704,18 @@ Postfix < 2.6, the minimum opportunistic TLS cipher grade is always
"export".
With mandatory TLS encryption, the Postfix SMTP server will by
-default only use SSLv3 or TLSv1. SSLv2 is only used when TLS encryption
+default disable SSLv2. SSLv2 is used only when TLS encryption
is optional. The mandatory TLS protocol list is specified via the
smtpd_tls_mandatory_protocols configuration parameter. The
corresponding smtpd_tls_protocols parameter (Postfix ≥ 2.6)
controls the SSL/TLS protocols used with opportunistic TLS.
+ Note that the OpenSSL library only supports protocol exclusion
+(not inclusion). For this reason, Postfix can exclude only protocols
+that are known at the time the Postfix software is written. If new
+protocols are added to the OpenSSL library, they cannot be excluded
+without corresponding changes to the Postfix source code.
+
For a server that is not a public Internet MX host, Postfix
supports configurations with no server
certificates that use only the anonymous ciphers. This is
@@ -727,9 +733,10 @@ ciphers:
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5
smtpd_tls_security_level = encrypt
- smtpd_tls_mandatory_protocols = TLSv1
- # Also available with Postfix ≥ 2.5:
+ # Preferred form with Postfix ≥ 2.5:
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
+ # Alternative form.
+ smtpd_tls_mandatory_protocols = TLSv1
@@ -773,8 +780,8 @@ secure for most situations.
Postfix 2.8 and later, in combination with OpenSSL 0.9.7 and later allows TLS servers to preempt the TLS client's cipher preference list. -This is only possible with SSLv3, as in SSLv2 the client chooses the -cipher from a list supplied by the server.
+This is possible only with SSLv3 and later, as in SSLv2 the client +chooses the cipher from a list supplied by the server.By default, the OpenSSL server selects the client's most preferred cipher that the server supports. With SSLv3 and later, the server @@ -1010,9 +1017,9 @@ table, specify the "encrypt" security level.
Examples:
In the example below, traffic to example.com and its sub-domains -via the corresponding MX hosts always uses TLS. The protocol version will be -"SSLv3" or "TLSv1" (the default setting of smtp_tls_mandatory_protocols -excludes "SSLv2"). Only high or medium strength (i.e. 128 bit or +via the corresponding MX hosts always uses TLS. The SSLv2 protocol +will be disabled (the default setting of smtp_tls_mandatory_protocols +excludes "SSLv2"). Only high- or medium-strength (i.e. 128 bit or better) ciphers will be used by default for all "encrypt" security level sessions.
@@ -1883,7 +1890,7 @@ Postfix < 2.6, the minimum opportunistic TLS cipher grade is always "export".With mandatory TLS encryption, the Postfix SMTP client will by -default only use SSLv3 or TLSv1. SSLv2 is only used when TLS encryption +default disable SSLv2. SSLv2 is used only when TLS encryption is optional. The mandatory TLS protocol list is specified via the smtp_tls_mandatory_protocols configuration parameter. The corresponding smtp_tls_protocols parameter (Postfix ≥ 2.6) controls @@ -1897,9 +1904,10 @@ the SSL/TLS protocols used with opportunistic TLS.
smtp_tls_mandatory_ciphers = medium smtp_tls_mandatory_exclude_ciphers = RC4, MD5 smtp_tls_exclude_ciphers = aNULL - smtp_tls_mandatory_protocols = SSLv3, TLSv1 - # Also available with Postfix ≥ 2.5: + # Preferred form with Postfix ≥ 2.5: smtp_tls_mandatory_protocols = !SSLv2 + # Alternative form. + smtp_tls_mandatory_protocols = SSLv3, TLSv1 # Also available with Postfix ≥ 2.6: smtp_tls_ciphers = export smtp_tls_protocols = !SSLv2 diff --git a/postfix/proto/postconf.proto b/postfix/proto/postconf.proto index 8e5e47a36..2fc7ed2fd 100644 --- a/postfix/proto/postconf.proto +++ b/postfix/proto/postconf.proto @@ -10457,7 +10457,7 @@ configurations in environments where DNS security is not assured.This feature is available in Postfix 2.3 and later.
-%PARAM smtp_tls_mandatory_protocols SSLv3, TLSv1 +%PARAM smtp_tls_mandatory_protocols !SSLv2List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption. In main.cf the values are separated by @@ -10466,12 +10466,19 @@ whitespace, commas or colons. In the policy table "protocols" attribute empty value means allow all protocols. The valid protocol names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1".
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+With Postfix ≥ 2.5 the parameter syntax is expanded to support protocol exclusions. One can now explicitly exclude SSLv2 by setting "smtp_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and SSLv3 set "smtp_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing -the protocols to include, rather than protocols to exclude, is still -supported; use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is +supported, but not recommended. The exclusion form more closely +matches the behaviour when the OpenSSL library is newer than Postfix. +Since SSL version 2 has known protocol weaknesses and is now deprecated, the default setting excludes "SSLv2". This means that by @@ -10484,9 +10491,10 @@ TLS_README for more information about security levels.
Example:
-smtp_tls_mandatory_protocols = TLSv1 -# Alternative form with Postfix ≥ 2.5: +# Preferred form with Postfix ≥ 2.5: smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 +# Alternative form. +smtp_tls_mandatory_protocols = TLSv1
This feature is available in Postfix 2.3 and later.
@@ -10616,7 +10624,7 @@ configuration parameter. See there for details.This feature is available in Postfix 2.3 and later.
-%PARAM lmtp_tls_mandatory_protocols SSLv3, TLSv1 +%PARAM lmtp_tls_mandatory_protocols !SSLv2The LMTP-specific version of the smtp_tls_mandatory_protocols configuration parameter. See there for details.
@@ -10637,7 +10645,7 @@ configuration parameter. See there for details.This feature is available in Postfix 2.3 and later.
-%PARAM smtpd_tls_mandatory_protocols SSLv3, TLSv1 +%PARAM smtpd_tls_mandatory_protocols !SSLv2The SSL/TLS protocols accepted by the Postfix SMTP server with mandatory TLS encryption. If the list is empty, the server supports all @@ -10646,12 +10654,19 @@ of protocol names separated by whitespace, commas or colons. The supported protocol names are "SSLv2", "SSLv3" and "TLSv1", and are not case sensitive.
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+With Postfix ≥ 2.5 the parameter syntax is expanded to support protocol exclusions. One can now explicitly exclude SSLv2 by setting "smtpd_tls_mandatory_protocols = !SSLv2". To exclude both SSLv2 and SSLv3 set "smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3". Listing -the protocols to include, rather than protocols to exclude, is still -supported, use the form you find more intuitive.
+the protocols to include, rather than protocols to exclude, is +supported, but not recommended. The exclusion form more closely +matches the behaviour when the OpenSSL library is newer than Postfix. +Since SSL version 2 has known protocol weaknesses and is now deprecated, the default setting excludes "SSLv2". This means that @@ -11678,14 +11693,18 @@ separator is colon. An empty value means allow all protocols. The valid protocol names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1".
+Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+To include a protocol list its name, to exclude it, prefix the name with a "!" character. To exclude SSLv2 even for opportunistic TLS set "smtp_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set "smtp_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to -include, is supported, but not recommended. OpenSSL provides no mechanisms -for excluding protocols not known at compile-time. If Postfix is linked -against an OpenSSL library that supports additional protocol versions, -they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not +recommended. The exclusion form more closely matches the behaviour +when the OpenSSL library is newer than Postfix.Example:
@@ -11708,14 +11727,18 @@ names, (see SSL_get_version(3)), are "SSLv2", "SSLv3" and "TLSv1". In smtp_tls_policy_maps table entries, "protocols" attribute values are separated by a colon. +Note: As of OpenSSL 1.0.1 two new protocols are defined, "TLSv1.1" +and "TLSv1.2". If an older Postfix version is linked against OpenSSL +1.0.1 or later, these, or any other new protocol versions, are +unconditionally enabled.
+To include a protocol list its name, to exclude it, prefix the name with a "!" character. To exclude SSLv2 even for opportunistic TLS set "smtpd_tls_protocols = !SSLv2". To exclude both "SSLv2" and "SSLv3" set "smtpd_tls_protocols = !SSLv2, !SSLv3". Explicitly listing the protocols to -include, is supported, but not recommended. OpenSSL provides no mechanisms -for excluding protocols not known at compile-time. If Postfix is linked -against an OpenSSL library that supports additional protocol versions, -they cannot be excluded using either syntax.
+include, rather than protocols to exclude, is supported, but not +recommended. The exclusion form more closely matches the behaviour +when the OpenSSL library is newer than Postfix.Example:
diff --git a/postfix/src/global/mail_params.h b/postfix/src/global/mail_params.h index 912c012c8..17546a3c9 100644 --- a/postfix/src/global/mail_params.h +++ b/postfix/src/global/mail_params.h @@ -1257,7 +1257,7 @@ extern char *var_smtpd_tls_CApath; extern char *var_smtpd_tls_proto; #define VAR_SMTPD_TLS_MAND_PROTO "smtpd_tls_mandatory_protocols" -#define DEF_SMTPD_TLS_MAND_PROTO "SSLv3, TLSv1" +#define DEF_SMTPD_TLS_MAND_PROTO "!SSLv2" extern char *var_smtpd_tls_mand_proto; #define VAR_SMTPD_TLS_CIPH "smtpd_tls_ciphers" @@ -1470,9 +1470,9 @@ extern char *var_smtp_tls_policy; extern char *var_smtp_tls_proto; #define VAR_SMTP_TLS_MAND_PROTO "smtp_tls_mandatory_protocols" -#define DEF_SMTP_TLS_MAND_PROTO "SSLv3, TLSv1" +#define DEF_SMTP_TLS_MAND_PROTO "!SSLv2" #define VAR_LMTP_TLS_MAND_PROTO "lmtp_tls_mandatory_protocols" -#define DEF_LMTP_TLS_MAND_PROTO "SSLv3, TLSv1" +#define DEF_LMTP_TLS_MAND_PROTO "!SSLv2" extern char *var_smtp_tls_mand_proto; #define VAR_SMTP_TLS_VFY_CMATCH "smtp_tls_verify_cert_match" diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index b3747370e..91e9f1eac 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,8 +20,8 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20120218" -#define MAIL_VERSION_NUMBER "2.9.1" +#define MAIL_RELEASE_DATE "20120424" +#define MAIL_VERSION_NUMBER "2.9.2" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff --git a/postfix/src/smtp/smtp.c b/postfix/src/smtp/smtp.c index a13cd2eef..e42282f9f 100644 --- a/postfix/src/smtp/smtp.c +++ b/postfix/src/smtp/smtp.c @@ -368,7 +368,7 @@ /* Optional lookup tables with the Postfix SMTP client TLS security /* policy by next-hop destination; when a non-empty value is specified, /* this overrides the obsolete smtp_tls_per_site parameter. -/* .IP "\fBsmtp_tls_mandatory_protocols (SSLv3, TLSv1)\fR" +/* .IP "\fBsmtp_tls_mandatory_protocols (!SSLv2)\fR" /* List of SSL/TLS protocols that the Postfix SMTP client will use with /* mandatory TLS encryption. /* .IP "\fBsmtp_tls_scert_verifydepth (9)\fR" diff --git a/postfix/src/smtpd/smtpd.c b/postfix/src/smtpd/smtpd.c index aeecbf883..2fc7a8f11 100644 --- a/postfix/src/smtpd/smtpd.c +++ b/postfix/src/smtpd/smtpd.c @@ -367,7 +367,7 @@ /* .IP "\fBsmtpd_tls_mandatory_exclude_ciphers (empty)\fR" /* Additional list of ciphers or cipher types to exclude from the /* Postfix SMTP server cipher list at mandatory TLS security levels. -/* .IP "\fBsmtpd_tls_mandatory_protocols (SSLv3, TLSv1)\fR" +/* .IP "\fBsmtpd_tls_mandatory_protocols (!SSLv2)\fR" /* The SSL/TLS protocols accepted by the Postfix SMTP server with /* mandatory TLS encryption. /* .IP "\fBsmtpd_tls_received_header (no)\fR" diff --git a/postfix/src/tls/tls.h b/postfix/src/tls/tls.h index 0ae91c839..870e7f4b3 100644 --- a/postfix/src/tls/tls.h +++ b/postfix/src/tls/tls.h @@ -175,8 +175,19 @@ extern void tls_param_init(void); #define TLS_PROTOCOL_SSLv2 (1<<0) /* SSLv2 */ #define TLS_PROTOCOL_SSLv3 (1<<1) /* SSLv3 */ #define TLS_PROTOCOL_TLSv1 (1<<2) /* TLSv1 */ +#ifdef SSL_TXT_TLSV1_1 +#define TLS_PROTOCOL_TLSv1_1 (1<<3) /* TLSv1_1 */ +#else +#define TLS_PROTOCOL_TLSv1_1 0 /* Unknown */ +#endif +#ifdef SSL_TXT_TLSV1_2 +#define TLS_PROTOCOL_TLSv1_2 (1<<4) /* TLSv1_2 */ +#else +#define TLS_PROTOCOL_TLSv1_2 0 /* Unknown */ +#endif #define TLS_KNOWN_PROTOCOLS \ - ( TLS_PROTOCOL_SSLv2 | TLS_PROTOCOL_SSLv3 | TLS_PROTOCOL_TLSv1 ) + ( TLS_PROTOCOL_SSLv2 | TLS_PROTOCOL_SSLv3 | TLS_PROTOCOL_TLSv1 \ + | TLS_PROTOCOL_TLSv1_1 | TLS_PROTOCOL_TLSv1_2 ) extern int tls_protocol_mask(const char *); diff --git a/postfix/src/tls/tls_client.c b/postfix/src/tls/tls_client.c index 37ee27a50..b75bca5b5 100644 --- a/postfix/src/tls/tls_client.c +++ b/postfix/src/tls/tls_client.c @@ -859,6 +859,12 @@ TLS_SESS_STATE *tls_client_start(const TLS_CLIENT_START_PROPS *props) if (protomask != 0) SSL_set_options(TLScontext->con, ((protomask & TLS_PROTOCOL_TLSv1) ? SSL_OP_NO_TLSv1 : 0L) +#ifdef SSL_OP_NO_TLSv1_1 + | ((protomask & TLS_PROTOCOL_TLSv1_1) ? SSL_OP_NO_TLSv1_1 : 0L) +#endif +#ifdef SSL_OP_NO_TLSv1_2 + | ((protomask & TLS_PROTOCOL_TLSv1_2) ? SSL_OP_NO_TLSv1_2 : 0L) +#endif | ((protomask & TLS_PROTOCOL_SSLv3) ? SSL_OP_NO_SSLv3 : 0L) | ((protomask & TLS_PROTOCOL_SSLv2) ? SSL_OP_NO_SSLv2 : 0L)); diff --git a/postfix/src/tls/tls_misc.c b/postfix/src/tls/tls_misc.c index 33dbdf3f5..8c5d0f1c3 100644 --- a/postfix/src/tls/tls_misc.c +++ b/postfix/src/tls/tls_misc.c @@ -224,6 +224,12 @@ static const NAME_CODE protocol_table[] = { SSL_TXT_SSLV2, TLS_PROTOCOL_SSLv2, SSL_TXT_SSLV3, TLS_PROTOCOL_SSLv3, SSL_TXT_TLSV1, TLS_PROTOCOL_TLSv1, +#ifdef SSL_TXT_TLSV1_1 + SSL_TXT_TLSV1_1, TLS_PROTOCOL_TLSv1_1, +#endif +#ifdef SSL_TXT_TLSV1_2 + SSL_TXT_TLSV1_2, TLS_PROTOCOL_TLSv1_2, +#endif 0, TLS_PROTOCOL_INVALID, }; diff --git a/postfix/src/tls/tls_server.c b/postfix/src/tls/tls_server.c index ffc0ffad9..245722216 100644 --- a/postfix/src/tls/tls_server.c +++ b/postfix/src/tls/tls_server.c @@ -403,6 +403,12 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props) if (protomask != 0) SSL_CTX_set_options(server_ctx, ((protomask & TLS_PROTOCOL_TLSv1) ? SSL_OP_NO_TLSv1 : 0L) +#ifdef SSL_OP_NO_TLSv1_1 + | ((protomask & TLS_PROTOCOL_TLSv1_1) ? SSL_OP_NO_TLSv1_1 : 0L) +#endif +#ifdef SSL_OP_NO_TLSv1_2 + | ((protomask & TLS_PROTOCOL_TLSv1_2) ? SSL_OP_NO_TLSv1_2 : 0L) +#endif | ((protomask & TLS_PROTOCOL_SSLv3) ? SSL_OP_NO_SSLv3 : 0L) | ((protomask & TLS_PROTOCOL_SSLv2) ? SSL_OP_NO_SSLv2 : 0L)); diff --git a/postfix/src/xsasl/xsasl_cyrus.h b/postfix/src/xsasl/xsasl_cyrus.h index 5e78dcd2b..ad8557ed5 100644 --- a/postfix/src/xsasl/xsasl_cyrus.h +++ b/postfix/src/xsasl/xsasl_cyrus.h @@ -26,6 +26,11 @@ extern XSASL_SERVER_IMPL *xsasl_cyrus_server_init(const char *, const char *); extern XSASL_CLIENT_IMPL *xsasl_cyrus_client_init(const char *, const char *); + /* + * Internal definitions for client and server module. + */ +typedef int (*XSASL_CYRUS_CB) (void); + #endif /* LICENSE diff --git a/postfix/src/xsasl/xsasl_cyrus_client.c b/postfix/src/xsasl/xsasl_cyrus_client.c index 16a098c07..5ba1c4bae 100644 --- a/postfix/src/xsasl/xsasl_cyrus_client.c +++ b/postfix/src/xsasl/xsasl_cyrus_client.c @@ -223,7 +223,7 @@ XSASL_CLIENT_IMPL *xsasl_cyrus_client_init(const char *unused_client_type, * Global callbacks. These have no per-session context. */ static sasl_callback_t callbacks[] = { - {SASL_CB_LOG, &xsasl_cyrus_log, 0}, + {SASL_CB_LOG, (XSASL_CYRUS_CB) &xsasl_cyrus_log, 0}, {SASL_CB_LIST_END, 0, 0} }; @@ -302,9 +302,9 @@ XSASL_CLIENT *xsasl_cyrus_client_create(XSASL_CLIENT_IMPL *unused_impl, { XSASL_CYRUS_CLIENT *client = 0; static sasl_callback_t callbacks[] = { - {SASL_CB_USER, &xsasl_cyrus_client_get_user, 0}, - {SASL_CB_AUTHNAME, &xsasl_cyrus_client_get_user, 0}, - {SASL_CB_PASS, &xsasl_cyrus_client_get_passwd, 0}, + {SASL_CB_USER, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_user, 0}, + {SASL_CB_AUTHNAME, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_user, 0}, + {SASL_CB_PASS, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_passwd, 0}, {SASL_CB_LIST_END, 0, 0} }; sasl_conn_t *sasl_conn = 0; diff --git a/postfix/src/xsasl/xsasl_cyrus_server.c b/postfix/src/xsasl/xsasl_cyrus_server.c index 78bb4df17..202e8db45 100644 --- a/postfix/src/xsasl/xsasl_cyrus_server.c +++ b/postfix/src/xsasl/xsasl_cyrus_server.c @@ -170,7 +170,7 @@ static const char *xsasl_cyrus_server_get_username(XSASL_SERVER *); #define NO_CALLBACK_CONTEXT 0 static sasl_callback_t callbacks[] = { - {SASL_CB_LOG, &xsasl_cyrus_log, NO_CALLBACK_CONTEXT}, + {SASL_CB_LOG, (XSASL_CYRUS_CB) &xsasl_cyrus_log, NO_CALLBACK_CONTEXT}, {SASL_CB_LIST_END, 0, 0} };