Added build option to enforce check for cipher suite in server_hello from server. Enabled using WOLFSSL_STRICT_CIPHER_SUITE. Some cipher suites could be allowed if they were supported a build-time even though not sent in the cipher suite list in client_hello.

Example log output for test case where `client_hello` sent a cipher suite list and server choose a cipher suite not in the list:

```
wolfSSL Entering DoServerHello
ServerHello did not use cipher suite from ClientHello
wolfSSL Leaving DoHandShakeMsgType(), return -501
wolfSSL Leaving DoHandShakeMsg(), return -501
```

RFC 5246: 7.4.1.3: Server Hello:  `cipher_suite: The single cipher suite selected by the server from the list in ClientHello.cipher_suites.`
This commit is contained in:
David Garske
2019-08-13 15:56:19 -07:00
parent 0a4ac0e380
commit e75417fde1

View File

@ -18172,6 +18172,23 @@ exit_dpk:
ssl->options.cipherSuite = cs1;
compression = input[i++];
#ifdef WOLFSSL_STRICT_CIPHER_SUITE
{
word32 idx, found = 0;
/* confirm server_hello cipher suite is one sent in client_hello */
for (idx = 0; idx < ssl->suites->suiteSz; idx += 2) {
if (ssl->suites->suites[idx] == cs0 &&
ssl->suites->suites[idx+1] == cs1) {
found = idx;
}
}
if (!found) {
WOLFSSL_MSG("ServerHello did not use cipher suite from ClientHello");
return MATCH_SUITE_ERROR;
}
}
#endif
if (compression != NO_COMPRESSION && !ssl->options.usingCompression) {
WOLFSSL_MSG("Server forcing compression w/o support");
return COMPRESSION_ERROR;