Merge pull request #1232 from dgarske/disable_oldtls_v1_0

Disable TLS v1.0 by default
This commit is contained in:
toddouska
2017-11-16 13:49:03 -08:00
committed by GitHub
10 changed files with 96 additions and 61 deletions

View File

@@ -1413,6 +1413,19 @@ else
fi fi
# TLSv1.0
AC_ARG_ENABLE([tlsv10],
[AS_HELP_STRING([--enable-tlsv10],[Enable old TLS versions 1.0 (default: disabled)])],
[ ENABLED_TLSV10=$enableval ],
[ ENABLED_TLSV10=no ]
)
if test "$ENABLED_TLSV10" = "yes"
then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ALLOW_TLSV10"
fi
# SSLv3 # SSLv3
AC_ARG_ENABLE([sslv3], AC_ARG_ENABLE([sslv3],
[AS_HELP_STRING([--enable-sslv3],[Enable SSL version 3.0 (default: disabled)])], [AS_HELP_STRING([--enable-sslv3],[Enable SSL version 3.0 (default: disabled)])],
@@ -4123,6 +4136,7 @@ echo " * SCTP: $ENABLED_SCTP"
echo " * Multicast: $ENABLED_MCAST" echo " * Multicast: $ENABLED_MCAST"
echo " * Old TLS Versions: $ENABLED_OLD_TLS" echo " * Old TLS Versions: $ENABLED_OLD_TLS"
echo " * SSL version 3.0: $ENABLED_SSLV3" echo " * SSL version 3.0: $ENABLED_SSLV3"
echo " * TLS v1.0: $ENABLED_TLSV10"
echo " * TLS v1.3: $ENABLED_TLS13" echo " * TLS v1.3: $ENABLED_TLS13"
echo " * TLS v1.3 Draft 18: $ENABLED_TLS13_DRAFT18" echo " * TLS v1.3 Draft 18: $ENABLED_TLS13_DRAFT18"
echo " * Post-handshake Auth: $ENABLED_TLS13_POST_AUTH" echo " * Post-handshake Auth: $ENABLED_TLS13_POST_AUTH"

View File

@@ -172,10 +172,17 @@ static void ShowVersions(void)
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS
#ifdef WOLFSSL_ALLOW_SSLV3 #ifdef WOLFSSL_ALLOW_SSLV3
printf("0:"); printf("0:");
#endif /* WOLFSSL_ALLOW_SSLV3 */ #endif
printf("1:2:"); #ifdef WOLFSSL_ALLOW_TLSV10
printf("1:");
#endif
printf("2:");
#endif /* NO_OLD_TLS */ #endif /* NO_OLD_TLS */
printf("3\n"); printf("3:");
#ifdef WOLFSSL_TLS13
printf("4:");
#endif
printf("\n");
} }
/* Measures average time to create, connect and disconnect a connection (TPS). /* Measures average time to create, connect and disconnect a connection (TPS).
@@ -1394,27 +1401,29 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
#endif #endif
#ifndef NO_TLS #ifndef NO_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
case 1: case 1:
method = wolfTLSv1_client_method_ex; method = wolfTLSv1_client_method_ex;
break; break;
#endif
case 2: case 2:
method = wolfTLSv1_1_client_method_ex; method = wolfTLSv1_1_client_method_ex;
break; break;
#endif /* NO_TLS */ #endif /* !NO_TLS */
#endif /* !NO_OLD_TLS */
#endif /* NO_OLD_TLS */
#ifndef NO_TLS #ifndef NO_TLS
case 3: case 3:
method = wolfTLSv1_2_client_method_ex; method = wolfTLSv1_2_client_method_ex;
break; break;
#ifdef WOLFSSL_TLS13 #ifdef WOLFSSL_TLS13
case 4: case 4:
method = wolfTLSv1_3_client_method_ex; method = wolfTLSv1_3_client_method_ex;
break; break;
#endif #endif
#endif #endif /* NO_TLS */
#ifdef WOLFSSL_DTLS #ifdef WOLFSSL_DTLS
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS

View File

@@ -877,29 +877,29 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
#endif #endif
#ifndef NO_TLS #ifndef NO_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
case 1: case 1:
method = wolfTLSv1_server_method_ex; method = wolfTLSv1_server_method_ex;
break; break;
#endif
case 2: case 2:
method = wolfTLSv1_1_server_method_ex; method = wolfTLSv1_1_server_method_ex;
break; break;
#endif /* !NO_TLS */
#endif #endif /* !NO_OLD_TLS */
#endif
#ifndef NO_TLS #ifndef NO_TLS
case 3: case 3:
method = wolfTLSv1_2_server_method_ex; method = wolfTLSv1_2_server_method_ex;
break; break;
#endif
#ifdef WOLFSSL_TLS13 #ifdef WOLFSSL_TLS13
case 4: case 4:
method = wolfTLSv1_3_server_method_ex; method = wolfTLSv1_3_server_method_ex;
break; break;
#endif #endif
#endif /* NO_TLS */
#ifdef CYASSL_DTLS #ifdef CYASSL_DTLS
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS

