SSL Config

Rubris piggybacks directly on the JSSE implementation of SSL in some respects, while still making use of SSLEngine and wrap/unwarap mechanisms.

Behaviours

Generally the SSL implementation has a certain set of behaviours:

Some of the these options are based on the following:

http://blog.ivanristic.com/2014/03/ssl-tls-improvements-in-java-8.html

Configuration options

Configuration for ssl provides the following options:

Session renegotiation

SSL (including Java’s SSLEngine) allows client triggered renegotiation. However, Rubris does not due to a a large number of potential security issues that result from this:

https://community.qualys.com/blogs/securitylabs/2011/10/31/tls-renegotiation-and-denial-of-service-attacks

Accordingly, Rubris disables this capacity using system properties:


  java.lang.System.setProperty("sun.security.ssl.allowUnsafeRenegotiation",
     "false");

  // both are set as it is slightly unclear as to which version of 
  // java8 this was renamed in
  java.lang.System.setProperty("jdk.tls.rejectClientInitiatedRenegotiation",
    "true");
  java.lang.System.setProperty("jdk.tls.rejectClientInitializedRenego",
    "true");


  // increase DH negotiation size
  java.lang.System.setProperty("jdk.tls.ephemeralDHKeySize",
    ""+config.ephemeralDHKeySize);

Renegotiation is primarily used for moving between secure and plain on the same connection and downgrading/upgrading ciphers.

Neither of which is useful in the context of these services.