Changes according to review comments
diff --git a/include/mbedtls/ssl.h b/include/mbedtls/ssl.h
index bc42d54..d219322 100644
--- a/include/mbedtls/ssl.h
+++ b/include/mbedtls/ssl.h
@@ -2831,16 +2831,21 @@
* \brief Enable or disable Extended Master Secret enforcing.
* (Default: MBEDTLS_SSL_EXTENDED_MS_ENFORCE_DISABLED)
*
- * \note This enforces the peer to use the Extended Master Secret
- * extension, if the option is enabled and the peer doesn't
- * support the extension, the connection is dropped.
+ * \note If the use of extended master secret is configured (see
+ * `mbedtls_ssl_conf_extended_master_secret()`) and this
+ * option is set, handshakes not leading to the use of the
+ * extended master secret will be aborted: On the server, fail
+ * the handshake if the client doesn't advertise the
+ * ExtendedMasterSecret extension. On the client: Fail the
+ * handshake if the server doesn't consent to the use of the
+ * ExtendedMasterSecret extension in its ServerHello.
*
- * \param conf SSL configuration
+ * \param conf Currently used SSL configuration struct.
* \param ems_enf MBEDTLS_SSL_EXTENDED_MS_ENFORCE_ENABLED or
* MBEDTLS_SSL_EXTENDED_MS_ENFORCE_DISABLED
*/
void mbedtls_ssl_conf_extended_master_secret_enforce( mbedtls_ssl_config *conf,
- char ems_enf );
+ char ems_enf );
#endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
#if defined(MBEDTLS_ARC4_C)
diff --git a/library/ssl_cli.c b/library/ssl_cli.c
index 64870b1..2cf9c79 100644
--- a/library/ssl_cli.c
+++ b/library/ssl_cli.c
@@ -2097,7 +2097,7 @@
if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED &&
ssl->conf->enforce_extended_master_secret ==
MBEDTLS_SSL_EXTENDED_MS_ENFORCE_ENABLED &&
- ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED)
+ ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED )
{
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Peer not offering extended master "
"secret, while it is enforced") );
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 0c65d85..14202d8 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -2031,7 +2031,7 @@
if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED &&
ssl->conf->enforce_extended_master_secret ==
MBEDTLS_SSL_EXTENDED_MS_ENFORCE_ENABLED &&
- ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED)
+ ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED )
{
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Peer not offering extended master "
"secret, while it is enforced") );
diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh
index b87a684..531d96a 100755
--- a/tests/ssl-opt.sh
+++ b/tests/ssl-opt.sh
@@ -1763,7 +1763,7 @@
# Tests for Extended Master Secret extension
-run_test "Extended Master Secret enforced: default" \
+run_test "Extended Master Secret: default (both enabled, both enforcing)" \
"$P_SRV debug_level=3 enforce_extended_master_secret=1" \
"$P_CLI debug_level=3 enforce_extended_master_secret=1" \
0 \
@@ -1774,8 +1774,30 @@
-c "session hash for extended master secret" \
-s "session hash for extended master secret"
-run_test "Extended Master Secret enforced: client enabled, server disabled" \
- "$P_SRV debug_level=3 extended_ms=0 enforce_extended_master_secret=1" \
+run_test "Extended Master Secret: both enabled, client enforcing" \
+ "$P_SRV debug_level=3 enforce_extended_master_secret=0" \
+ "$P_CLI debug_level=3 enforce_extended_master_secret=1" \
+ 0 \
+ -c "client hello, adding extended_master_secret extension" \
+ -s "found extended master secret extension" \
+ -s "server hello, adding extended master secret extension" \
+ -c "found extended_master_secret extension" \
+ -c "session hash for extended master secret" \
+ -s "session hash for extended master secret"
+
+run_test "Extended Master Secret: both enabled, server enforcing" \
+ "$P_SRV debug_level=3 enforce_extended_master_secret=1" \
+ "$P_CLI debug_level=3 enforce_extended_master_secret=0" \
+ 0 \
+ -c "client hello, adding extended_master_secret extension" \
+ -s "found extended master secret extension" \
+ -s "server hello, adding extended master secret extension" \
+ -c "found extended_master_secret extension" \
+ -c "session hash for extended master secret" \
+ -s "session hash for extended master secret"
+
+run_test "Extended Master Secret: client enabled, server disabled, client enforcing" \
+ "$P_SRV debug_level=3 extended_ms=0" \
"$P_CLI debug_level=3 extended_ms=1 enforce_extended_master_secret=1" \
1 \
-c "client hello, adding extended_master_secret extension" \
@@ -1784,9 +1806,9 @@
-C "found extended_master_secret extension" \
-c "Peer not offering extended master secret, while it is enforced"
-run_test "Extended Master Secret enforced: client disabled, server enabled" \
+run_test "Extended Master Secret enforced: client disabled, server enabled, server enforcing" \
"$P_SRV debug_level=3 extended_ms=1 enforce_extended_master_secret=1" \
- "$P_CLI debug_level=3 extended_ms=0 enforce_extended_master_secret=1" \
+ "$P_CLI debug_level=3 extended_ms=0" \
1 \
-C "client hello, adding extended_master_secret extension" \
-S "found extended master secret extension" \
@@ -1794,7 +1816,7 @@
-C "found extended_master_secret extension" \
-s "Peer not offering extended master secret, while it is enforced"
-run_test "Extended Master Secret not enforced: default" \
+run_test "Extended Master Secret: default (not enforcing)" \
"$P_SRV debug_level=3" \
"$P_CLI debug_level=3" \
0 \
@@ -1805,7 +1827,7 @@
-c "session hash for extended master secret" \
-s "session hash for extended master secret"
-run_test "Extended Master Secret not enforced: client enabled, server disabled" \
+run_test "Extended Master Secret: client enabled, server disabled, not enforcing" \
"$P_SRV debug_level=3 extended_ms=0" \
"$P_CLI debug_level=3 extended_ms=1" \
0 \
@@ -1816,7 +1838,7 @@
-C "session hash for extended master secret" \
-S "session hash for extended master secret"
-run_test "Extended Master Secret not enforced: client disabled, server enabled" \
+run_test "Extended Master Secret: client disabled, server enabled, not enforcing" \
"$P_SRV debug_level=3 extended_ms=1" \
"$P_CLI debug_level=3 extended_ms=0" \
0 \
@@ -1827,6 +1849,17 @@
-C "session hash for extended master secret" \
-S "session hash for extended master secret"
+run_test "Extended Master Secret: client disabled, server disabled" \
+ "$P_SRV debug_level=3 extended_ms=0" \
+ "$P_CLI debug_level=3 extended_ms=0" \
+ 0 \
+ -C "client hello, adding extended_master_secret extension" \
+ -S "found extended master secret extension" \
+ -S "server hello, adding extended master secret extension" \
+ -C "found extended_master_secret extension" \
+ -C "session hash for extended master secret" \
+ -S "session hash for extended master secret"
+
requires_config_enabled MBEDTLS_SSL_PROTO_SSL3
run_test "Extended Master Secret: client SSLv3, server enabled" \
"$P_SRV debug_level=3 min_version=ssl3" \