View File

@@ -1288,7 +1288,7 @@ static int SetNamedPrivateKey(const char* name, const char* address, int port,
sniffer->server = serverIp; sniffer->server = serverIp;
sniffer->port = port; sniffer->port = port;
sniffer->ctx = SSL_CTX_new(TLSv1_client_method()); sniffer->ctx = SSL_CTX_new(TLSv1_2_client_method());
if (!sniffer->ctx) { if (!sniffer->ctx) {
SetError(MEMORY_STR, error, NULL, 0); SetError(MEMORY_STR, error, NULL, 0);
#ifdef HAVE_SNI #ifdef HAVE_SNI

View File

@@ -3663,9 +3663,11 @@ int wolfSSL_SetVersion(WOLFSSL* ssl, int version)
#ifndef NO_TLS #ifndef NO_TLS
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
case WOLFSSL_TLSV1: case WOLFSSL_TLSV1:
ssl->version = MakeTLSv1(); ssl->version = MakeTLSv1();
break; break;
#endif
case WOLFSSL_TLSV1_1: case WOLFSSL_TLSV1_1:
ssl->version = MakeTLSv1_1(); ssl->version = MakeTLSv1_1();

View File

@@ -428,6 +428,7 @@ int BuildTlsFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender)
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
ProtocolVersion MakeTLSv1(void) ProtocolVersion MakeTLSv1(void)
{ {
ProtocolVersion pv; ProtocolVersion pv;
@@ -436,6 +437,7 @@ ProtocolVersion MakeTLSv1(void)
return pv; return pv;
} }
#endif /* WOLFSSL_ALLOW_TLSV10 */
ProtocolVersion MakeTLSv1_1(void) ProtocolVersion MakeTLSv1_1(void)
@@ -447,7 +449,7 @@ ProtocolVersion MakeTLSv1_1(void)
return pv; return pv;
} }
#endif #endif /* !NO_OLD_TLS */
ProtocolVersion MakeTLSv1_2(void) ProtocolVersion MakeTLSv1_2(void)
@@ -8635,18 +8637,12 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
#ifndef NO_WOLFSSL_CLIENT #ifndef NO_WOLFSSL_CLIENT
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
WOLFSSL_METHOD* wolfTLSv1_client_method(void) WOLFSSL_METHOD* wolfTLSv1_client_method(void)
{ {
return wolfTLSv1_client_method_ex(NULL); return wolfTLSv1_client_method_ex(NULL);
} }
WOLFSSL_METHOD* wolfTLSv1_1_client_method(void)
{
return wolfTLSv1_1_client_method_ex(NULL);
}
WOLFSSL_METHOD* wolfTLSv1_client_method_ex(void* heap) WOLFSSL_METHOD* wolfTLSv1_client_method_ex(void* heap)
{ {
WOLFSSL_METHOD* method = WOLFSSL_METHOD* method =
@@ -8656,7 +8652,12 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
InitSSL_Method(method, MakeTLSv1()); InitSSL_Method(method, MakeTLSv1());
return method; return method;
} }
#endif /* WOLFSSL_ALLOW_TLSV10 */
WOLFSSL_METHOD* wolfTLSv1_1_client_method(void)
{
return wolfTLSv1_1_client_method_ex(NULL);
}
WOLFSSL_METHOD* wolfTLSv1_1_client_method_ex(void* heap) WOLFSSL_METHOD* wolfTLSv1_1_client_method_ex(void* heap)
{ {
@@ -8753,18 +8754,12 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
#ifndef NO_WOLFSSL_SERVER #ifndef NO_WOLFSSL_SERVER
#ifndef NO_OLD_TLS #ifndef NO_OLD_TLS
#ifdef WOLFSSL_ALLOW_TLSV10
WOLFSSL_METHOD* wolfTLSv1_server_method(void) WOLFSSL_METHOD* wolfTLSv1_server_method(void)
{ {
return wolfTLSv1_server_method_ex(NULL); return wolfTLSv1_server_method_ex(NULL);
} }
WOLFSSL_METHOD* wolfTLSv1_1_server_method(void)
{
return wolfTLSv1_1_server_method_ex(NULL);
}
WOLFSSL_METHOD* wolfTLSv1_server_method_ex(void* heap) WOLFSSL_METHOD* wolfTLSv1_server_method_ex(void* heap)
{ {
WOLFSSL_METHOD* method = WOLFSSL_METHOD* method =
@@ -8776,7 +8771,12 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte msgType,
} }
return method; return method;
} }
#endif /* WOLFSSL_ALLOW_TLSV10 */
WOLFSSL_METHOD* wolfTLSv1_1_server_method(void)
{
return wolfTLSv1_1_server_method_ex(NULL);
}
WOLFSSL_METHOD* wolfTLSv1_1_server_method_ex(void* heap) WOLFSSL_METHOD* wolfTLSv1_1_server_method_ex(void* heap)
{ {

View File

@@ -271,8 +271,10 @@ static void test_wolfSSL_Method_Allocators(void)
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_server_method); TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_server_method);
TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_client_method); TEST_VALID_METHOD_ALLOCATOR(wolfSSLv3_client_method);
#endif #endif
#ifdef WOLFSL_ALLOW_TLSV10
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_server_method); TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_server_method);
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_client_method); TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_client_method);
#endif
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_server_method); TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_server_method);
TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_client_method); TEST_VALID_METHOD_ALLOCATOR(wolfTLSv1_1_client_method);
#endif #endif

