Włącz szyfrowanie węzła Cassandra

Szyfrowanie między węzłami (czyli między węzłami) chroni dane przesyłane między węzłami w klastrze przy użyciu protokołu TLS. Na tej stronie dowiesz się, jak włączyć szyfrowanie międzywęzłami Cassandra za pomocą protokołu TLS w Edge dla Private Cloud. Aby wykonać te czynności, musisz znać szczegóły swojego pierścienia Cassandra.

Włącz szyfrowanie międzywęzłów Cassandra

Aby włączyć szyfrowanie międzywęzłami Cassandra, wykonaj poniższą procedurę dla wszystkich węzłów w klastrze. Musisz rozesłać certyfikaty publiczne każdego węzła do wszystkich węzłów. Gdy to zrobisz, każdy węzeł będzie zawierał w magazynie zaufanych certyfikatów node0.cer, node1.cer itp. Każdy węzeł będzie zawierał tylko własny klucz prywatny w magazynie kluczy. Na przykład node0 będzie zawierać w swoim magazynie kluczy tylko node0.pem. Musisz włączyć szyfrowanie w każdym węźle pojedynczo.

Aby włączyć szyfrowanie międzywęzłami Cassandra, wykonaj te czynności:

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

    W kolejnych krokach przyjęto, że masz utworzone keystore.node0 i truststore.node0, a także hasła do magazynu kluczy i zaufanego magazynu, zgodnie z dodatkiem. Zanim przejdziesz do kolejnych kroków, w każdym węźle utwórz magazyn kluczy i magazyn zaufania.

  2. Dodaj do pliku /opt/apigee/customer/application/cassandra.properties te właściwości. Jeśli plik nie istnieje, utwórz go.
    conf_cassandra_internode_encryption=all
    conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_keystore_password=keypass
    conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_truststore_password=trustpass
    # Optionally set the following to enable 2-way TLS or mutual TLS
    # conf_cassandra_require_client_auth=true
  3. Sprawdź, czy plik cassandra.properties należy do użytkownika Apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

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

  1. Zatrzymaj usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Ponownie uruchom usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. Aby sprawdzić, czy usługa szyfrowania TLS została uruchomiona, poszukaj w logach systemowych tego komunikatu:
    Starting Encrypted Messaging Service on TLS port

Przeprowadzanie rotacji certyfikatów

Aby przeprowadzić rotację certyfikatów, wykonaj te czynności:

  1. Dodaj certyfikat każdej niepowtarzalnej wygenerowanej pary kluczy (patrz Dodatek) do istniejącego magazynu zaufania węzła Cassandra, tak aby zarówno stare, jak i nowe certyfikaty znajdowały się w tym samym magazynie zaufania:
    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 zaufania w węźle Cassandra.

  2. Użyj narzędzia kopiującego, takiego jak scp, aby rozpowszechnić magazyn zaufania do wszystkich węzłów Cassandra w klastrze, zastępując istniejący magazyn zaufania używany przez każdy węzeł.
  3. Wykonaj kroczące ponowne uruchomienie klastra, aby wczytać nowy magazyn zaufania i ustanowić zaufanie dla nowych kluczy, zanim zostaną one utworzone:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. W każdym węźle Cassandra w klastrze zaktualizuj właściwości widoczne poniżej, dodając nowe wartości magazynu kluczy w pliku cassandra.properties:
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. Ponownie uruchom usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. Gdy komunikacja zostanie nawiązana między wszystkimi węzłami, 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

Z przykładu poniżej dowiesz się, jak przygotować certyfikaty serwera niezbędne do wykonania kroków szyfrowania międzywęzłów. Polecenia pokazane w przykładzie korzystają z tych parametrów:

Parametr Opis
node0 Dowolny niepowtarzalny ciąg identyfikujący węzeł.
keystore.node0 Nazwa magazynu kluczy. W poleceniach ten plik znajduje się w bieżącym katalogu.
keypass Klucze muszą być takie same zarówno dla magazynu kluczy, jak i dla klucza.
dname Określa adres IP node0 jako 10.128.0.39.
-validity Wartość ustawiona dla tej flagi oznacza, że wygenerowana para kluczy jest ważna przez 10 lat.
  1. Przejdź do tego katalogu:
    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 do 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 przez 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 zaufania węzła:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    W powyższym poleceniu musisz ustawić hasło. Jest to hasło do magazynu kluczy. Może być inne niż ustawione wcześniej hasło magazynu kluczy. Jeśli pojawi się prośba o oznaczenie certyfikatu jako zaufanego, wpisz yes.

  6. Użyj metody opensl, aby wygenerować plik PEM z certyfikatem 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 zaufania każdego węzła.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Użyj narzędzia keytool -list, aby sprawdzić certyfikaty w plikach magazynu kluczy i magazynu zaufania:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0