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

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

เปิดใช้การเข้ารหัสระหว่างโหนดของ Cassandra

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

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

    ขั้นตอนต่อไปนี้จะถือว่าคุณได้สร้าง keystore.node0 และ truststore.node0 รวมถึงรหัสผ่านของคีย์สโตร์และทรัสต์สโตร์ตามที่อธิบายไว้ใน ภาคผนวก คุณควรสร้างคีย์สโตร์และทรัสต์สโตร์เป็นขั้นตอนเบื้องต้นในแต่ละโหนดก่อนที่จะดำเนินการตามขั้นตอนถัดไป

  2. เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงในไฟล์ /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
      
  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 เริ่มทำงานแล้ว ให้ตรวจสอบบันทึกของระบบเพื่อดูข้อความต่อไปนี้
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

ทำการหมุนเวียนใบรับรอง

หากต้องการหมุนเวียนใบรับรอง ให้ทำตามขั้นตอนต่อไปนี้

  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
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    โดยที่ NEW_KEYSTORE_PATH คือเส้นทางไปยังไดเรกทอรีที่ไฟล์คีย์สโตร์อยู่ และ NEW_KEYSTORE_PASSWORD คือรหัสผ่านของคีย์สโตร์ที่ตั้งไว้เมื่อสร้างใบรับรองตามที่อธิบายไว้ใน ภาคผนวก

  5. หยุดบริการ Cassandra
    /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 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 ที่สร้างขึ้นไปยังทรัสต์สโตร์ของโหนด
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    คำสั่งด้านบนจะขอให้คุณตั้งรหัสผ่าน ซึ่งเป็นรหัสผ่านของทรัสต์สโตร์และอาจ แตกต่างจากรหัสผ่านของคีย์สโตร์ที่คุณตั้งไว้ก่อนหน้านี้ หากระบบแจ้งให้เชื่อถือใบรับรอง ให้ป้อน 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 เพื่อตรวจสอบใบรับรองในไฟล์คีย์สโตร์และทรัสต์สโตร์
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0