Never ever use SSLv2 or v3.
authorWerner Koch <wk@gnupg.org>
Mon, 30 Jan 2017 14:34:45 +0000 (15:34 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 30 Jan 2017 14:34:45 +0000 (15:34 +0100)
This reintroduces my patch for 2.6.

config.c

index 68e2d2f..4df7997 100644 (file)
--- a/config.c
+++ b/config.c
@@ -8,15 +8,15 @@
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
- * 
+ *
  * Pound is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  * Contact information:
  * Apsis GmbH
  * P.O.Box
@@ -180,7 +180,7 @@ get_subjectaltnames(X509 *x509, unsigned int *count)
 {
     unsigned int            local_count;
     unsigned char           **result;
-    STACK_OF(GENERAL_NAME)  *san_stack = (STACK_OF(GENERAL_NAME)*)X509_get_ext_d2i(x509, NID_subject_alt_name, NULL, NULL);     
+    STACK_OF(GENERAL_NAME)  *san_stack = (STACK_OF(GENERAL_NAME)*)X509_get_ext_d2i(x509, NID_subject_alt_name, NULL, NULL);
     unsigned char           *temp[sk_GENERAL_NAME_num(san_stack)];
     GENERAL_NAME            *name;
     int                     i;
@@ -391,10 +391,8 @@ parse_be(const int is_emergency)
             if(res->ctx == NULL)
                 conf_err("BackEnd Disable can only be used after HTTPS - aborted");
             lin[matches[1].rm_eo] = '\0';
-            if(strcasecmp(lin + matches[1].rm_so, "SSLv2") == 0)
-                SSL_CTX_set_options(res->ctx, SSL_OP_NO_SSLv2);
-            else if(strcasecmp(lin + matches[1].rm_so, "SSLv3") == 0)
-                SSL_CTX_set_options(res->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
+            if(0)
+              ;
 #ifdef SSL_OP_NO_TLSv1
             else if(strcasecmp(lin + matches[1].rm_so, "TLSv1") == 0)
                 SSL_CTX_set_options(res->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1);
@@ -407,6 +405,8 @@ parse_be(const int is_emergency)
             else if(strcasecmp(lin + matches[1].rm_so, "TLSv1_2") == 0)
                 SSL_CTX_set_options(res->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2);
 #endif
+            else
+              SSL_CTX_set_options(res->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
         } else if(!regexec(&Disabled, lin, 4, matches, 0)) {
             res->disabled = atoi(lin + matches[1].rm_so);
         } else if(!regexec(&End, lin, 4, matches, 0)) {
@@ -533,7 +533,7 @@ static IMPLEMENT_LHASH_HASH_FN(t, TABNODE)
 #else
 static IMPLEMENT_LHASH_HASH_FN(t_hash, const TABNODE *)
 #endif
+
 static int
 t_cmp(const TABNODE *d1, const TABNODE *d2)
 {
@@ -918,7 +918,7 @@ SNI_server_name(SSL *ssl, int *dummy, POUND_CTX *ctx)
             }
         }
     }
-    
+
     /* logmsg(LOG_DEBUG, "No match for %s, default used", server_name); */
     SSL_set_SSL_CTX(ssl, ctx->ctx);
     return SSL_TLSEXT_ERR_OK;
@@ -1150,10 +1150,8 @@ parse_HTTPS(void)
             }
         } else if(!regexec(&DisableProto, lin, 4, matches, 0)) {
             lin[matches[1].rm_eo] = '\0';
-            if(strcasecmp(lin + matches[1].rm_so, "SSLv2") == 0)
-                ssl_op_enable |= SSL_OP_NO_SSLv2;
-            else if(strcasecmp(lin + matches[1].rm_so, "SSLv3") == 0)
-                ssl_op_enable |= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
+            if(0)
+              ;
 #ifdef SSL_OP_NO_TLSv1
             else if(strcasecmp(lin + matches[1].rm_so, "TLSv1") == 0)
                 ssl_op_enable |= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1;
@@ -1166,6 +1164,8 @@ parse_HTTPS(void)
             else if(strcasecmp(lin + matches[1].rm_so, "TLSv1_2") == 0)
                 ssl_op_enable |= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
 #endif
+            else
+                ssl_op_enable |= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
         } else if(!regexec(&SSLAllowClientRenegotiation, lin, 4, matches, 0)) {
             res->allow_client_reneg = atoi(lin + matches[1].rm_so);
             if (res->allow_client_reneg == 2) {