Router と Message Processor の TLS プロトコルの設定

Apigee Edge for Private Cloud 4.54.00 のデフォルトでは、ルーター(Nginx)と Message Processor(Java 21)で TLSv1.2 と TLSv1.3 が有効になっています。ビジネスニーズとセキュリティ プラクティスによっては、許可されるプロトコルを制限したり、古いプロトコルを再度有効にしたりすることが必要になる場合があります。このドキュメントでは、Router と Message Processor の上り(内向き)トラフィックと下り(外向き)トラフィックの TLS プロトコルを構成する方法について説明します。

Router の場合は、個々の仮想ホストのプロトコルを設定することもできます。詳細については、プライベート クラウド 用 API への TLS アクセスの構成をご覧ください。

メッセージ プロセッサでは、個々の TargetEndpoint のプロトコルを設定できます。詳細については、Edge からバックエンドへの TLS の構成(Cloud、プライベート クラウド)をご覧ください。

Router で TLS プロトコルを設定する

次のプロパティは、ノースバウンド通信用に Router で必要な TLS プロトコルを設定するのに役立ちます。

Router で 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. Router を再起動します。
    /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 を使用している場合は、Private Cloud 用 API への TLS アクセスの構成の説明に従って、仮想ホストで TLS プロトコルを設定する必要があります。

Message Processor で TLS プロトコルを設定する

次のプロパティを使用すると、下り(南向き)通信用の Message Processor で必要な TLS プロトコルを設定できます。このセクションでは、無効になっている TLS プロトコルと暗号を操作する方法についても説明します。

Message Processor で 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

    関連するプロパティの一覧については、Router と Message Processor 間の TLS の構成をご覧ください。

  3. 変更を保存します。
  4. プロパティ ファイルの所有者が apigee ユーザーであることを確認します。
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Message Processor を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. バックエンドで双方向 TLS を使用している場合は、Edge からバックエンドへの TLS の構成(Cloud、プライベート クラウド)で説明されているように、仮想ホストで TLS プロトコルを設定します。

古い暗号と TLS プロトコルの使用: 古い暗号またはプロトコルを使用する場合は、次のセクションをご覧ください。

古い TLS を使用する

Java 21 では、以前の TLS プロトコル(TLSv1、TLSv1.1、SSLv3)と弱いディフィーヘルマン鍵(DH keySize < 1024)は、jdk.tls.disabledAlgorithms でデフォルトで無効になっています。これらを有効にするには、次のいずれかのオプションを使用します。

  • オプション A: バックエンド プロトコルを最新化する: TLS 1.2 または TLS 1.3 をサポートするようにバックエンド サーバーを更新し、ディフィーヘルマン パラメータ サイズが 2,048 ビット以上(>= 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 で動作します。Java 21 では、一時的なディフィーヘルマン鍵交換(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 を使用して Message Processor を再起動します。

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

ホストで TLS 1.3 を有効にする

このセクションでは、特定の仮想ホストで TLS 1.3 を有効にする方法について説明します。TLS 1.3 を有効にするには、Management Server ノードで次の操作を行います。

  1. 各 Management Server ノードで、ファイル /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 ノードで上記の手順を 1 つずつ繰り返します。
  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