為路由器和訊息處理器設定傳輸層安全標準 (TLS) 通訊協定

在 Apigee Edge for Private Cloud 4.54.00 中,路由器 (Nginx) 和訊息處理器 (Java 21) 預設會啟用 TLSv1.2 和 TLSv1.3。視業務需求和安全性做法而定,您可能需要限制允許的通訊協定,或重新啟用舊版通訊協定。本文說明如何為路由器和訊息處理器上的北向和南向流量設定 TLS 協定。

對於 Router,您也可以為個別虛擬主機設定通訊協定。詳情請參閱「設定 Private Cloud 的 API TLS 存取權」。

對於訊息處理器,您可以為個別 TargetEndpoint 設定通訊協定。詳情請參閱「設定從 Edge 到後端的 TLS (Cloud 和私有雲)」。

在路由器上設定 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 通訊協定,詳情請參閱「設定私有雲 API 的 TLS 存取權」。

在訊息處理器上設定 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 連線後端,請按照「設定從 Edge 到後端的 TLS (Cloud 和 私有雲)」一文所述,在虛擬主機中設定 TLS 通訊協定。

使用舊版加密和 TLS 通訊協定:如要使用舊版加密或通訊協定,請參閱下列各節。

使用舊版 TLS

在 Java 21 中,jdk.tls.disabledAlgorithms 預設會停用舊版 TLS 通訊協定 (TLSv1、TLSv1.1 和 SSLv3) 和弱 Diffie-Hellman 金鑰 (DH keySize < 1024)。如要啟用,請使用下列其中一種方法:

  • 選項 A:更新後端通訊協定:更新後端伺服器,支援 TLS 1.2 或 TLS 1.3,並確保 Diffie-Hellman 參數大小為 2048 位元以上 (>= 2048 位元)。
  • 選項 B:使用 CwC 重新啟用舊版通訊協定:使用程式碼與設定 (CwC),從 /opt/apigee/customer/application/message-processor.properties 的 conf_jvmsecurity_jdk.tls.disabledAlgorithms 中移除 TLSv1, TLSv1.1,維持與舊版 TLS 1.0 或 TLS 1.1 後端的相容性:
    # 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 上執行,其中缺少暫時 Diffie-Hellman 金鑰交換 (ECDHE 或 DHE) 的靜態 RSA 加密套件 (TLS_RSA_*) 預設會在 jdk.tls.disabledAlgorithms 中停用 (例如 TLS_RSA_WITH_AES_128_CBC_SHA 或 TLS_RSA_WITH_AES_256_CBC_SHA)。如要支援需要靜態 RSA 加密套件的後端,請使用下列選項:

  • 使用 CwC 重新啟用靜態 RSA 加密:使用程式碼與設定 (CwC),從 /opt/apigee/customer/application/message-processor.properties 的 conf_jvmsecurity_jdk.tls.disabledAlgorithms 中移除 TLS_RSA_*,維持與舊版後端的相容性:
    # 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. 在所有管理伺服器節點上逐一重複上述步驟。
  6. 使用下列屬性建立 (或更新現有) 虛擬主機。請注意,通訊協定之間以空格分隔,且須區分大小寫:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    以下範例顯示具有這項屬性的虛擬主機:

    {
      "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