การเข้ารหัสระหว่างโหนด (หรือโหนดต่อโหนด) จะปกป้องข้อมูลที่ส่งระหว่างโหนดในคลัสเตอร์โดยใช้ TLS หน้านี้จะอธิบายวิธีเปิดใช้การเข้ารหัสระหว่างโหนด Cassandra โดยใช้ TLS บน Edge สำหรับ Private Cloud หากต้องการทำตามขั้นตอนเหล่านี้ คุณต้องทำความคุ้นเคยกับรายละเอียดของแหวน Cassandra
เปิดใช้การเข้ารหัสระหว่างโหนดของ Cassandra
ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การเข้ารหัสระหว่างโหนด Cassandra
สร้างใบรับรองเซิร์ฟเวอร์โดยทำตามขั้นตอนในภาคผนวกเพื่อสร้างคีย์และใบรับรองแบบ Self-Signed
หากคุณใช้ Edge สำหรับ Private Cloud ในระบบปฏิบัติการที่เปิดใช้ FIPS ให้ใช้ BouncyCastle FIPS Keystore (BCFKS) ดูภาคผนวกด้านล่างสำหรับเคล็ดลับในการทำงานกับคีย์สโตร์ประเภท BCFKS
ขั้นตอนต่อไปนี้จะถือว่าคุณได้สร้าง
keystore.node0
และtruststore.node0
รวมถึงรหัสผ่านของคีย์สโตร์และทรัสต์สโตร์แล้ว ตามที่อธิบายไว้ในภาคผนวก คุณควรสร้างคีย์สโตร์และทรัสต์สโตร์เป็นขั้นตอนเบื้องต้นในแต่ละโหนดก่อนดำเนินการขั้นตอนถัดไป- เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงในไฟล์
/opt/apigee/customer/application/cassandra.properties
หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์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 # Set the following in FIPS enabled operating systems # With FIPS, older TLS protocols are disabled, so set to TLSv1.2 conf_cassandra_server_encryption_protocol=TLSv1.2 # With FIPS, use BCFKS keystores conf_cassandra_server_encryption_store_type=BCFKS
- ตรวจสอบว่าไฟล์
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 เริ่มทำงานแล้วหรือยัง ให้ตรวจสอบบันทึกของระบบเพื่อหาข้อความต่อไปนี้
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
หมุนเวียนใบรับรอง
หากต้องการหมุนเวียนใบรับรอง ให้ทำตามขั้นตอนต่อไปนี้
- เพิ่มใบรับรองสำหรับคู่คีย์ที่ไม่ซ้ำกันแต่ละคู่ที่สร้างขึ้น (ดูภาคผนวก) ลงในที่เก็บข้อมูลที่เชื่อถือของโหนด 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
conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
โดยที่
NEW_KEYSTORE_PATH
คือเส้นทางไปยังไดเรกทอรีที่มีไฟล์คีย์สโตร์ และNEW_KEYSTORE_PASSWORD
คือรหัสผ่านคีย์สโตร์ที่ตั้งไว้เมื่อสร้างใบรับรอง ตามที่อธิบายไว้ในภาคผนวก - หยุดบริการ Cassandra โดยทำดังนี้
/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 |
พาสคีย์ต้องเหมือนกันทั้งสำหรับคีย์สโตร์และคีย์ |
dname |
ระบุที่อยู่ IP ของ node0 เป็น 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"
สำคัญ: ตรวจสอบว่ารหัสผ่านของคีย์เหมือนกับรหัสผ่านของคีย์สโตร์
- ส่งออกใบรับรองไปยังไฟล์แยกกัน โดยทำดังนี้
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
ที่สร้างขึ้น ไปยัง Truststore ของโหนด:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
คำสั่งข้างต้นจะขอให้คุณตั้งรหัสผ่าน รหัสผ่านนี้คือรหัสผ่านของ Truststore และอาจแตกต่างจากรหัสผ่านของคีย์สโตร์ที่คุณได้ตั้งไว้ก่อนหน้านี้ หากได้รับข้อความแจ้งให้เชื่อถือใบรับรอง ให้ป้อน
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
เพื่อตรวจสอบใบรับรองในไฟล์คีย์สโตร์และไฟล์ Truststore โดยทำดังนี้$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0
การทำงานกับคีย์สโตร์ BCFKS สำหรับระบบปฏิบัติการที่เปิดใช้ FIPS
เมื่อใช้ระบบปฏิบัติการที่เปิดใช้ FIPS ให้ใช้ BouncyCastle FIPS Keystore (BCFKS) ส่วนด้านล่างอธิบายวิธีใช้คีย์สโตร์ประเภท BCFKS ขั้นตอนอื่นๆ ในการทำงานกับคีย์สโตร์ (เช่น การเป็นเจ้าของไฟล์ ตำแหน่งไฟล์ และอื่นๆ) จะยังคงเหมือนเดิมตามที่ระบุไว้ในภาคผนวกนี้
หากต้องการสร้างคีย์สโตร์ประเภท BCFKS ให้ใช้คำสั่งด้านล่าง
keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \ -storepass keypass -keypass keypass -v \ -dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS
หมายเหตุ: รหัสผ่านคีย์สโตร์และรหัสผ่านคีย์ควรเหมือนกัน
หมายเหตุ: คุณสามารถใช้ไฟล์ jar bc-fips
ที่ Apigee จัดส่งให้ หรือจะดาวน์โหลดไฟล์ jar เดียวกันจากที่เก็บของ BouncyCastle ก็ได้ โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้างคีย์สโตร์ BCFKS ในเอกสารประกอบของ BouncyCastle
วิธีส่งออกใบรับรองเป็นไฟล์แยกต่างหาก
keytool -export -v -alias node0 -file node0.cer -keystore keystore.node0 -storepass keypass \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS
นำเข้าใบรับรอง node0.cer
ที่สร้างขึ้น ไปยัง Truststore ของโหนด:
keytool -import -v -alias node0 -file node0.cer -keystore truststore.node0 -storepass storepass \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS