節點間 (或節點對節點) 加密會使用 TLS,保護在叢集節點之間傳輸的資料。本頁面說明如何在 Edge for Private Cloud 上,使用 TLS 啟用 Cassandra 節點間加密。如要執行這些步驟,您必須熟悉 Cassandra 環的詳細資料。
啟用 Cassandra 節點間加密
如要啟用 Cassandra 節點間加密功能,請在叢集中的所有節點上,按照下列程序操作。您必須將每個節點的公開憑證發布至所有節點。完成後,每個節點的信任儲存庫都會包含憑證 node0.cer、node1.cer 等。每個節點的 KeyStore 只會包含自己的私密金鑰。舉例來說,node0 的 KeyStore 只會包含 node0.pem。您必須逐一為每個節點啟用加密功能。
請按照下列步驟啟用 Cassandra 節點間加密功能:
按照附錄中的步驟產生伺服器憑證,建立自行簽署的金鑰和憑證。
下列步驟假設您已建立
keystore.node0和truststore.node0,以及 KeyStore 和信任儲存庫密碼,如附錄所述。在每個節點上,應先建立 KeyStore 和 TrustStore,再繼續進行後續步驟。- 將下列屬性新增至
/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
- 確認檔案
cassandra.properties的擁有者是 apigee 使用者:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
請在每個 Cassandra 節點上逐一執行下列步驟,讓變更生效,且不會造成使用者停機:
- 停止 Cassandra 服務:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- 重新啟動 Cassandra 服務:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 如要確認 TLS 加密服務是否已啟動,請查看系統記錄中是否有下列訊息:
Starting Encrypted Messaging Service on TLS port
執行憑證輪換
如要輪替憑證,請按照下列步驟操作:
- 將每個不重複產生的金鑰組憑證 (請參閱附錄) 新增至現有 Cassandra 節點的信任存放區,讓舊憑證和新憑證都存在於同一個信任存放區:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
其中
NEW_ALIAS是用於識別項目的不重複字串,CERT是要新增的憑證檔案名稱,EXISTING_TRUSTSTORE則是 Cassandra 節點上現有信任儲存庫的名稱。 - 使用 scp 等複製公用程式,將信任存放區發布至叢集中的所有 Cassandra 節點,取代每個節點目前使用的信任存放區。
- 對叢集執行滾動式重新啟動,載入新的信任儲存庫,並在新的金鑰就緒前建立信任關係:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- 在叢集的每個 Cassandra 節點上,將 cassandra.properties 檔案中顯示的屬性更新為新的 KeyStore 值:
conf_cassandra_keystore=NEW_KEYSTORE_PATH conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
where
NEW_KEYSTORE_PATHis the path to the directory where the keystore file is located andNEW_KEYSTORE_PASSWORDis the keystore password set when the certificates were created, as explained in the Appendix. - Stop the Cassandra service:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- 重新啟動 Cassandra 服務:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 所有節點之間成功建立通訊後,請繼續處理下一個 Cassandra 節點。注意:只有在所有節點之間成功建立通訊後,才能繼續前往下一個節點。
附錄
以下範例說明如何準備執行節點間加密步驟所需的伺服器憑證。範例中的指令使用下列參數:
| 參數 | 說明 |
|---|---|
node0 |
用於識別節點的任何不重複字串。 |
keystore.node0 |
金鑰儲存庫名稱。指令會假設這個檔案位於目前的目錄中。 |
keypass |
KeyStore 和金鑰的 keypass 必須相同。 |
dname |
將 node0 的 IP 位址識別為 10.128.0.39。 |
-validity |
這個旗標設定的值會讓產生的金鑰組有效期限為 10 年。 |
- 前往下列目錄:
cd /opt/apigee/data/apigee-cassandra
- 執行下列指令,在目前目錄中產生名為
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 密碼相同。
- 將憑證匯出至獨立檔案:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- 確保檔案只能由 apigee 使用者讀取,其他人無法讀取:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- 將產生的憑證
node0.cer匯入節點的信任存放區:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
上述指令會要求您設定密碼。這是信任儲存庫密碼,可以與您先前設定的金鑰儲存庫密碼不同。如果系統提示您信任憑證,請輸入
yes。 - 使用 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
- 如要進行節點對節點加密,請將
node0.cer檔案複製到每個節點,並匯入每個節點的信任存放區。keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- 使用
keytool -list檢查 KeyStore 和 TrustStore 檔案中的憑證:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0