@@ -56,6 +56,18 @@ public class HAProxyConfigurator implements LoadBalancerConfigurator {
5656 private static String [] defaultListen = {"listen vmops" , "\t bind 0.0.0.0:9" , "\t option transparent" };
5757 private static final String SSL_CERTS_DIR = "/etc/ssl/cloudstack/" ;
5858
59+ // https://ssl-config.mozilla.org/#server=haproxy&version=1.8&config=old&openssl=1.1.1d&guideline=5.4
60+ private static String sslConfigurationOld = "\n \t ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA" +
61+ "\n \t ssl-default-bind-options no-sslv3 no-tls-tickets" +
62+ "\n \n \t ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA" +
63+ "\n \t ssl-default-server-options no-sslv3 no-tls-tickets" ;
64+
65+ // https://ssl-config.mozilla.org/#server=haproxy&version=1.8&config=intermediate&openssl=1.1.1d&guideline=5.4
66+ private static String sslConfigurationIntermediate = "\n \t ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" +
67+ "\n \t ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets" +
68+ "\n \n \t ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" +
69+ "\n \t ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets" ;
70+
5971 @ Override
6072 public String [] generateConfiguration (final List <PortForwardingRuleTO > fwRules ) {
6173 // Group the rules by publicip:publicport
@@ -768,6 +780,15 @@ public String[] generateConfiguration(final LoadBalancerConfigCommand lbCmd) {
768780 gSection .set (6 , "\t group root" );
769781 }
770782
783+ String sslConfiguration = LoadBalancerConfigKey .LbSslConfiguration .key ();
784+ if (sslConfiguration != null && sslConfiguration .equalsIgnoreCase ("old" )){
785+ gSection .add (sslConfigurationOld );
786+ gSection .add ("\n \t ssl-dh-param-file /root/dhparam.pem.old" );
787+ } else if (sslConfiguration == null || ! sslConfiguration .equalsIgnoreCase ("none" )){
788+ gSection .add (sslConfigurationIntermediate );
789+ gSection .add ("\n \t ssl-dh-param-file /root/dhparam.pem.intermediate" );
790+ }
791+
771792 if (s_logger .isDebugEnabled ()) {
772793 for (final String s : gSection ) {
773794 s_logger .debug ("global section: " + s );
0 commit comments