啟用 Cassandra 跨節點加密

節點間 (或節點對節點) 加密功能可保護使用 TLS 的叢集內節點之間傳輸的資料。本頁面說明如何在私人雲端使用 Edge 的 TLS 來啟用 Cassandra 節點間加密。如要執行這些步驟,您必須熟悉 Cassandra 環的詳細資料。

啟用 Cassandra 節點間加密

如要啟用 Cassandra 節點間加密功能,請在叢集的所有節點中按照下方程序操作。您必須將各個節點的公用憑證發布至所有節點。這麼做之後,每個節點的信任儲存庫中都會包含 node0.cernode1.cer 等憑證。每個節點的 KeyStore 中只會包含自己的私密金鑰。例如,node0 在 KeyStore 中只會包含 node0.pem。您必須為每個節點啟用加密功能,一次一個。

請按照下列步驟啟用 Cassandra 節點間加密:

  1. 按照附錄中的步驟產生伺服器憑證,建立自行簽署的金鑰和憑證。

    下列步驟假設您已建立 keystore.node0truststore.node0,以及 KeyStore 和信任儲存庫密碼,如附錄所述。 請先建立 KeyStore 和 TrustStore 當做每個節點的初始步驟,然後再繼續後續步驟。

  2. 將下列屬性新增至 /opt/apigee/customer/application/cassandra.properties 檔案。如果檔案不存在,請建立檔案。
    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. 確保 cassandra.properties 檔案為 Apigee 使用者所有:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

請逐一對每個 Cassandra 節點執行下列步驟,這樣變更就會生效,而不會對使用者造成任何停機:

  1. 停止 Cassandra 服務:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. 重新啟動 Cassandra 服務:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. 如要判斷 TLS 加密服務是否已啟動,請在系統記錄中查看下列訊息:
    Starting Encrypted Messaging Service on TLS port

執行憑證輪替

如要輪替憑證,請按照下列步驟操作:

  1. 將每個不重複的產生金鑰組的憑證 (請參閱附錄) 新增至現有 Cassandra 節點的信任儲存庫,以便讓舊憑證和新憑證存在於同一個信任儲存庫:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    其中 NEW_ALIAS 是可用於識別項目的不重複字串,CERT 是要新增的憑證檔案名稱,而 EXISTING_TRUSTSTORE 是 Cassandra 節點上現有信任存放區的名稱。

  2. 使用 scp 等複製公用程式,將信任存放區發布至叢集中的所有 Cassandra 節點,取代每個節點使用的現有信任存放區。
  3. 執行叢集的滾動式重新啟動作業,載入新的信任儲存庫,並在新金鑰取得前建立信任關係:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. 在叢集的各個 Cassandra 節點上,將下列屬性更新為 cassandra.properties 檔案中的新 KeyStore 值:
    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. 重新啟動 Cassandra 服務:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. 成功建立所有節點之間的通訊後,請繼續執行下一個 Cassandra 節點。注意:只有在所有節點之間順利建立通訊時,才會繼續進行下一個節點。

附錄

以下範例說明如何準備執行跨節點加密步驟所需的伺服器憑證。範例中顯示的指令使用下列參數:

參數 說明
node0 用於識別節點的任何不重複字串。
keystore.node0 KeyStore 名稱。指令會假設這個檔案位於目前的目錄中。
keypass KeyStore 和金鑰的 Keypass 必須相同。
dname node0 的 IP 位址識別為 10.128.0.39
-validity 此旗標設定的值可以讓產生的金鑰組在 10 年內有效。
  1. 前往下列目錄:
    cd /opt/apigee/data/apigee-cassandra
  2. 執行下列指令,在目前的目錄中產生名為 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"

    重要事項:請確認金鑰密碼與 KeyStore 密碼相同。

  3. 將憑證匯出到個別檔案:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. 確保只有 Apigee 使用者能夠讀取檔案,而且其他人無法讀取:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. 將產生的憑證「node0.cer」匯入節點的信任儲存庫:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    上述指令會要求您設定密碼。這是信任儲存庫密碼,可以與您先前設定的 KeyStore 密碼不同。如果系統提示您信任憑證,請輸入 yes

  6. 使用 openssl 產生不含金鑰的憑證 PEM 檔案。請注意,cqlsh 無法與產生的格式搭配使用的憑證。
    $ 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. 如要進行節點對節點加密,請將 node0.cer 檔案複製到各個節點,然後匯入各個節點的信任儲存庫。
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. 使用 keytool -list 檢查 KeyStore 和 Truststore 檔案中的憑證:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0