Configurare mTLS nativo di Cassandra

Introduzione

Per impostazione predefinita, i diversi componenti di Edge for Private Cloud, come i processori di messaggi, i server di gestione e i router, si connettono ai nodi Cassandra tramite un canale di testo non crittografato. Su questi canali, i dati da e verso Cassandra vengono comunicati in chiaro. Apigee mTLS è una funzionalità basata su consul service-mesh che aggiunge sicurezza alle comunicazioni tra i componenti nel cluster Edge for Private Cloud. Questa offerta di Apigee aggiunge anche la sicurezza TLS al canale di comunicazione tra i componenti client e Cassandra.

Questo articolo illustra una nuova offerta alternativa di Apigee in cui la comunicazione tra i componenti client e Cassandra in Edge for Private Cloud è protetta tramite mutual TLS (noto anche come TLS a due vie) utilizzando le funzionalità disponibili in modo nativo in Cassandra senza utilizzare un service mesh esterno.

Funzionalità mTLS nativa

L'abilitazione di mTLS tra Cassandra e i componenti client descritti in questo articolo si basa sulle funzionalità TLS fornite in modo nativo da Apache Cassandra. Quando è abilitata, le connessioni client a Cassandra (sulla porta di trasporto nativa CQL 9042) eseguono un handshake TLS a due vie con i client prima di consentire l'instaurazione delle connessioni. Ai fini di questa connessione TLS a due vie, Cassandra funge da server e i vari client che si connettono a Cassandra (come edge-message-processor, lo strumento cqlsh e così via) fungono da client.

Per TLS a due vie (o mutual TLS o mTLS), sia Cassandra sia i client devono essere configurati con il proprio archivio chiavi. L'archivio chiavi di ogni nodo Cassandra deve contenere la propria chiave e il proprio certificato. L'archivio chiavi di ogni applicazione client deve contenere la chiave e il certificato specifici del client. Sia su Cassandra sia sui client deve essere aggiunto un archivio attendibilità contenente i certificati e la catena associata della controparte. L'archivio attendibilità di ogni nodo Cassandra deve contenere i certificati dei client e l'archivio attendibilità di ogni client deve contenere i certificati di tutti i nodi Cassandra. Per ulteriori informazioni sul funzionamento generale di un handshake TLS a due vie, consulta l'articolo TLS/SSL a due vie di Apigee.

Catena di certificati

In genere, in TLS a due vie, i certificati server, i certificati client, le catene di certificati, gli archivi chiavi e gli archivi attendibilità possono essere creati in vari modi. Lo stesso vale anche per mTLS nativo di Cassandra e client. Tenendo conto di come le organizzazioni in genere gestiscono i cluster Edge for Private Cloud e del numero di coppie di connessioni client-Cassandra univoche che possono essere stabilite, Apigee consiglia di adottare il seguente approccio generale per la configurazione di chiavi e certificati per questa funzionalità. Esistono altri metodi praticabili, ma il metodo riportato di seguito offre probabilmente un buon equilibrio tra sicurezza e overhead di manutenzione.

  1. Procurati un certificato radice e una coppia di chiavi/certificati intermedi firmati dalla radice. Potresti già avere queste chiavi e questi certificati. In caso contrario, puoi creare chiavi e certificati radice e intermedi autofirmati seguendo i passaggi descritti nell'Appendice 1.

  2. Utilizza la chiave/il certificato intermedio comune di cui sopra per firmare tutte le chiavi e i certificati (foglia) specifici dell'applicazione.

L'utilizzo di una chiave/un certificato intermedio comune in un cluster consente di configurare un archivio attendibilità comune (contenente la stessa catena di certificati radice e intermedi) su ogni nodo Cassandra e client. Ogni nodo Cassandra e applicazione client ottiene la propria chiave e il proprio certificato foglia univoci firmati dalla chiave/dal certificato intermedio comune.

  1. La rotazione di un certificato foglia di un nodo Cassandra o di un'applicazione client è semplice.
  2. La rotazione di un certificato intermedio o radice è ancora un'operazione piuttosto complessa, ma la frequenza di queste rotazioni sarà molto inferiore a quella dei certificati foglia.

