Włącz szyfrowanie węzła Cassandra

Szyfrowanie między węzłami chroni dane przesyłane między węzłami w klastrze za pomocą protokołu TLS. Z tego artykułu dowiesz się, jak włączyć szyfrowanie między węzłami Cassandra za pomocą protokołu TLS w Edge for Private Cloud. Aby wykonać te czynności, musisz znać szczegóły dotyczące pierścienia Cassandra.

Włączanie szyfrowania między węzłami Cassandra

Aby włączyć szyfrowanie między węzłami Cassandra:

  1. Wygeneruj certyfikaty serwera, wykonując czynności opisane w Dodatku , aby utworzyć klucz i certyfikat podpisany samodzielnie.

    W poniższych krokach zakładamy, że masz już utworzone pliki keystore.node0 i truststore.node0 oraz hasła do magazynu kluczy i magazynu zaufanych certyfikatów, zgodnie z opisem w Dodatku. Przed wykonaniem kolejnych czynności należy utworzyć magazyn kluczy i magazyn zaufanych certyfikatów na każdym węźle.

  2. Dodaj te właściwości do pliku /opt/apigee/customer/application/cassandra.properties. Jeśli plik nie istnieje, utwórz go.
    conf_cassandra_server_encryption_internode_encryption=all
    conf_cassandra_server_encryption_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_server_encryption_keystore_password=keypass
    conf_cassandra_server_encryption_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_server_encryption_truststore_password=trustpass
        
    # Optionally set the following to enable 2-way TLS or mutual TLS
    conf_cassandra_server_encryption_require_client_auth=true
      
  3. Upewnij się, że plik cassandra.properties jest własnością użytkownika apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

Wykonaj te czynności na każdym węźle Cassandra, po kolei, aby zmiany zostały wprowadzone bez przestojów dla użytkowników:

  1. Zatrzymaj usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  2. Uruchom ponownie usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  3. Aby sprawdzić, czy usługa szyfrowania protokołu TLS została uruchomiona, poszukaj w logu systemowym tego komunikatu:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Przeprowadzanie rotacji certyfikatów

Aby przeprowadzić rotację certyfikatów:

  1. Dodaj certyfikat dla każdej unikalnej wygenerowanej pary kluczy (patrz Dodatek) do magazynu zaufanych certyfikatów istniejącego węzła Cassandra, tak aby w tym samym magazynie zaufanych certyfikatów znajdowały się zarówno stare, jak i nowe certyfikaty:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    gdzie NEW_ALIAS to unikalny ciąg znaków identyfikujący wpis, CERT to nazwa pliku certyfikatu do dodania, a EXISTING_TRUSTSTORE to nazwa istniejącego magazynu zaufanych certyfikatów w węźle Cassandra.

  2. Użyj narzędzia do kopiowania, np. scp, aby rozpowszechnić magazyn zaufanych certyfikatów na wszystkie węzły Cassandra w klastrze, zastępując istniejący magazyn zaufanych certyfikatów używany przez każdy węzeł.
  3. Wykonaj stopniowe ponowne uruchomienie klastra, aby wczytać nowy magazyn zaufanych certyfikatów i ustanowić zaufanie do nowych kluczy, zanim zostaną one wdrożone:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. Na każdym węźle Cassandra w klastrze zaktualizuj właściwości pokazane poniżej do nowych wartości magazynu kluczy w pliku cassandra.properties:
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    gdzie NEW_KEYSTORE_PATH to ścieżka do katalogu, w którym znajduje się plik magazynu kluczy, a NEW_KEYSTORE_PASSWORD to hasło magazynu kluczy ustawione podczas tworzenia certyfikatów, zgodnie z opisem w Dodatku.

  5. Zatrzymaj usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  6. Uruchom ponownie usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  7. Gdy komunikacja między wszystkimi węzłami zostanie nawiązana, przejdź do następnego węzła Cassandra. Uwaga: przejdź do następnego węzła tylko wtedy, gdy komunikacja między wszystkimi węzłami zostanie nawiązana.

Dodatek

W tym przykładzie wyjaśniamy, jak przygotować certyfikaty serwera potrzebne do wykonania czynności związanych z szyfrowaniem między węzłami. Polecenia pokazane w przykładzie używają tych parametrów:

Parametr Opis
node0 Dowolny unikalny ciąg znaków identyfikujący węzeł.
keystore.node0 Nazwa magazynu kluczy. Polecenia zakładają, że ten plik znajduje się w bieżącym katalogu.
keypass Hasło klucza musi być takie samo jak hasło magazynu kluczy.
dname Identyfikuje adres IP node0 jako 10.128.0.39.
-validity Wartość ustawiona w tej fladze sprawia, że wygenerowana para kluczy jest ważna przez 10 lat.
  1. Otwórz ten katalog:
    cd /opt/apigee/data/apigee-cassandra
  2. Uruchom to polecenie, aby wygenerować w bieżącym katalogu plik o nazwie keystore.node0:
    keytool -genkey -keyalg RSA -alias node0 -validity 3650 \
    -keystore keystore.node0 -storepass keypass \
    -keypass keypass -dname "CN=10.128.0.39, OU=None, \
    O=None, L=None, C=None"

    Ważne: upewnij się, że hasło klucza jest takie samo jak hasło magazynu kluczy.

  3. Wyeksportuj certyfikat do osobnego pliku:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Upewnij się, że plik jest czytelny tylko dla użytkownika apigee i nikogo innego:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Zaimportuj wygenerowany certyfikat node0.cer do magazynu zaufanych certyfikatów węzła:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    Powyższe polecenie prosi o ustawienie hasła. Jest to hasło magazynu zaufanych certyfikatów i może różnić się od hasła magazynu kluczy ustawionego wcześniej. Jeśli pojawi się prośba o uznanie certyfikatu za zaufany, wpisz yes.

  6. Użyj OpenSSL, aby wygenerować plik PEM certyfikatu bez kluczy. Pamiętaj, że cqlsh nie działa z certyfikatem w wygenerowanym formacie.
    $ keytool -importkeystore -srckeystore keystore.node0 \
    -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \
    keypass -deststorepass keypass
    $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \
    -passin pass:keypass
    $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
  7. W przypadku szyfrowania między węzłami skopiuj plik node0.cer do każdego węzła i zaimportuj go do magazynu zaufanych certyfikatów każdego węzła.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Użyj polecenia keytool -list, aby sprawdzić, czy w plikach magazynu kluczy i magazynu zaufanych certyfikatów znajdują się certyfikaty:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0