View File

@@ -37,7 +37,8 @@
#define MAX_COMMAND_SZ 240 #define MAX_COMMAND_SZ 240
#define MAX_SUITE_SZ 80 #define MAX_SUITE_SZ 80
#define NOT_BUILT_IN -123 #define NOT_BUILT_IN -123
#if defined(NO_OLD_TLS) || !defined(WOLFSSL_ALLOW_SSLV3) #if defined(NO_OLD_TLS) || !defined(WOLFSSL_ALLOW_SSLV3) || \
!defined(WOLFSSL_ALLOW_TLSV10)
#define VERSION_TOO_OLD -124 #define VERSION_TOO_OLD -124
#endif #endif
@@ -61,49 +62,48 @@ static char forceDefCipherListFlag[] = "-HdefCipherList";
#endif #endif
#ifndef WOLFSSL_ALLOW_SSLV3 #ifdef VERSION_TOO_OLD
/* if the protocol version is sslv3 return 1, else 0 */ static int GetTlsVersion(const char* line)
static int IsSslVersion(const char* line)
{ {
int version = -1;
const char* find = "-v "; const char* find = "-v ";
const char* begin = strstr(line, find); const char* begin = strstr(line, find);
if (begin) { if (begin) {
int version = -1;
begin += 3; begin += 3;
version = atoi(begin); version = atoi(begin);
}
if (version == 0) return version;
return 1;
} }
return 0; #ifndef WOLFSSL_ALLOW_SSLV3
/* if the protocol version is sslv3 return 1, else 0 */
static int IsSslVersion(const char* line)
{
int version = GetTlsVersion(line);
return (version == 0) ? 1 : 0;
} }
#endif /* !WOLFSSL_ALLOW_SSLV3 */ #endif /* !WOLFSSL_ALLOW_SSLV3 */
#ifndef WOLFSSL_ALLOW_TLSV10
/* if the protocol version is TLSv1.0 return 1, else 0 */
static int IsTls10Version(const char* line)
{
int version = GetTlsVersion(line);
return (version == 1) ? 1 : 0;
}
#endif /* !WOLFSSL_ALLOW_TLSV10 */
#ifdef NO_OLD_TLS #ifdef NO_OLD_TLS
/* if the protocol version is less than tls 1.2 return 1, else 0 */ /* if the protocol version is less than tls 1.2 return 1, else 0 */
static int IsOldTlsVersion(const char* line) static int IsOldTlsVersion(const char* line)
{ {
const char* find = "-v "; int version = GetTlsVersion(line);
const char* begin = strstr(line, find); return (version < 3) ? 1 : 0;
if (begin) {
int version = -1;
begin += 3;
version = atoi(begin);
if (version < 3)
return 1;
}
return 0;
} }
#endif /* NO_OLD_TLS */ #endif /* NO_OLD_TLS */
#endif /* VERSION_TOO_OLD */
/* if the cipher suite on line is valid store in suite and return 1, else 0 */ /* if the cipher suite on line is valid store in suite and return 1, else 0 */
@@ -214,6 +214,14 @@ static int execute_test_case(int svr_argc, char** svr_argv,
return VERSION_TOO_OLD; return VERSION_TOO_OLD;
} }
#endif #endif
#ifndef WOLFSSL_ALLOW_TLSV10
if (IsTls10Version(commandLine) == 1) {
#ifdef DEBUG_SUITE_TESTS
printf("protocol version on line %s is too old\n", commandLine);
#endif
return VERSION_TOO_OLD;
}
#endif
#ifdef NO_OLD_TLS #ifdef NO_OLD_TLS
if (IsOldTlsVersion(commandLine) == 1) { if (IsOldTlsVersion(commandLine) == 1) {
#ifdef DEBUG_SUITE_TESTS #ifdef DEBUG_SUITE_TESTS