diff options
author | Paul Guyot <[email protected]> | 2010-08-04 11:44:41 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-08-18 13:36:42 +0200 |
commit | 60b61d948a472fc7c519bba25aefc409b28d08e8 (patch) | |
tree | e7060ae7d54220cf6dc1be14b60add0ae4133353 /lib/ssl/src | |
parent | 0d553b45b5c3ae8287340887f271bc70f1f1370c (diff) | |
download | otp-60b61d948a472fc7c519bba25aefc409b28d08e8.tar.gz otp-60b61d948a472fc7c519bba25aefc409b28d08e8.tar.bz2 otp-60b61d948a472fc7c519bba25aefc409b28d08e8.zip |
Fix bug in ssl handshake protocol related to the choice of cipher suites
in client hello message when a client certificate is used
The client hello message now always include ALL available cipher suites
(or those specified by the ciphers option). Previous implementation would
filter them based on the client certificate key usage extension (such
filtering only makes sense for the server certificate).
Diffstat (limited to 'lib/ssl/src')
-rw-r--r-- | lib/ssl/src/ssl_handshake.erl | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl index fcc30f6137..44e20fed30 100644 --- a/lib/ssl/src/ssl_handshake.erl +++ b/lib/ssl/src/ssl_handshake.erl @@ -64,7 +64,7 @@ client_hello(Host, Port, ConnectionStates, #ssl_options{versions = Versions, Version = ssl_record:highest_protocol_version(lists:map(Fun, Versions)), Pending = ssl_record:pending_connection_state(ConnectionStates, read), SecParams = Pending#connection_state.security_parameters, - Ciphers = available_suites(Cert, UserSuites, Version), + Ciphers = available_suites(UserSuites, Version), Id = ssl_manager:client_session_id(Host, Port, SslOpts), @@ -524,13 +524,16 @@ select_session(Hello, Port, Session, Version, {resumed, CacheCb:lookup(Cache, {Port, SessionId})} end. -available_suites(Cert, UserSuites, Version) -> +available_suites(UserSuites, Version) -> case UserSuites of [] -> - ssl_cipher:filter(Cert, ssl_cipher:suites(Version)); + ssl_cipher:suites(Version); _ -> - ssl_cipher:filter(Cert, UserSuites) + UserSuites end. + +available_suites(ServerCert, UserSuites, Version) -> + ssl_cipher:filter(ServerCert, available_suites(UserSuites, Version)). cipher_suites(Suites, false) -> [?TLS_EMPTY_RENEGOTIATION_INFO_SCSV | Suites]; |