Utilizza le pratiche di sicurezza della tua organizzazione per decidere se utilizzare certificati radice e certificati intermedi comuni in diversi cluster cloud privati. Per configurazioni di certificati alternative, consulta l'Appendice 2.

I passaggi rimanenti di questo articolo forniscono dettagli sulla metodologia sopra descritta per la progettazione di chiavi e certificati.

Limitazioni e avvertenze

A questa funzionalità si applicano le seguenti limitazioni.

  • Questa offerta di mTLS nativo tra i componenti client e Cassandra NON è compatibile con apigee-mtls. Se utilizzi questa funzionalità, non puoi utilizzare apigee-mtls e viceversa.
  • L'abilitazione di mTLS tra i componenti client e Cassandra avrà un impatto sulle prestazioni delle connessioni stabilite tra i client e Cassandra. Operazioni come l'avvio dei client o lo scaling delle connessioni Cassandra potrebbero essere più lente, poiché Cassandra e i client devono prima negoziare TLS prima di avviare la comunicazione. L'impatto dovrebbe essere minimo e in genere non percepibile.
  • Su Cassandra, mTLS può essere applicato facoltativamente alle connessioni client in entrata. Sebbene l'applicazione possa essere abilitata, deve essere disabilitata durante le attività operative come gli upgrade del software Apigee, l'abilitazione/disabilitazione delle funzionalità TLS e alcuni tipi di rotazioni dei certificati. Per ulteriori dettagli, consulta la sezione Operazioni e configurazioni.
  • La gestione e la manutenzione dei certificati sono di responsabilità del cliente.
  • La rotazione dei certificati presenta varie sfumature. Per ulteriori dettagli, consulta la sezione Rotazioni dei certificati.

Abilitare mTLS nativo

A livello generale, l'abilitazione di mTLS nativo è una procedura in tre passaggi, come descritto di seguito:

  1. Procurati un certificato radice e una coppia di chiavi/certificati intermedi.
  2. Crea una coppia di chiavi/certificati foglia di un nodo Cassandra, firmala, archiviala in un archivio chiavi e configura Cassandra per mTLS facoltativo. Ripeti i passaggi per ogni nodo Cassandra uno alla volta.
  3. Crea una coppia di chiavi/certificati foglia di un'applicazione client, firmala, archiviala in un archivio chiavi e configura l'applicazione client per mTLS. Ripeti i passaggi su ogni applicazione client uno alla volta. Applicazioni client:
    1. edge-management-server
    2. edge-message-processor
    3. edge-router

Questi passaggi sono descritti di seguito:

Procurarsi certificati radice e intermedi

Procurati un certificato radice e una coppia di chiavi/certificati intermedi firmati dalla radice. Utilizza il certificato radice e intermedio firmato dalla CA della tua organizzazione o crea certificati autofirmati. Archivia la catena di certificati radice e intermedi in un archivio attendibilità. Per i comandi utili, consulta l'Appendice 1. I comandi successivi presuppongono che tu abbia accesso ai seguenti file:

  • intermediate.key - file di chiavi per il certificato intermedio per la firma dei certificati foglia
  • intermediate-cert.pem- certificato intermedio

Configurare i nodi Cassandra

  1. Scegli un nodo Cassandra
  2. Genera una coppia di chiavi e certificati foglia e firmala con il certificato intermedio. Archivia la chiave e il certificato firmato in un archivio chiavi. Ad esempio:
    
    # Generate Leaf key and csr
    openssl req -newkey rsa:2048 -keyout cass-node1.key -out cass-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=cassnode1@yourorg.com"
    
    # leaf cert signed by intermediate
    openssl x509 -req -in cass-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out cass-node1-cert.pem
    
    # keystore packaging leaf key and cert
    openssl pkcs12 -export -clcerts -in cass-node1-cert.pem -inkey cass-node1.key -out cass-node1-keystore.pfx -name nativemtls -password pass:keystorepass

    Posiziona i file dell'archivio chiavi e dell'archivio attendibilità in una posizione specifica sul nodo e assicurati che siano accessibili dall'utente apigee

    cp cass-node1-keystore.pfx /opt/apigee/customer/application/
    cp truststore.pfx /opt/apigee/customer/application/
    
    chown apigee:apigee /opt/apigee/customer/application/cass-node1-keystore.pfx
    chown apigee:apigee /opt/apigee/customer/application/truststore.pfx

  3. Crea o modifica il file /opt/apigee/customer/application/cassandra.properties. Aggiungi i seguenti contenuti a questo file:
    ### Enable Cassandra TLS on CQL connections
    conf_cassandra_client_encryption_enabled=true
    
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=true
    
    ### Keystore details
    conf_cassandra_client_encryption_keystore=/opt/apigee/customer/application/cass-node1-keystore.pfx
    conf_cassandra_client_encryption_keystore_password=keystorepass
    conf_cassandra_server_encryption_store_type=PKCS12
    
    ### Whether to enable 2-way TLS (or mTLS) - true or false
    conf_cassandra_client_encryption_require_client_auth=true
    
    ### When 2-way TLS is enabled, client certificate details need to be provided via a truststore
    conf_cassandra_client_encryption_truststore=/opt/apigee/customer/application/truststore.pfx
    conf_cassandra_client_encryption_truststore_password=trustpass
    conf_cassandra_client_encryption_store_type=PKCS12
    

    Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo:

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
  4. Configura e riavvia il nodo Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  5. Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta

