הגדרת פרוטוקול TLS לנתב ולמעבד הודעות

כברירת מחדל ב-Apigee Edge for Private Cloud 4.54.00, הנתב (Nginx) ומעבד ההודעות (Java 21) מפעילים את TLSv1.2 ו-TLSv1.3. בהתאם לצרכים העסקיים ולשיטות האבטחה שלכם, יכול להיות שתרצו להגביל את הפרוטוקולים המותרים או להפעיל מחדש פרוטוקולים ישנים יותר. במאמר הזה מוסבר איך להגדיר את פרוטוקולי ה-TLS לתנועה צפונה ולתנועה דרומה בנתב ובמעבד ההודעות.

ב-Router, אפשר גם להגדיר את הפרוטוקול למארחים וירטואליים ספציפיים. מידע נוסף זמין במאמר הגדרת גישת TLS ל-API ב-ענן פרטי.

במעבד הבקשות, אפשר להגדיר את הפרוטוקול ל-TargetEndpoint ספציפי. מידע נוסף זמין במאמר הגדרת TLS מ-Edge אל ה-Backend (ענן וענן פרטי).

הגדרת פרוטוקול TLS בנתב

המאפיינים הבאים עוזרים להגדיר את פרוטוקולי ה-TLS הרצויים בנתב לתקשורת צפונה.

כדי להגדיר את פרוטוקול ה-TLS בנתב, מגדירים מאפיינים בקובץ router.properties:

  1. פותחים את הקובץ router.properties בכלי לעריכת טקסט. אם הקובץ לא קיים, יוצרים אותו:
    vi /opt/apigee/customer/application/router.properties
  2. מגדירים את המאפיינים הרצויים:
    # Possible values are space-delimited list of: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
  3. שומרים את השינויים.
  4. מוודאים שקובץ המאפיינים נמצא בבעלות המשתמש apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. מפעילים מחדש את הנתב:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. בודקים את קובץ ה-Nginx‏ /opt/nginx/conf.d/0-default.conf כדי לוודא שהפרוטוקול עודכן כמו שצריך:
    cat /opt/nginx/conf.d/0-default.conf

    מוודאים שהערך של ssl_protocols הוא TLSv1.2.

  7. אם אתם משתמשים ב-TLS דו-כיווני עם מארח וירטואלי, אתם צריכים להגדיר גם את פרוטוקול ה-TLS במארח הווירטואלי, כמו שמתואר במאמר הגדרת גישת TLS ל-API בענן הפרטי.

הגדרת פרוטוקול TLS במעבד הבקשות

המאפיינים הבאים עוזרים להגדיר את פרוטוקולי ה-TLS הרצויים ב-מעבד בקשות לתקשורת דרומה. בקטע הזה מוסבר גם איך לעבוד עם פרוטוקולים וצפנים מושבתים של TLS.

