提交 837f2fc7 编写于 作者: B Bodo Möller

Make sure that SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG can't

enable disabled ciphersuites.
上级 1a489c9a
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
OpenSSL CHANGES OpenSSL CHANGES
_______________ _______________
Changes between 0.9.8i and 0.9.9 [xx XXX xxxx] Changes between 0.9.8j and 0.9.9 [xx XXX xxxx]
*) Delta CRL support. New use deltas option which will attempt to locate *) Delta CRL support. New use deltas option which will attempt to locate
and search any appropriate delta CRLs available. and search any appropriate delta CRLs available.
...@@ -703,6 +703,15 @@ ...@@ -703,6 +703,15 @@
*) Change 'Configure' script to enable Camellia by default. *) Change 'Configure' script to enable Camellia by default.
[NTT] [NTT]
Changes between 0.9.8i and 0.9.8j [xx XXX xxxx]
*) Change the server-side SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG behavior
to ensure that even with this option, only ciphersuites in the
server's preference list will be accepted. (Note that the option
applies only when resuming a session, so the earlier behavior was
just about the algorithm choice for symmetric cryptography.)
[Bodo Moeller]
Changes between 0.9.8h and 0.9.8i [15 Sep 2008] Changes between 0.9.8h and 0.9.8i [15 Sep 2008]
*) Fix a state transitition in s3_srvr.c and d1_srvr.c *) Fix a state transitition in s3_srvr.c and d1_srvr.c
......
...@@ -947,22 +947,28 @@ int ssl3_get_client_hello(SSL *s) ...@@ -947,22 +947,28 @@ int ssl3_get_client_hello(SSL *s)
break; break;
} }
} }
if (j == 0) if (j == 0 && (s->options & SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) && (sk_SSL_CIPHER_num(ciphers) == 1))
{ {
if ((s->options & SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) && (sk_SSL_CIPHER_num(ciphers) == 1)) /* Special case as client bug workaround: the previously used cipher may
* not be in the current list, the client instead might be trying to
* continue using a cipher that before wasn't chosen due to server
* preferences. We'll have to reject the connection if the cipher is not
* enabled, though. */
c = sk_SSL_CIPHER_value(ciphers, 0);
if (sk_SSL_CIPHER_find(SSL_get_ciphers(s), c) >= 0)
{ {
/* Very bad for multi-threading.... */ s->session->cipher = c;
s->session->cipher=sk_SSL_CIPHER_value(ciphers, 0); j = 1;
}
else
{
/* we need to have the cipher in the cipher
* list if we are asked to reuse it */
al=SSL_AD_ILLEGAL_PARAMETER;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_REQUIRED_CIPHER_MISSING);
goto f_err;
} }
} }
if (j == 0)
{
/* we need to have the cipher in the cipher
* list if we are asked to reuse it */
al=SSL_AD_ILLEGAL_PARAMETER;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,SSL_R_REQUIRED_CIPHER_MISSING);
goto f_err;
}
} }
/* compression */ /* compression */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册