New issue
Advanced search Search tips

Issue 899994 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner: ----
Closed: Nov 2
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 2
Type: Bug-Regression



Sign in to add a comment

Fails to load with ERR_SSL_VERSION_INTERFERENCE error on localhost with self-signed certificate

Reported by e...@base10creations.com, Oct 29

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36

Example URL:

Steps to reproduce the problem:
1. Create self-signed certificate
2. Install and run local server with certificate

What is the expected behavior?
Should load

What went wrong?
When trying to access https://localhost:3000 I receive an error "ERR_SSL_VERSION_INTERFERENCE". 

Did this work before? Yes 69

Chrome version: 70.0.3538.77  Channel: stable
OS Version: OS X 10.12.6
Flash Version: 

Other browsers tested:
Safari Version 12.0 (12606.2.11): OK
Firefox 63.0: OK
Chrome Canary Version 72.0.3595.0 (Official Build) canary (64-bit): OK
Chrome Version 70.0.3538.77 (Official Build) (64-bit): FAIL

System Configuration: Mac OS X 10.12.6 on a MacBook Pro

Puma console log when attempting to access via Chrome 70:
SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:141F7065:SSL routines:final_key_share:no suitable key share - 337604709>
 
chrome-net-export-log.json
129 KB View Download
Labels: Needs-Triage-M70 Needs-Bisect
Components: -Internals>Network Internals>Network>SSL
Labels: Needs-Feedback
Can you please provide details about your 'puma' console log? Given that it mentions OpenSSL, what version of Puma, MiniSSL, and OpenSSL are you running?
Going by the OpenSSL error, it seems that OpenSSL complains your server has no ECDH curves in common with Chrome (we offer X25519, P-256, and P-384). In the NetLog, your TLS 1.2 connection is negotiating the obsolete TLS_RSA_WITH_AES_256_GCM_SHA384, rather than TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.

Thus it looks like your server is not configured to use a supported ECDH curve. This is recoverable in TLS 1.2 (at the cost of using less secure ciphers), but mandatory in TLS 1.3.

OpenSSL's defaults should include all of X25519, P-256, and P-384 (X25519 is recommended), so I'm guessing you or some other software you're using (Puma?) has disabled them for some reason.

Comment 5 Deleted

Project Member

Comment 6 by sheriffbot@chromium.org, Nov 1

Cc: rsleevi@chromium.org
Labels: -Needs-Feedback
Thank you for providing more feedback. Adding the requester to the cc list.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
I suspected that maybe creating the self-signed certificate with `OpenSSL 0.9.8zh 14 Jan 2016` (which is the default for macOS 10.12) may have been the issue, however, after setting up a new dev environment in macOS 10.14, and generating a new certificate with `LibreSSL 2.6.4` (which is the default for macOS 10.14), I sill am running into the same issue. 

I've also added an issue in the puma repo: https://github.com/puma/puma/issues/1670
Looks like the issue is this line here:
https://github.com/puma/puma/blob/72882f2319e65b371e1458069723279b3196a220/ext/puma_http11/mini_ssl.c#L193

P-521 is not a very common curve. It's not supported by Chrome or Edge. The immediate fix would be to use NID_X9_62_prime256v1 (P-256) instead, which is where most hardening work is focused.

But OpenSSL also has a fine set of defaults in 1.1.0, and an API to negotiate multiple curves. 1.0.2's defaults are a little large, but also fine. Thus, something like this may be better:

#if OPENSSL_VERSION_NUMBER < 0x10002000L
  // Remove this case if OpenSSL 1.0.1 (now EOL) support is no
  // longer needed.
  EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
  if (ecdh) {
    SSL_CTX_set_tmp_ecdh(ctx, ecdh);
    EC_KEY_free(ecdh);
  }
#elif OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
  // Prior to OpenSSL 1.1.0, servers must manually enable server-side ECDH
  // negotiation.
  SSL_CTX_set_ecdh_auto(ctx, 1);
#endif
Cc: phanindra.mandapaka@chromium.org
Labels: -Needs-Bisect Triaged-ET TE-NeedsTriageHelp
As per comment #0, This issue seems to be related to network specific issue.Hence, removing Needs-Bisect label and adding TE-NeedsTriageHelp as this is already being investigated.

Thanks..!
Labels: -TE-NeedsTriageHelp
Status: WontFix (was: Unconfirmed)
Closing this. It's a problem with the server software.

Sign in to add a comment