כדי להגדיר את פרוטוקול ה-TLS במעבד הבקשות, מגדירים מאפיינים בקובץ message-processor.properties:

  1. פותחים את הקובץ message-processor.properties בכלי לעריכת טקסט. אם הקובץ לא קיים, יוצרים אותו:
    vi /opt/apigee/customer/application/message-processor.properties
  2. מגדירים את המאפיינים באמצעות התחביר הבא:
    # Possible values are a comma-delimited list of TLSv1, TLSv1.1, TLSv1.2, and TLSv1.3
    conf/system.properties+https.protocols=[TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    # Possible values are a comma-delimited list of SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
    # SSLv3 is required
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3[,TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    
    # Specify the ciphers that the Message Processor supports. (You must separate ciphers with a comma.):
    conf_message-processor-communication_local.http.ssl.ciphers=cipher[,...]

    לדוגמה:

    conf/system.properties+https.protocols=TLSv1.2
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1
    conf_message-processor-communication_local.http.ssl.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

    רשימה מלאה של מאפיינים קשורים זמינה במאמר בנושא הגדרת TLS בין נתב לבין מעבד הודעות.

  3. שומרים את השינויים.
  4. מוודאים שקובץ המאפיינים נמצא בבעלות המשתמש apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. מפעילים מחדש את מעבד הבקשות:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. אם אתם משתמשים ב-TLS דו-כיווני עם הקצה העורפי, הגדירו את פרוטוקול ה-TLS במארח הווירטואלי כמו שמתואר במאמר הגדרת TLS מ-Edge לקצה העורפי (Cloud ו-ענן פרטי).

עבודה עם צפנים ופרוטוקולי TLS ישנים יותר: אם אתם רוצים לעבוד עם צפנים או פרוטוקולים ישנים יותר, עיינו בסעיפים הבאים.

עבודה עם גרסאות ישנות יותר של TLS

ב-Java 21, פרוטוקולי TLS מדור קודם (TLSv1,‏ TLSv1.1 ו-SSLv3) ומפתחות Diffie-Hellman חלשים (DH keySize < 1024) מושבתים כברירת מחדל ב-jdk.tls.disabledAlgorithms. כדי להפעיל אותם, משתמשים באחת מהאפשרויות הבאות:

  • אפשרות א': מודרניזציה של פרוטוקולי בק-אנד: מעדכנים את שרתי הבק-אנד כך שיתמכו ב-TLS 1.2 או ב-TLS 1.3, ומוודאים שגודל הפרמטרים של Diffie-Hellman הוא 2,048 ביטים או יותר (>= 2048 ביטים).
  • אפשרות ב': הפעלה מחדש של פרוטוקולים מדור קודם באמצעות CwC: כדי לשמור על תאימות עם קצוות עורפיים מדור קודם של TLS 1.0 או TLS 1.1, מסירים את TLSv1, TLSv1.1 מ-conf_jvmsecurity_jdk.tls.disabledAlgorithms ב-/opt/apigee/customer/application/message-processor.properties באמצעות קוד עם הגדרה (CwC):
    # Re-enable TLS 1.0 and TLS 1.1 for legacy backend connectivity
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, TLS_RSA_*, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

עבודה עם צפנים סטטיים של RSA

‫Apigee Edge for Private Cloud בגרסה 4.54.00 פועל ב-Java 21, שבה סטים סטטיים של אלגוריתמים להצפנה (cipher suite)‏ (TLS_RSA_*) ללא חילופי מפתחות זמניים של Diffie-Hellman‏ (ECDHE או DHE) מושבתים כברירת מחדל ב-jdk.tls.disabledAlgorithms (לדוגמה, TLS_RSA_WITH_AES_128_CBC_SHA או TLS_RSA_WITH_AES_256_CBC_SHA). כדי לתמוך בקצוות עורפיים שדורשים סטים סטטיים של אלגוריתמים להצפנה (cipher suite), צריך להשתמש באפשרות הבאה:

  • הפעלה מחדש של צפני RSA סטטיים באמצעות CwC: כדי לשמור על תאימות למערכות קצה עורפי מדור קודם, מסירים את TLS_RSA_* מ-conf_jvmsecurity_jdk.tls.disabledAlgorithms ב-/opt/apigee/customer/application/message-processor.properties באמצעות קוד עם הגדרה (CwC):
    # Re-enable Static RSA ciphers for backward compatibility with legacy Java 8 backends
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

אחרי שמשנים את המאפיינים, מפעילים מחדש את מעבד ההודעות באמצעות הפקודה apigee-service:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

הפעלת TLS 1.3 למארחים

בקטע הזה מוסבר איך להפעיל את TLS 1.3 למארחים וירטואליים ספציפיים. כדי להפעיל את TLS 1.3, מבצעים את השלבים הבאים בצמתים של שרת הניהול:

  1. בכל צומת של שרת ניהול, עורכים את הקובץ /opt/apigee/customer/application/management-server.properties ומוסיפים את השורה הבאה (אם הקובץ לא קיים, יוצרים אותו):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    במקרה של הקובץ הזה, הפרוטוקולים מופרדים באמצעות פסיקים והם תלויי אותיות רישיות.

  2. שומרים את הקובץ.
  3. מוודאים שהקובץ נמצא בבעלות המשתמש apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. מפעילים מחדש את שרת הניהול:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. חוזרים על השלבים הקודמים בכל הצמתים של Management Server, אחד אחרי השני.
  6. יוצרים (או מעדכנים) מארח וירטואלי קיים עם המאפיין הבא. שימו לב שהפרוטוקולים מופרדים באמצעות רווחים והם תלויי אותיות רישיות:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    בדוגמה הבאה מוצג vhost לדוגמה עם המאפיין הזה:

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }

בדיקת TLS 1.3

כדי לבדוק את TLS 1.3, מזינים את הפקודה הבאה:

curl -v --tlsv1.3 "https://api.myCompany,com/testproxy"

שימו לב שאפשר לבדוק את TLS 1.3 רק בלקוחות שתומכים בפרוטוקול הזה. אם TLS 1.3 לא מופעל, תוצג הודעת שגיאה דומה לזו שבהמשך:

sslv3 alert handshake failure