Configurare le applicazioni client

Questa sezione si applica ai seguenti componenti client che si connettono a Cassandra:

  • edge-management-server
  • edge-message-processor
  • edge-router

  1. Scegli un componente client
  2. Genera una coppia di chiavi e certificati foglia e firmala con il certificato intermedio. Archivia la chiave e il certificato firmato in un archivio chiavi. Ad esempio:
    
    # Generate Leaf key and csr
    openssl req -newkey rsa:2048 -keyout mgmt-node1.key -out mgmt-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=mgmtnode1@yourorg.com"
    
    # leaf cert signed by intermediate
    openssl x509 -req -in mgmt-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out mgmt-node1-cert.pem
    
    # keystore packaging leaf key and cert
    openssl pkcs12 -export -clcerts -in mgmt-node1-cert.pem -inkey mgmt-node1.key -out mgmt-node1-keystore.pfx -name nativemtls -password pass:keystorepass
    

    Posiziona i file dell'archivio chiavi e dell'archivio attendibilità in una posizione specifica sul nodo e assicurati che siano accessibili dall'utente apigee

    cp mgmt-node1-keystore.pfx /opt/apigee/customer/application/
    cp truststore.pfx /opt/apigee/customer/application/
    
    chown apigee:apigee /opt/apigee/customer/application/mgmt-node1-keystore.pfx
    chown apigee:apigee /opt/apigee/customer/application/truststore.pfx

  3. Crea e modifica il file di configurazione in base all'applicazione che stai configurando
    Applicazione File di configurazione
    Server di gestione /opt/apigee/customer/application/management-server.properties
    Processore di gestione /opt/apigee/customer/application/message-processor.properties
    Router /opt/apigee/customer/application/router.properties

    Aggiungi le seguenti configurazioni al file:

    ### Enable TLS on CQL connections
    conf_cassandra_sslconfig.enable.tls=true
    conf_cassandra_sslconfig.enable.mtls=true
    
    ### Keystore Details
    conf_cassandra_sslconfig.keystore.path=/opt/apigee/customer/application/mgmt-node1-keystore.pfx
    conf_cassandra_sslconfig.keystore.password=keystorepass
    conf_cassandra_sslconfig.keystore.type=PKCS12
    
    ### Truststore Details
    conf_cassandra_sslconfig.truststore.path=/opt/apigee/customer/application/truststore.pfx
    conf_cassandra_sslconfig.truststore.password=trustpass
    conf_cassandra_sslconfig.truststore.type=PKCS12
    

    Assicurati che il file di configurazione sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo

    chown apigee:apigee configuration file
    
    ### Example:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    

  4. Riavvia l'applicazione client
    # Configure and restart service:
    apigee-service component configure
    apigee-service component restart
    # Example, to configure and restart message processor application
    apigee-service edge-message-processor configure
    apigee-service edge-message-processor restart
    
  5. Puoi verificare che SSL sia stato configurato correttamente nell'applicazione client cercando i log nelle righe seguenti nel log di sistema dell'applicazione appropriata:

    Opzioni SSL aggiunte alla connessione Cassandra

  6. Ripeti i passaggi precedenti su ogni applicazione client uno alla volta

Operazioni e configurazioni

