הפעלת הצפנה של אינטראקציה ב-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 למאגר האמון של הצומת:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    בפקודה שלמעלה תתבקשו להגדיר סיסמה. זוהי הסיסמה ל-Truststore להיות שונה מסיסמה של מאגר המפתחות שהגדרתם קודם. אם מופיעה הנחיה לתת אמון באישור, צריך להזין yes.

  6. אפשר להשתמש ב-Opensl כדי ליצור קובץ 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 כדי לבדוק אם יש אישורים בקובצי מאגר המפתחות ומאגר האמון:
    $ 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 שנוצר ל-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