Skip to content

AxonOps — AI-Native Control Plane for Open Source Data Platforms

TLS Versions and Cipher Suites

Transport Layer Security (TLS) protocol versions and cipher suites determine the cryptographic algorithms used to secure Cassandra communications. Selecting appropriate versions and ciphers is critical for both security and interoperability.

VersionStatusJava RequirementCassandra Support
SSL 3.0Deprecated-Disabled by default
TLS 1.0DeprecatedJava 6+Supported, not recommended
TLS 1.1DeprecatedJava 7+Supported, not recommended
TLS 1.2CurrentJava 7+Recommended minimum
TLS 1.3CurrentJava 11+Recommended (Cassandra 4.0+)

TLS 1.3 (Recommended)

  • Removed obsolete cryptographic algorithms
  • Faster handshake (1-RTT, 0-RTT resumption)
  • Forward secrecy mandatory
  • Simplified cipher suite configuration

TLS 1.2 (Acceptable)

  • Widely supported
  • Secure when configured with strong cipher suites
  • Requires careful cipher suite selection

TLS 1.0/1.1 (Deprecated)

  • Vulnerable to BEAST, POODLE attacks
  • PCI-DSS compliance prohibits use
  • Disable in production environments

A cipher suite defines the combination of algorithms used for:

  • Key exchange (how keys are established)
  • Authentication (how identity is verified)
  • Encryption (how data is protected)
  • Message authentication (how integrity is verified)

TLS 1.3 simplified cipher suite naming. All TLS 1.3 suites use AEAD encryption and are considered secure.

Cipher SuiteEncryptionNotes
TLS_AES_256_GCM_SHA384AES-256-GCMRecommended
TLS_AES_128_GCM_SHA256AES-128-GCMGood performance
TLS_CHACHA20_POLY1305_SHA256ChaCha20-Poly1305Good for non-AES-NI CPUs

TLS 1.2 cipher suites require careful selection. Use only AEAD ciphers with forward secrecy.

Recommended:

Cipher SuiteKey ExchangeEncryption
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384ECDHEAES-256-GCM
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256ECDHEAES-128-GCM
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ECDHEAES-256-GCM
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256ECDHEAES-128-GCM
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384DHEAES-256-GCM
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256DHEAES-128-GCM

Avoid:

PatternReason
*_CBC_*Vulnerable to padding oracle attacks
*_RC4_*RC4 is broken
*_DES_*DES is weak
*_NULL_*No encryption
*_EXPORT_*Weak export-grade cryptography
TLS_RSA_*No forward secrecy

Forward secrecy (also called perfect forward secrecy) ensures that session keys cannot be compromised even if the server’s private key is later exposed.

Without forward secrecy (RSA key exchange):

  • Session keys are encrypted with the server’s RSA public key
  • If the private key is compromised, all past sessions can be decrypted

With forward secrecy (ECDHE/DHE key exchange):

  • Session keys are generated using ephemeral Diffie-Hellman
  • Each session uses unique keys
  • Compromised private key cannot decrypt past sessions

Enable forward secrecy by prioritizing ECDHE and DHE cipher suites:

cassandra.yaml
server_encryption_options:
cipher_suites:
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

cassandra.yaml
server_encryption_options:
internode_encryption: all
protocol: TLS
accepted_protocols:
- TLSv1.3
- TLSv1.2
cipher_suites:
- TLS_AES_256_GCM_SHA384
- TLS_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
cassandra.yaml
server_encryption_options:
internode_encryption: all
protocol: TLS
accepted_protocols:
- TLSv1.2
cipher_suites:
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
cassandra.yaml
server_encryption_options:
# Only allow TLS 1.2+
accepted_protocols:
- TLSv1.2
- TLSv1.3
# Explicitly exclude weak protocols (redundant but explicit)
# SSLv3, TLSv1, TLSv1.1 are not listed

Terminal window
# Test TLS 1.3
openssl s_client -connect cassandra-node:9042 -tls1_3
# Test TLS 1.2
openssl s_client -connect cassandra-node:9042 -tls1_2
# Test TLS 1.1 (should fail if properly configured)
openssl s_client -connect cassandra-node:9042 -tls1_1
Terminal window
# Show negotiated cipher suite
openssl s_client -connect cassandra-node:9042 -tls1_2 2>/dev/null | grep "Cipher is"
# Test specific cipher suite
openssl s_client -connect cassandra-node:9042 -cipher ECDHE-RSA-AES256-GCM-SHA384
Terminal window
# Scan TLS configuration
nmap --script ssl-enum-ciphers -p 9042 cassandra-node

  • TLS 1.2 supported
  • TLS 1.3 not available
  • Some GCM cipher suites may have performance issues
  • TLS 1.3 supported
  • Improved TLS performance
  • Recommended for production deployments
Terminal window
# Disable weak protocols at JVM level
-Djdk.tls.disabledAlgorithms=SSLv3,TLSv1,TLSv1.1,RC4,DES,MD5withRSA,DH keySize < 1024,EC keySize < 224
# Enable TLS 1.3 (Java 11+)
-Djdk.tls.client.protocols=TLSv1.3,TLSv1.2

StandardMinimum TLS VersionNotes
PCI-DSS 3.2+TLS 1.2TLS 1.0/1.1 prohibited since 2018
HIPAATLS 1.2Strong encryption required
NIST SP 800-52TLS 1.2TLS 1.3 recommended
FedRAMPTLS 1.2Federal systems requirement