OTP 22.1 ssl env protocol_version causes malformed_handshake_data alert
Danil Zagoskin
z@REDACTED
Thu Oct 24 17:23:04 CEST 2019
Hi!
While upgrading to OTP 22.1 I've hit an issue with ssl.
The problem: when connecting to a TLS server with a client certificate,
'ssl_handshake:select_hashsign' may fail with '{error,badarg}',
causing 'Handshake Failure - malformed_handshake_data'
This happens because 'SupportedHashSigns = undefined',
which comes from 'ssl:handle_options' in 'ssl_connection:init'.
signature_algs = handle_option(signature_algs, Opts, undefined, Role,
undefined, HighestVersion),
^^^ this returns 'undefined' because
'tls_v1:default_signature_algs(HighestVersion)' returns 'undefined'
And the problem here was 'HighestVersion = {3,1}' which seemed wrong.
When 'versions' option is not passed, HighestVersion is the head of list
returned from 'tls_record:supported_protocol_versions()',
and that function just maps 'protocol_version' environment parameter.
If the first version specified in environment is low, the 'HighestVersion'
will contain not a highest version.
So, after setting default ssl protocol versions like this:
'application:set_env(ssl, protocol_version, [tlsv1,'tlsv1.1','tlsv1.2']).'
the client raises an alert while handling '#certificate_request{}' from
server.
OTP 21 and earlier tolerated the version order in 'protocol_version' env,
and the code was like this:
signature_algs =
handle_hashsigns_option(...,
tls_version(RecordCb:highest_protocol_version(Versions)))
If the new behaviour is intended, it may be useful to describe it in the
man page:
http://erlang.org/doc/man/ssl_app.html
If 'HighestVersion' should always contain a highest version, the obvious
(but may be not the best) fix is to sort default versions in
'ssl:handle_options',
like it is done for specified 'versions'.
Obvious workaround for this is to store 'protocol_version' env parameter
starting from highest version.
--
Danil Zagoskin | z@REDACTED
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20191024/c9b196b5/attachment.htm>
More information about the erlang-questions
mailing list