Applicare mTLS

Quando mTLS non è applicato in Cassandra, Cassandra accetta connessioni di testo non crittografato dai client o dai client con cui può eseguire correttamente un TLS handshake a due vie. Affinché l'applicazione mTLS funzioni, mTLS deve essere configurato prima in Cassandra. Puoi impostare l'applicazione mTLS in Cassandra seguendo i passaggi riportati di seguito:

  1. Scegli un nodo Cassandra
  2. Crea o modifica il file /opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=false
    

    Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Configura e riavvia il nodo Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta

Una volta applicato mTLS in Cassandra, lo strumento di query Cassandra standard cqlsh non può connettersi direttamente a Cassandra. Per configurare cqlsh per SSL, genera una nuova chiave e un nuovo certificato foglia (simili alla chiave e al certificato foglia per le applicazioni client) ed esegui le seguenti operazioni:

  1. Crea o modifica il file $HOME/.cassandra/cqlshrc
  2. Aggiungi i seguenti contenuti al file:
    [ssl]
    certfile = /home/admin-user/certs/inter-root.pem
    validate = false
    userkey = /home/admin-user/certs/cqlsh1.key
    usercert = /home/admin-user/certs/cqlsh1-cert.pem
    
    • certfile - File di certificati contenente la catena di certificati radice e intermedi
    • userkey - Chiave client da utilizzare con cqlsh. Deve essere una coppia di chiavi/certificati foglia che puoi generare e firmare con il certificato intermedio.
    • usercert - Certificato client da utilizzare con cqlsh. Deve essere una coppia di chiavi/certificati foglia che puoi generare e firmare con il certificato intermedio.
  3. Esegui il comando cqlsh come di consueto fornendo l'argomento --ssl. Ad esempio:
    $  /opt/apigee/apigee-cassandra/bin/cqlsh --ssl X.X.X.X
    Connected to Apigee at X.X.X.X:9042
    [cqlsh 6.0.0 | Cassandra 4.0.13 | CQL spec 3.4.5 | Native protocol v5]
    Use HELP for help.
    cqlsh>
    

Disabilitare l'applicazione di mTLS su Cassandra

Per disabilitare l'applicazione di mTLS in Cassandra, segui i passaggi riportati di seguito:

  1. Scegli un nodo Cassandra
  2. Crea o modifica il file /opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=true
    

    Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Configura e riavvia il nodo Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta

Disabilitare mTLS nativo

La disabilitazione di mTLS nativo è un processo in più passaggi, simile a l'abilitazione di mTLS nativo. I passaggi di alto livello sono:

  1. Disabilita l'applicazione di mTLS in Cassandra (se applicata)
  2. Disabilita mTLS in tutti i nodi delle seguenti applicazioni client uno alla volta:
    • edge-management-server
    • edge-message-processor
    • edge-router
    1. Crea e modifica il file di configurazione in base all'applicazione che stai configurando:
      Applicazione File di configurazione
      Server di gestione /opt/apigee/customer/application/management-server.properties
      Processore di gestione /opt/apigee/customer/application/message-processor.properties
      Router /opt/apigee/customer/application/router.properties
    2. Aggiungi o modifica le seguenti proprietà nel file di configurazione:
      ### TLS on CQL connections
      conf_cassandra_sslconfig.enable.tls=false
      conf_cassandra_sslconfig.enable.mtls=false
      
    3. Assicurati che il file di configurazione sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo:
      chown apigee:apigee configuration file
      
      ### Example:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. Riavvia l'applicazione client:
      
      # Configure and restart service:
      apigee-service component configure
      apigee-service component restart
      
      # Example, to configure and restart message processor application
      apigee-service edge-message-processor configure
      apigee-service edge-message-processor restart
      
    5. Ripeti i passaggi da a a d su ogni applicazione client, uno alla volta.
  3. Disabilita mTLS su tutti i nodi Cassandra uno alla volta:
    1. Scegli un nodo Cassandra.
    2. Crea o modifica il file /opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:
      ### Cassandra TLS on CQL connections
      conf_cassandra_client_encryption_enabled=false
      

      Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo

      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
      
    3. Configura e riavvia il nodo Cassandra
    4. apigee-service apigee-cassandra configure
      apigee-service apigee-cassandra restart
      
    5. Ripeti i passaggi da a a c su ogni nodo Cassandra, uno alla volta.

