เปิดใช้การเข้ารหัสภายในของ Cassandra

การเข้ารหัสระหว่างโหนด (หรือโหนดต่อโหนด) ช่วยปกป้องข้อมูลที่เดินทางระหว่างโหนดในคลัสเตอร์ การใช้ TLS หน้านี้อธิบายวิธีเปิดใช้การเข้ารหัสระหว่างโหนด Cassandra โดยใช้ TLS ใน Edge สำหรับ Private Cloud คุณต้องทำความคุ้นเคยกับรายละเอียดของ Cassandra ส่งเสียง

เปิดใช้การเข้ารหัส Internode ของ Cassandra

ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การเข้ารหัสระหว่างโหนด Cassandra

  1. สร้างใบรับรองเซิร์ฟเวอร์โดยทำตามขั้นตอนในภาคผนวก เพื่อสร้างคีย์แบบ Self-Signed และใบรับรอง

    ขั้นตอนต่อไปนี้จะถือว่าคุณได้สร้าง keystore.node0 แล้ว และ truststore.node0 รวมถึงคีย์สโตร์และรหัสผ่าน Truststore ตามที่อธิบายไว้ในภาคผนวก คุณควรสร้างคีย์สโตร์และ 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 ที่มีอยู่ Truststore ของโหนด เพื่อให้มีทั้งใบรับรองเก่าและใบรับรองใหม่ Truststore:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    โดยที่ NEW_ALIAS เป็นสตริงที่ไม่ซ้ำกันในการระบุรายการ CERT จะเป็น ชื่อใบรับรอง ไฟล์ที่จะเพิ่ม และ EXISTING_TRUSTSTORE คือชื่อของ Truststore ที่มีอยู่ในโหนด Cassandra

  2. ใช้ยูทิลิตีการคัดลอก เช่น scp เพื่อกระจาย Truststore ไปยังโหนด Cassandra ทั้งหมดในคลัสเตอร์ แทนที่ Truststore ที่มีอยู่ซึ่งแต่ละโหนดใช้งานอยู่
  3. ดำเนินการรีสตาร์ทคลัสเตอร์อย่างต่อเนื่องเพื่อโหลด Truststore ใหม่และสร้างความน่าเชื่อถือสำหรับ คีย์ใหม่ก่อนที่จะใช้งานได้
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. บนโหนด Cassandra แต่ละรายการในคลัสเตอร์ ให้อัปเดตพร็อพเพอร์ตี้ที่แสดงด้านล่างเป็นคีย์สโตร์ใหม่ ในไฟล์ 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. รีสตาร์ทบริการ Cassandra ด้วยคำสั่งต่อไปนี้
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. เมื่อสร้างการสื่อสารระหว่างโหนดทั้งหมดเรียบร้อยแล้ว ให้ไปยังขั้นตอนถัดไป โหนด Cassandra หมายเหตุ: โปรดไปยังโหนดถัดไปเมื่อการสื่อสารเป็นที่เรียบร้อยแล้วเท่านั้น ที่สร้างขึ้นระหว่างโหนดทั้งหมด

ภาคผนวก

ตัวอย่างต่อไปนี้จะอธิบายวิธีเตรียมใบรับรองเซิร์ฟเวอร์ที่จำเป็นต่อการดำเนินการ ขั้นตอนการเข้ารหัสอินเตอร์โหนด คำสั่งที่แสดงในตัวอย่างใช้พารามิเตอร์ต่อไปนี้

พารามิเตอร์ คำอธิบาย
node0 สตริงที่ไม่ซ้ำกันเพื่อระบุโหนด
keystore.node0 ชื่อคีย์สโตร์ คำสั่งจะถือว่าไฟล์นี้อยู่ในไดเรกทอรีปัจจุบัน
keypass คีย์พาสต้องเหมือนกันสำหรับทั้งคีย์สโตร์และคีย์
dname ระบุที่อยู่ IP ของ node0 เป็น 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"

    สำคัญ: ตรวจสอบว่ารหัสผ่านคีย์เหมือนกับรหัสผ่านคีย์สโตร์

  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 ที่สร้างขึ้น ไปยัง Truststore ของโหนด:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    คำสั่งข้างต้นจะขอให้คุณตั้งรหัสผ่าน นี่คือรหัสผ่าน Truststore และสามารถ ต่างจากรหัสผ่านคีย์สโตร์ที่คุณตั้งไว้ก่อนหน้านี้ หากได้รับข้อความแจ้งให้เชื่อถือใบรับรอง ป้อน 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 ไปยังแต่ละโหนด แล้วนำเข้า ไปยัง Truststore ของแต่ละโหนด
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. ใช้ keytool -list เพื่อตรวจสอบใบรับรองในไฟล์คีย์สโตร์และ Truststore ดังนี้
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0