Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configuration issues identified by SSL Labs #49

Open
LiberalArtist opened this issue Jan 3, 2019 · 3 comments
Open

Configuration issues identified by SSL Labs #49

LiberalArtist opened this issue Jan 3, 2019 · 3 comments

Comments

@LiberalArtist
Copy link
Contributor

The SSL Labs "SSL Server Test" service (https://www.ssllabs.com/ssltest/) identifies some aspects of the Racket web server's default HTTPS configuration that should be improved. Most significantly, it says, "This server does not support Forward Secrecy with the reference browsers. Grade capped to B."

I am still looking into the situation in more detail, but I've noticed at least two differences from the configuration generated by Certbot for Apache, which SSL Labs approves of:

  1. While the Racket web server supports ECDHE, it doesn't seem to prefer more secure cypher suites to less secure ones.
  2. The Racket web server's default configuration doesn't seem to enable DHE. It seems like this would force clients that support DHE but not ECDHE to fall back to RSA key exchange without forward secrecy.

I'm happy to do some implementation work here, but I haven't worked with these low-level portions before. In particular, I haven't figured out how to designate preferred cypher suites with the Racket openssl module.

@LiberalArtist
Copy link
Contributor Author

It looks like the first step is to add support to openssl for setting the SSL_OP_CIPHER_SERVER_PREFERENCE option.

While investigating this further, most sources I'm finding about SSL/TLS configuration for servers, including the one I linked to above, ultimately point to Mozila's Server Side TLS recommendations. They maintain "Modern," "Intermediate," and "Old" recommended configurations, based on what clients your server needs to support, and update them as issues (and browsers) evolve. The recommended configurations are available as JSON, both versioned and current. I think it would be a great enhancement to integrate these configurations into Racket.

These changes need to start in the racket/racket repo, but I'll leave this open to track the issue from web-server's perspective.

@jeapostrophe
Copy link
Contributor

jeapostrophe commented Jan 5, 2019 via email

@rmculpepper
Copy link
Contributor

@LiberalArtist The following links may be relevant:

To summarize: versions of openssl before 1.1.0 took multiple steps to be coaxed into doing ephemeral key exchange. You need to call ssl-server-context-enable-ecdhe! to enable ECDHE and ssl-server-context-enable-dhe! to enable DHE; see the docs. Since 1.1.0, openssl should automatically do the right thing for ECDHE (but not DHE).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants