Enterprise Recommendations
This section provides security hardening guidelines and certificate lifecycle management procedures for production Cassandra deployments.
Certificate Lifecycle Management
Section titled “Certificate Lifecycle Management”Certificate Validity Periods
Section titled “Certificate Validity Periods”| Certificate Type | Recommended Validity | Rationale |
|---|---|---|
| Root CA | 10-20 years | Rarely changed, offline storage |
| Intermediate CA | 3-5 years | Balance between security and operational overhead |
| Server/Client | 1 year | Compliance requirements, security best practice |
Certificate Inventory
Section titled “Certificate Inventory”Maintain a certificate inventory tracking:
| Field | Description |
|---|---|
| Certificate CN/SAN | Identity |
| Serial Number | Unique identifier |
| Issue Date | When issued |
| Expiration Date | When expires |
| Issuing CA | Which CA signed |
| Node/Application | Where deployed |
| Keystore Location | File path |
Expiration Monitoring
Section titled “Expiration Monitoring”Implement automated monitoring for certificate expiration:
#!/bin/bashCERT_FILE=$1WARN_DAYS=30CRIT_DAYS=7
EXPIRY=$(openssl x509 -in "$CERT_FILE" -noout -enddate | cut -d= -f2)EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)NOW_EPOCH=$(date +%s)DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt $CRIT_DAYS ]; then echo "CRITICAL: Certificate expires in $DAYS_LEFT days" exit 2elif [ $DAYS_LEFT -lt $WARN_DAYS ]; then echo "WARNING: Certificate expires in $DAYS_LEFT days" exit 1else echo "OK: Certificate expires in $DAYS_LEFT days" exit 0fiCertificate Rotation
Section titled “Certificate Rotation”Pre-Rotation Checklist
Section titled “Pre-Rotation Checklist”- New certificates generated and validated
- Certificate chain verified
- SANs match all required identities
- Keystores and truststores created
- Backup of current certificates
- Rollback procedure documented
- Maintenance window scheduled
Rotation Procedure (Cassandra 4.0+)
Section titled “Rotation Procedure (Cassandra 4.0+)”Cassandra 4.0+ supports hot reloading of certificates without restart.
Step 1: Prepare New Certificates
# Generate new certificates./generate-node-cert.sh cassandra-node-1
# Verify new certificateopenssl verify -CAfile ca-chain.pem new-cert.pemStep 2: Update Truststore (If CA Changed)
If using a new CA or intermediate, update truststores first:
# Add new CA to truststorekeytool -import \ -file new-ca-cert.pem \ -keystore truststore.jks \ -storepass changeit \ -alias new-ca \ -nopromptDeploy updated truststore to all nodes and reload:
nodetool reloadsslStep 3: Update Keystores
Replace keystore files and reload:
# Backup current keystorecp /etc/cassandra/certs/keystore.jks /etc/cassandra/certs/keystore.jks.bak
# Deploy new keystorecp new-keystore.jks /etc/cassandra/certs/keystore.jks
# Reload SSL contextnodetool reloadsslStep 4: Verify
# Check new certificate is activeopenssl s_client -connect localhost:9042 2>/dev/null | \ openssl x509 -noout -dates -serialRotation Procedure (Pre-4.0)
Section titled “Rotation Procedure (Pre-4.0)”Requires rolling restart:
- Update truststore with new CA (if changed)
- Rolling restart all nodes
- Update keystores with new certificates
- Rolling restart all nodes
Client Certificate Rotation
Section titled “Client Certificate Rotation”- Generate new client certificates
- Update client applications with new certificates
- Deploy client updates during maintenance window
- Remove old client CA from Cassandra truststore (if applicable)
Security Hardening
Section titled “Security Hardening”TLS Configuration
Section titled “TLS Configuration”# Production hardened configurationserver_encryption_options: internode_encryption: all require_client_auth: true require_endpoint_verification: true
accepted_protocols: - TLSv1.3 - TLSv1.2
cipher_suites: # TLS 1.3 ciphers (preferred) - TLS_AES_256_GCM_SHA384 - TLS_AES_128_GCM_SHA256 # TLS 1.2 fallback (forward secrecy required) - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256JVM Security Options
Section titled “JVM Security Options”Add to jvm.options or cassandra-env.sh:
# Disable weak TLS versions at JVM level-Djdk.tls.disabledAlgorithms=SSLv3,TLSv1,TLSv1.1,RC4,DES,MD5withRSA,DH keySize < 2048,EC keySize < 224,3DES_EDE_CBC,anon,NULL
# Disable TLS session tickets (if not needed)-Djdk.tls.server.enableSessionTicketExtension=false
# Ephemeral DH key size-Djdk.tls.ephemeralDHKeySize=2048Key Size Requirements
Section titled “Key Size Requirements”| Key Type | Minimum | Recommended |
|---|---|---|
| RSA | 2048 bits | 4096 bits (CA), 2048 bits (server) |
| ECDSA | 256 bits | 384 bits |
| DH Parameters | 2048 bits | 4096 bits |
File Permissions
Section titled “File Permissions”# Private keys: owner read onlychmod 400 /etc/cassandra/certs/*-key.pemchown cassandra:cassandra /etc/cassandra/certs/*-key.pem
# Keystores: owner read onlychmod 400 /etc/cassandra/certs/*.jkschmod 400 /etc/cassandra/certs/*.p12chown cassandra:cassandra /etc/cassandra/certs/*.jkschown cassandra:cassandra /etc/cassandra/certs/*.p12
# Public certificates and truststores: owner read, group readchmod 440 /etc/cassandra/certs/*-cert.pemchmod 440 /etc/cassandra/certs/truststore.*Private Key Protection
Section titled “Private Key Protection”Hardware Security Modules (HSM)
Section titled “Hardware Security Modules (HSM)”For high-security environments, store CA private keys in HSMs:
- AWS CloudHSM
- Azure Dedicated HSM
- HashiCorp Vault with HSM backend
- Thales Luna HSM
Encrypted Private Keys
Section titled “Encrypted Private Keys”Encrypt private keys at rest:
# Encrypt private key with AES-256openssl rsa -aes256 -in key.pem -out key-encrypted.pem
# Cassandra requires unencrypted keys in keystore# Decrypt at deployment time onlyKey Escrow
Section titled “Key Escrow”Implement key escrow for disaster recovery:
- Store encrypted backup of CA private keys
- Use multiple custodians with key shares
- Document recovery procedure
- Test recovery annually
Compliance Considerations
Section titled “Compliance Considerations”PCI-DSS
Section titled “PCI-DSS”Requirements for cardholder data environments:
- TLS 1.2 minimum (TLS 1.0/1.1 prohibited)
- Strong cryptography (AES-128 minimum)
- Certificate management procedures documented
- Quarterly vulnerability scans
- Annual penetration testing
Requirements for protected health information:
- Encryption in transit required
- Access controls implemented
- Audit logging enabled
- Risk assessment documented
Common Criteria requirements:
- CC6.1: Logical access security
- CC6.6: System boundaries protection
- CC6.7: Data transmission encryption
Documentation Requirements
Section titled “Documentation Requirements”Maintain documentation for:
| Document | Contents |
|---|---|
| Certificate Policy | Issuance rules, validity periods, revocation |
| Certificate Practice Statement | Operational procedures |
| Key Management Policy | Key generation, storage, rotation, destruction |
| Incident Response | Certificate compromise procedures |
Disaster Recovery
Section titled “Disaster Recovery”Certificate Backup
Section titled “Certificate Backup”#!/bin/bashBACKUP_DIR="/backup/cassandra-certs/$(date +%Y%m%d)"mkdir -p "$BACKUP_DIR"
# Backup keystores and truststorescp /etc/cassandra/certs/*.jks "$BACKUP_DIR/"cp /etc/cassandra/certs/*.p12 "$BACKUP_DIR/"cp /etc/cassandra/certs/*.pem "$BACKUP_DIR/"
# Encrypt backuptar czf - "$BACKUP_DIR" | \ openssl enc -aes-256-cbc -salt -out "${BACKUP_DIR}.tar.gz.enc"
# Store encryption key separatelyCA Key Recovery
Section titled “CA Key Recovery”Root CA private key recovery procedure:
- Retrieve encrypted key backup from secure storage
- Assemble key custodians (minimum 2)
- Decrypt key using combined credentials
- Verify key integrity
- Use for emergency certificate issuance
- Re-encrypt and return to secure storage
Certificate Revocation
Section titled “Certificate Revocation”If certificates are compromised:
- Generate new certificates immediately
- Deploy new certificates via hot reload
- Update truststores to remove compromised CA (if applicable)
- Publish Certificate Revocation List (CRL)
- Notify affected parties
- Conduct incident review
Monitoring and Alerting
Section titled “Monitoring and Alerting”Certificate Expiration Alerts
Section titled “Certificate Expiration Alerts”| Days to Expiry | Alert Level |
|---|---|
| 60 days | Info |
| 30 days | Warning |
| 14 days | Critical |
| 7 days | Emergency |
TLS Connection Monitoring
Section titled “TLS Connection Monitoring”Monitor for:
- TLS handshake failures
- Certificate validation errors
- Cipher suite negotiation failures
- Protocol version mismatches
Audit Logging
Section titled “Audit Logging”Enable TLS-related audit events:
audit_logging_options: enabled: true included_categories: AUTH, ERRORRelated Documentation
Section titled “Related Documentation”- Encryption Overview - Why encryption is essential
- Certificate Types - Certificate generation
- Cassandra Configuration - Server configuration
- Troubleshooting - Common issues