Configure SSL for client-to-node connections
Client-to-node encryption protects in-flight data from client machines to a database cluster using SSL (Secure Sockets Layer), and it establishes a secure channel between the client and the coordinator node.
SSL on DSE Search nodes
On a DSE Search node, enabling SSL for the database automatically enables SSL in the DSE Search web.xml file and configures an SSL connector in Tomcat using the authentication or authorization filters.
No changes are required for the web.xml or server.xml files.
If the TomcatSolrRunner does not find a connector in server.xml, it creates a default connector.
The default connector binds to the native_transport_address.
The default location of the Tomcat server.xml file depends on the installation type:
-
Package installations:
/etc/dse/tomcat/conf/server.xml -
Tarball installations:
<installation_location>/resources/tomcat/conf/server.xml
SSL without JCE Unlimited Strength Jurisdiction Policy
Starting in JDK 8u161, JCE Unlimited is enabled by default, which includes AES-256.
If you aren’t using the JCE Unlimited Strength Jurisdiction Policy, make sure that your ticket granting principal doesn’t use AES-256.
If your ticket granting principal uses AES-256, you might see a warning in the logs such as the following:
WARN [StreamConnectionEstablisher:18] 2015-06-22 14:12:18,589 SSLFactory.java (line 162) Filtering out
TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA as it isnt supported by the socket
Enable SSL on nodes
Complete the following steps on every node in the cluster to configure SSL for client-to-node connections:
-
Create SSL certificates, keystores, and truststores. You can either create local keystore files or use a remote keystore provider.
-
Locate the
cassandra.yamlconfiguration file. The location of this file depends on the type of installation:-
Package installations:
/etc/dse/cassandra/cassandra.yaml -
Tarball installations:
<installation_location>/resources/cassandra/conf/cassandra.yaml
-
-
Edit
cassandra.yamland make the following changes in theclient_encryption_optionsto enable SSL:-
Set
enabledtotrueto enable SSL. -
Set
optionaltofalse(default) to only allow SSL connections. -
Set
require_client_authtotrueto require two-way host certificate validation.
-
-
Configure the keystore and truststore, depending on whether you are using local keystore files or a remote keystore provider. All settings are configured in the
client_encryption_optionssection ofcassandra.yaml.Be aware that the
store_typeoption is deprecated. Instead, usekeystore_typeandtruststore_type.-
Local files
-
Remote keystore provider
Use the following settings:
client_encryption_options: enabled: true optional: false keystore_type: JKS keystore: <path_to_keystore> keystore_password: <keystore_password> require_client_auth: true truststore_type: JKS truststore: <path_to_truststore> truststore_password: <truststore_password> protocol: ssl algorithm: SunX509 cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA]- enabled
-
Enables client-to-node encryption. You must also generate keys and provide the appropriate key and truststore locations and passwords. There are no custom encryption options enabled for DataStax Enterprise (DSE).
Default:
false - optional
-
When
optionalistrue, both encrypted and unencrypted connections over native transport are allowed. This is a necessary transition state to facilitate enabling client to node encryption on live clusters without inducing an outage for existing unencrypted clients. Typically, once existing clients are migrated to encrypted connections,optionalis set tofalseto enforce native transport encryption.Default:
false - keystore_type
-
Valid types are
JKS(default),JCEKS,PKCS11, orPKCS12. For file-based keystores, usePKCS12.DataStax supports
PKCS11as akeystore_typeon nodes withcassandraoradvancedworkloads.If you need to use
PKCS11, you must specify thekeystore_typeasPKCS11and thekeystoreasNONEin eitherserver_encryption_optionsorclient_encryption_optionsdepending on your use case.PKCS11isn’t supported as atruststore_type. - keystore
-
Relative path from the DSE installation directory or the absolute path to the Java keystore (JKS) suitable for use with Java Secure Socket Extension (JSSE) (the Java version of the Secure Sockets Layer (SSL)) and Transport Layer Security (TLS) protocols. The keystore contains the private key used to encrypt outgoing messages.
Default:
resources/dse/conf/.keystore - keystore_password
-
Password for the keystore.
Default:
cassandra - require_client_auth
-
Enables certificate authentication for client-to-node encryption.
-
true: Require certificate authentication for client-to-node encryption. Client certificates must be present on all nodes in the cluster. -
false(default): Do not require certificate authentication for client-to-node encryption.
-
- truststore_type
-
Valid types are
JKS(default),JCEKS, orPKCS12. For file-based truststores, usePKCS12.Due to an OpenSSL issue, PKCS12 truststores generated with OpenSSL can be incompatible with DSE.
For example, a truststore generated with the following command might not work with DSE:
openssl pkcs12 -export -nokeys -out truststore.pfx -in <intermediate.chain.pem>However, if you generate a truststore with Java’s
keytool, and then convert it to PKCS12, it will work with DSE. For example:-
Create the truststore with
keytool:keytool -importcert -alias <rootca> -file <rootca.pem> -keystore <truststore.jks> -
Import the intermediate certificate:
keytool -importcert -alias <intermediate> -file <intermediate.pem> -keystore <truststore.jks> -
Convert the JKS truststore to PKCS12:
keytool -importkeystore -srckeystore <truststore.jks> -destkeystore <truststore.pfx> -deststoretype pkcs12
-
- truststore
-
Relative path from the DSE installation directory or the absolute path to the truststore containing the trusted certificate for authenticating remote servers.
Default:
resources/dse/conf/.truststoreTruststore password and path are only required when
require_client_authis set totrue. - truststore_password
-
Password for the truststore. This must match the password used when generating the keystore and truststore.
Default:
cassandraTruststore password and path are only required when
require_client_authis set totrue. - protocol
-
Default:
TLS - algorithm
-
Default:
SunX509 - cipher_suites
-
A comma-separated list of cipher suites for encryption. Enclose the list in square brackets. For example, the default value is as follows:
[TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA]Supported ciphers include the following:
-
TLS_RSA_WITH_AES_128_CBC_SHA -
TLS_RSA_WITH_AES_256_CBC_SHA -
TLS_DHE_RSA_WITH_AES_128_CBC_SHA -
TLS_DHE_RSA_WITH_AES_256_CBC_SHA -
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA -
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
-
To encrypt the truststore and keystore passwords for local encryption, see Encrypting configuration file properties. For KMIP see Encrypting configuration file properties.
The
store_typeoption is deprecated. Instead, usekeystore_typeandtruststore_type.The remote keystore option requires installation of a provider. See Using a remote keystore provider.
Use the following settings to configure the remote keystore. Unused options can be blank or commented out.
client_encryption_options: enabled: true optional: false keystore_type: PKCS12 require_client_auth: true truststore_type: PKCS12 protocol: ssl algorithm: SunX509 cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA]- enabled
-
Enables client-to-node encryption. You must also generate keys and provide the appropriate key and truststore locations and passwords. There are no custom encryption options enabled for DataStax Enterprise (DSE).
Default:
false - optional
-
When
optionalistrue, both encrypted and unencrypted connections over native transport are allowed. This is a necessary transition state to facilitate enabling client to node encryption on live clusters without inducing an outage for existing unencrypted clients. Typically, once existing clients are migrated to encrypted connections,optionalis set tofalseto enforce native transport encryption.Default:
false
- keystore_type
-
Valid types are
JKS(default),JCEKS,PKCS11, orPKCS12. For file-based keystores, usePKCS12.DataStax supports
PKCS11as akeystore_typeon nodes withcassandraoradvancedworkloads.If you need to use
PKCS11, you must specify thekeystore_typeasPKCS11and thekeystoreasNONEin eitherserver_encryption_optionsorclient_encryption_optionsdepending on your use case.PKCS11isn’t supported as atruststore_type. - require_client_auth
-
Enables certificate authentication for client-to-node encryption.
-
true: Require certificate authentication for client-to-node encryption. Client certificates must be present on all nodes in the cluster. -
false(default): Do not require certificate authentication for client-to-node encryption.
-
- truststore_type
-
Valid types are
JKS(default),JCEKS, orPKCS12. For file-based truststores, usePKCS12.Due to an OpenSSL issue, PKCS12 truststores generated with OpenSSL can be incompatible with DSE.
For example, a truststore generated with the following command might not work with DSE:
openssl pkcs12 -export -nokeys -out truststore.pfx -in <intermediate.chain.pem>However, if you generate a truststore with Java’s
keytool, and then convert it to PKCS12, it will work with DSE. For example:-
Create the truststore with
keytool:keytool -importcert -alias <rootca> -file <rootca.pem> -keystore <truststore.jks> -
Import the intermediate certificate:
keytool -importcert -alias <intermediate> -file <intermediate.pem> -keystore <truststore.jks> -
Convert the JKS truststore to PKCS12:
keytool -importkeystore -srckeystore <truststore.jks> -destkeystore <truststore.pfx> -deststoretype pkcs12
-
- protocol
-
Default:
TLS - algorithm
-
Default:
SunX509 - cipher_suites
-
A comma-separated list of cipher suites for encryption. Enclose the list in square brackets. For example, the default value is as follows:
[TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA]Supported ciphers include the following:
-
TLS_RSA_WITH_AES_128_CBC_SHA -
TLS_RSA_WITH_AES_256_CBC_SHA -
TLS_DHE_RSA_WITH_AES_128_CBC_SHA -
TLS_DHE_RSA_WITH_AES_256_CBC_SHA -
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA -
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
-
The
store_typeoption is deprecated. Instead, usekeystore_typeandtruststore_type. -
-
Save and close the
cassandra.yamlfile. -
Perform a rolling restart.