Remove export ciphers from the DEFAULT cipher list
authorKurt Roeckx <kurt@roeckx.be>
Wed, 4 Mar 2015 20:57:52 +0000 (21:57 +0100)
committerKurt Roeckx <kurt@roeckx.be>
Sat, 7 Mar 2015 22:12:32 +0000 (23:12 +0100)
They are moved to the COMPLEMENTOFDEFAULT instead.
This also fixes SSLv2 to be part of COMPLEMENTOFDEFAULT.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(cherry picked from commit bc2e18a3c818ae7e2d8c996b6648aa4ae8e3ee28)

CHANGES
doc/apps/ciphers.pod
ssl/ssl.h
ssl/ssl_ciph.c

diff --git a/CHANGES b/CHANGES
index f48a0023a4079ff114c01fc6e30a683a59c36117..3e146ab41ee77de8778161e20669566e29a045ed 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@
 
  Changes between 1.0.0q and 1.0.0r [xx XXX xxxx]
 
-  *)
+  *) Removed the export ciphers from the DEFAULT ciphers
+     [Kurt Roeckx]
 
  Changes between 1.0.0p and 1.0.0q [15 Jan 2015]
 
index f44aa00a2fdb5ffd5e5979a5641c6bcc10279166..cbd9fa3fdfc7178785eb17c8fb295d693e802ca3 100644 (file)
@@ -109,8 +109,8 @@ The following is a list of all permitted cipher strings and their meanings.
 
 =item B<DEFAULT>
 
-the default cipher list. This is determined at compile time and, as of OpenSSL
-1.0.0, is normally B<ALL:!aNULL:!eNULL>. This must be the first cipher string
+the default cipher list. This is determined at compile time and
+is normally B<ALL:!EXPORT:!aNULL:!eNULL:!SSLv2>. This must be the firstcipher string
 specified.
 
 =item B<COMPLEMENTOFDEFAULT>
index c977da3b963e8827f59df74feaa72d45c902a5fd..3f4d0ac9ed53aaf6367f41ced87cd2f5ba488ca1 100644 (file)
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -326,7 +326,7 @@ extern "C" {
  * The following cipher list is used by default. It also is substituted when
  * an application-defined cipher list string starts with 'DEFAULT'.
  */
-# define SSL_DEFAULT_CIPHER_LIST "ALL:!aNULL:!eNULL:!SSLv2"
+# define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!aNULL:!eNULL:!SSLv2"
 /*
  * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always
  * starts with a reasonable order, and all we have to do for DEFAULT is
index a61cab6155a5eba8e2279de33b768bfb5adedcd5..cae03b31e056316f583950e2218af637d2e3be8c 100644 (file)
@@ -228,8 +228,8 @@ static const SSL_CIPHER cipher_aliases[] = {
      * "COMPLEMENTOFDEFAULT" (does *not* include ciphersuites not found in
      * ALL!)
      */
-    {0, SSL_TXT_CMPDEF, 0, SSL_kEDH | SSL_kEECDH, SSL_aNULL, ~SSL_eNULL, 0, 0,
-     0, 0, 0, 0},
+    {0, SSL_TXT_CMPDEF, 0, 0, SSL_aNULL, ~SSL_eNULL, 0, ~SSL_SSLV2,
+     SSL_EXP_MASK, 0, 0, 0},
 
     /*
      * key exchange aliases (some of those using only a single bit here
@@ -916,7 +916,10 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id,
                  cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl,
                  cp->algo_strength);
 #endif
-
+            if (algo_strength == SSL_EXP_MASK && SSL_C_IS_EXPORT(cp))
+                goto ok;
+            if (alg_ssl == ~SSL_SSLV2 && cp->algorithm_ssl == SSL_SSLV2)
+                goto ok;
             if (alg_mkey && !(alg_mkey & cp->algorithm_mkey))
                 continue;
             if (alg_auth && !(alg_auth & cp->algorithm_auth))
@@ -935,6 +938,8 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id,
                 continue;
         }
 
+    ok:
+
 #ifdef CIPHER_DEBUG
         printf("Action = %d\n", rule);
 #endif