Rotazioni dei certificati

Rotazione solo per i certificati foglia (mantenendo gli stessi certificati intermedi e radice)

Puoi seguire passaggi simili a quelli desc0}Configurare le applicazioni clientritti in:

  1. Genera una nuova chiave/un nuovo certificato foglia per un'applicazione utilizzando la stessa chiave/lo stesso certificato intermedio
  2. Configura il percorso della nuova chiave/del nuovo certificato foglia nell'applicazione insieme alla password e al tipo di archivio chiavi
  3. Riavvia l'applicazione
Rotazione per i certificati radice o intermedi

Se prevedi di ruotare il certificato intermedio o radice, ti consigliamo di eseguire questa operazione in più passaggi:

  1. Disabilita mTLS nativo di Cassandra nel cluster.
  2. Utilizza i nuovi certificati radice e intermedi per generare nuovi certificati foglia o applicativi.
  3. Segui i passaggi per abilitare mTLS nativo di Cassandra utilizzando il nuovo set di chiavi e certificati.

Operazioni Apigee generali

Per eseguire operazioni Apigee generali come l'upgrade del software Apigee, l'aggiunta o la rimozione di nodi Cassandra, l'aggiunta o la rimozione di data center, l'abilitazione o la disabilitazione dell'autenticazione Cassandra e così via, assicurati che mTLS non sia applicato in Cassandra. Se hai applicato mTLS, disabilita l'applicazione prima di procedere con queste operazioni.

Appendice 1

Puoi seguire i passaggi descritti in questa appendice per generare una coppia di chiavi/certificati radice e intermedi autofirmati e aggiungere questa catena di certificati a un archivio attendibilità.

Generare certificati radice e intermedi autofirmati

# Create self-signed root key and cert
openssl req -x509 -newkey rsa:2048 -keyout root.key -out root-cert.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=root.yourorg.com/emailAddress=apigeeroot@yourorg.com"

# Create intermediate key and cert (signed by root)
openssl req -newkey rsa:2048 -keyout intermediate.key -out intermediate-req.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=inter.yourorg.com/emailAddress=apigeeinter@yourorg.com"

openssl x509 -req -in intermediate-req.pem -CAkey root.key -CA root-cert.pem -days 3650 -CAcreateserial -out intermediate-cert.pem

Generare l'archivio attendibilità

# Merge root and intermediate cert into 1 file
cat intermediate-cert.pem > inter-root.pem
cat root-cert.pem >> inter-root.pem

# Create truststore to be used everywhere
keytool -keystore truststore.pfx -storetype PKCS12 -importcert -file inter-root.pem -keypass trustpass -storepass trustpass -alias nativemtls -noprompt

Appendice 2: configurazioni alternative della catena di certificati

Sebbene questo articolo consigli una configurazione specifica della catena di certificati che bilancia sicurezza e facilità di operazioni, esistono alternative descritte di seguito. La maggior parte dei principi generali si applica anche ad altre metodologie, ad esempio:

  1. Avere chiavi e certificati foglia diretti per ogni nodo Cassandra o applicazione client (senza certificati radice o intermedi di firma). In questo modo, la rotazione dei certificati sarà probabilmente complessa.
  2. Avere più set di certificati radice e intermedi per diversi casi d'uso. Ad esempio, i nodi Cassandra hanno un set di certificati radice/intermedi con cui vengono firmati tutti i certificati foglia di Cassandra. Allo stesso modo, tutte le applicazioni client potrebbero avere un set radice/intermedio separato per la firma dei certificati foglia dell'applicazione. Queste configurazioni sono praticabili, ma comportano l'aggiunta della catena di certificati radice/intermedi all'archivio attendibilità appropriato. In questo esempio, gli archivi attendibilità di Cassandra devono contenere i certificati radice/intermedi del client e le applicazioni client devono avere la catena radice/intermedia dei nodi Cassandra nel proprio archivio attendibilità.
  3. Analogamente a quanto sopra, puoi avere più set di certificati radice e intermedi per diverse regioni, ma tutti i client e tutti i server in tutte le regioni devono essere a conoscenza di tutte le catene radice e intermedie aggiungendole tutte all'archivio attendibilità configurato.