[erlang-questions] Handshake failure with DHE-DSS cipher suites
Per Hedeland
per@REDACTED
Mon May 14 19:54:00 CEST 2018
Hi,
For no other reason than the fact that our documentation claims that we
support all the ciphers listed by ssl:cipher_suites(openssl) (users can
select a subset by configuring a list of OpenSSL names), I actually have
a test that tries them individually, and in OTP 20 ssl:ssl_accept()
fails with {error, {tls_alert,"handshake failure"}} for all the DHE-DSS
suites - i.e.
DHE-DSS-AES256-SHA256
DHE-DSS-AES128-SHA256
DHE-DSS-AES256-SHA
DHE-DSS-AES128-SHA
DHE-DSS-AES256-GCM-SHA384
DHE-DSS-AES128-GCM-SHA256
a.k.a.
{dhe_dss,aes_256_cbc,sha256}
{dhe_dss,aes_128_cbc,sha256}
{dhe_dss,aes_256_cbc,sha}
{dhe_dss,aes_128_cbc,sha}
{dhe_dss,aes_256_gcm,aead,sha384}
{dhe_dss,aes_128_gcm,aead,sha256}
After debugging a bit with the first one, I found that the failure was
due to a function_clause error, and that this change made it work:
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -505,7 +505,9 @@ pkix_sign_types(?'ecdsa-with-SHA256') ->
pkix_sign_types(?'ecdsa-with-SHA384') ->
{sha384, ecdsa};
pkix_sign_types(?'ecdsa-with-SHA512') ->
- {sha512, ecdsa}.
+ {sha512, ecdsa};
+pkix_sign_types({2,16,840,1,101,3,4,3,2}) ->
+ {sha256, dsa}.
%%--------------------------------------------------------------------
-spec sign(binary() | {digest, binary()},
Some googling indicates that the oid-tuple could reasonably be named
'id-dsa-with-sha256', no real surprise there - a bit more surprising is
that the change actually makes *all* of those suites work. Now, I don't
really know what I'm doing here, so: Is this just an omission in the
public_key code and the above a reasonable fix, or is there some
fundamental reason that pkix_sign_types/1 shouldn't handle that oid?
(And if the latter, how can the DHE-DSS suites be made to work without
it?)
The test was run with 'openssl s_client' connecting to 20.3.6 - I can't
easily plug 21.0-rc1 into the test, but it seems at least
public_key:pkix_sign_types/1 is the same there.
Thanks
--Per Hedeland
More information about the erlang-questions
mailing list