diff options
| author | guenther <> | 2014-04-16 15:10:07 +0000 |
|---|---|---|
| committer | guenther <> | 2014-04-16 15:10:07 +0000 |
| commit | e99c4231309dcede4f056c21685507d8f0400bb4 (patch) | |
| tree | cd6b7bd17edfb25d9928b1c38f811f45391e4e97 /src/lib/libssl/ssl_sess.c | |
| parent | 0dc5f46224428f0ddf61596a00e25ce0e1ba18d4 (diff) | |
| download | openbsd-e99c4231309dcede4f056c21685507d8f0400bb4.tar.gz openbsd-e99c4231309dcede4f056c21685507d8f0400bb4.tar.bz2 openbsd-e99c4231309dcede4f056c21685507d8f0400bb4.zip | |
Kill the bogus "send an SSLv3/TLS hello in SSLv2 format" crap from
the SSLv23_* client code. The server continues to accept it. It
also kills the bits for SSL2 SESSIONs; even when the server gets
an SSLv2-style compat handshake, the session that it creates has
the correct version internally.
ok tedu@ beck@
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/ssl_sess.c | 40 |
1 files changed, 13 insertions, 27 deletions
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c index b29115862b..0b1c655820 100644 --- a/src/lib/libssl/ssl_sess.c +++ b/src/lib/libssl/ssl_sess.c | |||
| @@ -301,29 +301,19 @@ ssl_get_new_session(SSL *s, int session) | |||
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | if (session) { | 303 | if (session) { |
| 304 | if (s->version == SSL2_VERSION) { | 304 | switch (s->version) { |
| 305 | ss->ssl_version = SSL2_VERSION; | 305 | case SSL3_VERSION: |
| 306 | ss->session_id_length = SSL2_SSL_SESSION_ID_LENGTH; | 306 | case TLS1_VERSION: |
| 307 | } else if (s->version == SSL3_VERSION) { | 307 | case TLS1_1_VERSION: |
| 308 | ss->ssl_version = SSL3_VERSION; | 308 | case TLS1_2_VERSION: |
| 309 | case DTLS1_BAD_VER: | ||
| 310 | case DTLS1_VERSION: | ||
| 311 | ss->ssl_version = s->version; | ||
| 309 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | 312 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; |
| 310 | } else if (s->version == TLS1_VERSION) { | 313 | break; |
| 311 | ss->ssl_version = TLS1_VERSION; | 314 | default: |
| 312 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | 315 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, |
| 313 | } else if (s->version == TLS1_1_VERSION) { | 316 | SSL_R_UNSUPPORTED_SSL_VERSION); |
| 314 | ss->ssl_version = TLS1_1_VERSION; | ||
| 315 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | ||
| 316 | } else if (s->version == TLS1_2_VERSION) { | ||
| 317 | ss->ssl_version = TLS1_2_VERSION; | ||
| 318 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | ||
| 319 | } else if (s->version == DTLS1_BAD_VER) { | ||
| 320 | ss->ssl_version = DTLS1_BAD_VER; | ||
| 321 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | ||
| 322 | } else if (s->version == DTLS1_VERSION) { | ||
| 323 | ss->ssl_version = DTLS1_VERSION; | ||
| 324 | ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; | ||
| 325 | } else { | ||
| 326 | SSLerr(SSL_F_SSL_GET_NEW_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION); | ||
| 327 | SSL_SESSION_free(ss); | 317 | SSL_SESSION_free(ss); |
| 328 | return (0); | 318 | return (0); |
| 329 | } | 319 | } |
| @@ -359,11 +349,7 @@ ssl_get_new_session(SSL *s, int session) | |||
| 359 | SSL_SESSION_free(ss); | 349 | SSL_SESSION_free(ss); |
| 360 | return (0); | 350 | return (0); |
| 361 | } | 351 | } |
| 362 | /* If the session length was shrunk and we're SSLv2, pad it */ | 352 | ss->session_id_length = tmp; |
| 363 | if ((tmp < ss->session_id_length) && (s->version == SSL2_VERSION)) | ||
| 364 | memset(ss->session_id + tmp, 0, ss->session_id_length - tmp); | ||
| 365 | else | ||
| 366 | ss->session_id_length = tmp; | ||
| 367 | /* Finally, check for a conflict */ | 353 | /* Finally, check for a conflict */ |
| 368 | if (SSL_has_matching_session_id(s, ss->session_id, | 354 | if (SSL_has_matching_session_id(s, ss->session_id, |
| 369 | ss->session_id_length)) { | 355 | ss->session_id_length)) { |
