mturk / rpms / openssl

Forked from rpms/openssl 3 years ago
Clone
e8799f0
Better error reporting for unsafe renegotiation.
e8799f0
diff -up openssl-1.0.0-beta4/ssl/ssl_err.c.reneg-err openssl-1.0.0-beta4/ssl/ssl_err.c
e8799f0
--- openssl-1.0.0-beta4/ssl/ssl_err.c.reneg-err	2009-11-09 19:45:42.000000000 +0100
e8799f0
+++ openssl-1.0.0-beta4/ssl/ssl_err.c	2009-11-20 17:56:57.000000000 +0100
e8799f0
@@ -226,7 +226,9 @@ static ERR_STRING_DATA SSL_str_functs[]=
e8799f0
 {ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE),	"SSL_load_client_CA_file"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_NEW),	"SSL_new"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT),	"SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"},
e8799f0
+{ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT),	"SSL_PARSE_CLIENTHELLO_TLSEXT"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT),	"SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"},
e8799f0
+{ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT),	"SSL_PARSE_SERVERHELLO_TLSEXT"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_PEEK),	"SSL_peek"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT),	"SSL_PREPARE_CLIENTHELLO_TLSEXT"},
e8799f0
 {ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT),	"SSL_PREPARE_SERVERHELLO_TLSEXT"},
e8799f0
@@ -526,6 +528,7 @@ static ERR_STRING_DATA SSL_str_reasons[]
e8799f0
 {ERR_REASON(SSL_R_UNKNOWN_REMOTE_ERROR_TYPE),"unknown remote error type"},
e8799f0
 {ERR_REASON(SSL_R_UNKNOWN_SSL_VERSION)   ,"unknown ssl version"},
e8799f0
 {ERR_REASON(SSL_R_UNKNOWN_STATE)         ,"unknown state"},
e8799f0
+{ERR_REASON(SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED),"unsafe legacy renegotiation disabled"},
e8799f0
 {ERR_REASON(SSL_R_UNSUPPORTED_CIPHER)    ,"unsupported cipher"},
e8799f0
 {ERR_REASON(SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM),"unsupported compression algorithm"},
e8799f0
 {ERR_REASON(SSL_R_UNSUPPORTED_DIGEST_TYPE),"unsupported digest type"},
e8799f0
diff -up openssl-1.0.0-beta4/ssl/ssl.h.reneg-err openssl-1.0.0-beta4/ssl/ssl.h
e8799f0
--- openssl-1.0.0-beta4/ssl/ssl.h.reneg-err	2009-11-12 15:17:29.000000000 +0100
e8799f0
+++ openssl-1.0.0-beta4/ssl/ssl.h	2009-11-20 17:56:57.000000000 +0100
e8799f0
@@ -1934,7 +1934,9 @@ void ERR_load_SSL_strings(void);
e8799f0
 #define SSL_F_SSL_LOAD_CLIENT_CA_FILE			 185
e8799f0
 #define SSL_F_SSL_NEW					 186
e8799f0
 #define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT	 300
e8799f0
+#define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT		 302
e8799f0
 #define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT	 301
e8799f0
+#define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT		 303
e8799f0
 #define SSL_F_SSL_PEEK					 270
e8799f0
 #define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT		 281
e8799f0
 #define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT		 282
e8799f0
@@ -2231,6 +2233,7 @@ void ERR_load_SSL_strings(void);
e8799f0
 #define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE			 253
e8799f0
 #define SSL_R_UNKNOWN_SSL_VERSION			 254
e8799f0
 #define SSL_R_UNKNOWN_STATE				 255
e8799f0
+#define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED	 338
e8799f0
 #define SSL_R_UNSUPPORTED_CIPHER			 256
e8799f0
 #define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM		 257
e8799f0
 #define SSL_R_UNSUPPORTED_DIGEST_TYPE			 326
e8799f0
diff -up openssl-1.0.0-beta4/ssl/s23_srvr.c.reneg-err openssl-1.0.0-beta4/ssl/s23_srvr.c
e8799f0
--- openssl-1.0.0-beta4/ssl/s23_srvr.c.reneg-err	2009-11-12 15:17:29.000000000 +0100
e8799f0
+++ openssl-1.0.0-beta4/ssl/s23_srvr.c	2009-11-20 17:57:23.000000000 +0100
e8799f0
@@ -497,6 +497,11 @@ int ssl23_get_client_hello(SSL *s)
e8799f0
 		SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNSUPPORTED_PROTOCOL);
e8799f0
 		goto err;
e8799f0
 #else
e8799f0
+		if (!(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
e8799f0
+			{
e8799f0
+			SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
e8799f0
+			goto err;
e8799f0
+			}
e8799f0
 		/* we are talking sslv2 */
e8799f0
 		/* we need to clean up the SSLv3/TLSv1 setup and put in the
e8799f0
 		 * sslv2 stuff. */
e8799f0
diff -up openssl-1.0.0-beta4/ssl/t1_lib.c.reneg-err openssl-1.0.0-beta4/ssl/t1_lib.c
e8799f0
--- openssl-1.0.0-beta4/ssl/t1_lib.c.reneg-err	2009-11-18 14:04:19.000000000 +0100
e8799f0
+++ openssl-1.0.0-beta4/ssl/t1_lib.c	2009-11-20 17:56:57.000000000 +0100
e8799f0
@@ -636,6 +636,7 @@ int ssl_parse_clienthello_tlsext(SSL *s,
e8799f0
 			{
e8799f0
 			/* We should always see one extension: the renegotiate extension */
e8799f0
 			*al = SSL_AD_ILLEGAL_PARAMETER; /* is this the right alert? */
e8799f0
+			SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
e8799f0
 			return 0;
e8799f0
 			}
e8799f0
 		return 1;
e8799f0
@@ -965,6 +966,7 @@ int ssl_parse_clienthello_tlsext(SSL *s,
e8799f0
  	if (s->new_session && !renegotiate_seen
e8799f0
  		&& !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
e8799f0
  		{
e8799f0
+		SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
e8799f0
  		*al = SSL_AD_ILLEGAL_PARAMETER; /* is this the right alert? */
e8799f0
  		return 0;
e8799f0
  		}
e8799f0
@@ -993,6 +995,7 @@ int ssl_parse_serverhello_tlsext(SSL *s,
e8799f0
 			{
e8799f0
 			/* We should always see one extension: the renegotiate extension */
e8799f0
 			*al = SSL_AD_ILLEGAL_PARAMETER; /* is this the right alert? */
e8799f0
+			SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
e8799f0
 			return 0;
e8799f0
 			}
e8799f0
 #endif
e8799f0
@@ -1133,6 +1136,7 @@ int ssl_parse_serverhello_tlsext(SSL *s,
e8799f0
 		&& !(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
e8799f0
 		{
e8799f0
 		*al = SSL_AD_ILLEGAL_PARAMETER; /* is this the right alert? */
e8799f0
+		SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
e8799f0
 		return 0;
e8799f0
 		}
e8799f0
 #endif