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

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

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

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

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

    หากคุณใช้ Edge สำหรับ Private Cloud ในระบบปฏิบัติการที่เปิดใช้ FIPS ให้ใช้ BouncyCastle FIPS Keystore (BCFKS) ดูภาคผนวกด้านล่างสำหรับเคล็ดลับในการทำงานกับคีย์สโตร์ประเภท BCFKS

    ขั้นตอนต่อไปนี้จะถือว่าคุณได้สร้าง 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
      
    # 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
      
  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 พาสคีย์ต้องเหมือนกันทั้งสำหรับคีย์สโตร์และคีย์
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 ไปยังแต่ละโหนด แล้วนําเข้าไปยังที่เก็บข้อมูลที่เชื่อถือของโหนดแต่ละโหนด
    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

การทำงานกับคีย์สโตร์ 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