This question sounds odd. Why would you want a less secure web server?

Well, maybe you have to support older clients.

e.g. IE 11 on Windows 8.1 or Java 7 (cough) cannot connect to a web server, which only uses modern and secure ciphers.

From a Java application, which cannot be updated, but has to work, I got the following exception:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
	at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
	at com.apisgroup.Main.main(Main.java:21)

Note to myself - writing clear and helpful exceptions messages could work wonder.

So, what was going on? Obviously, there was a problem with the handshake. But why?

As this was a regression, I compared the old server setup and the setup after an OS and web server update.

nginx came with a new default configuration, and with more secure ciphers.

https://www.ssllabs.com/ssltest/ showed an A-rating, all good! Except the Java application could no longer communicate with the server.

configuring a secure server is easy

So, configuring a secure server is easy, well, when you follow the correct resources and when you trust that those give reliable recommendations.

Configuring a server less secure is harder… which cipher may I allow although it is less (how much less?) secure?

I am by no means a security specialist, but here are some fine resources:

After working through some of them, it still did not work.

  • Mozilla’s intermediate configuration still prevented access (for IE 11 on Windows Server 2012)
  • my manual setup did not work - the dhe cipher did not show up at SSLLabs…

Note to myself: When you allow diffie hellmann exchange, please make sure to include the dhparams file :-/ … or scratch your head for a while like I did.

The final solution emerged from a debugging session with my friendly hosting company (FlyingCircus), looking here and there (hey GitLab!), doing this and that… and finally I got an A rating from SSLLabs, and still allow access for IE 11 and Java 7.

My next step: Dig into https://www.feistyduck.com/books/bulletproof-ssl-and-tls/ - 470 pages, here I come!