הפעלת הצפנה של אינטראקציה ב-Cassandra

הצפנה בין צמתים (או מצומת לצומת) מגינה על הנתונים שעוברים בין צמתים באשכול באמצעות TLS. בדף הזה מוסבר איך מפעילים הצפנה בין צמתים ב-Cassandra באמצעות TLS ב-Edge for Private Cloud. כדי לבצע את השלבים האלה, עליכם להכיר את הפרטים של טבעת Cassandra.

הפעלת הצפנה בין צמתים ב-Cassandra

כדי להפעיל את ההצפנה בין הצמתים ב-Cassandra:

  1. יוצרים אישורי שרת לפי השלבים המפורטים בנספח ליצירת מפתח ואישור בחתימה עצמית.

    אם אתם משתמשים ב-Edge for 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. מבצעים הפעלה מחדש מתגלגלת של האשכול כדי לטעון את ה-Truststore החדש וליצור אמון במפתחות החדשים לפני שהם נוצרים:
    /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

    הפקודה שלמעלה מבקשת להגדיר סיסמה. זוהי הסיסמה של מאגר האמון, והיא יכולה להיות שונה מסיסמת מאגר המפתחות שהגדרתם קודם. אם מופיעה בקשה לאשר את האישור, מזינים 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. כדי לבדוק אם יש אישורים בקובצי מאגר המפתחות ובקובצי Truststore, משתמשים ב-keytool -list:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

עבודה עם מאגרי מפתחות של BCFKS למערכות הפעלה שתומכות ב-FIPS

כשעובדים עם מערכות הפעלה שתומכות ב-FIPS, צריך להשתמש ב-BouncyCastle FIPS Keystores‏ (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 למאגר האמון של הצומת:

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