Impostazione del protocollo TLS per router e processore di messaggi

Per impostazione predefinita in Apigee Edge per Private Cloud 4.54.00, il router (Nginx) e il Message Processor (Java 21) abilitano TLSv1.2 e TLSv1.3. A seconda delle esigenze aziendali e delle pratiche di sicurezza potresti voler limitare i protocolli consentiti o riattivare i protocolli precedenti. Questo documento descrive come configurare i protocolli TLS per il traffico in entrata e in uscita sul router e sul Message Processor.

Per il router, puoi anche impostare il protocollo per i singoli host virtuali. Per saperne di più, consulta Configurare l'accesso TLS a un'API per il cloud privato.

Per il processore di messaggi, puoi impostare il protocollo per un singolo TargetEndpoint. Per saperne di più, consulta Configurare TLS da Edge al backend (cloud e cloud privato).

Impostare il protocollo TLS sul router

Le seguenti proprietà consentono di impostare i protocolli TLS desiderati sul router per la comunicazione in entrata.

Per impostare il protocollo TLS sul router, imposta le proprietà nel file router.properties:

  1. Apri il file router.properties in un editor. Se il file non esiste, crealo:
    vi /opt/apigee/customer/application/router.properties
  2. Imposta le proprietà come preferisci:
    # 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. Salva le modifiche.
  4. Assicurati che il file delle proprietà sia di proprietà dell'utente apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. Riavvia il router:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Verifica che il protocollo sia stato aggiornato correttamente esaminando il file Nginx /opt/nginx/conf.d/0-default.conf:
    cat /opt/nginx/conf.d/0-default.conf

    Assicurati che il valore di ssl_protocols sia TLSv1.2.

  7. Se utilizzi TLS bidirezionale con un host virtuale, devi anche impostare il protocollo TLS nel host virtuale come descritto in Configurare l'accesso TLS a un' API per il cloud privato.

Impostare il protocollo TLS sul Message Processor

Le seguenti proprietà consentono di impostare i protocolli TLS desiderati sul Message Processor per la comunicazione in uscita. Questa sezione descrive anche come utilizzare i protocolli e i cifrari TLS disabilitati.

Per impostare il protocollo TLS sul processore di messaggi, imposta le proprietà nel message-processor.properties file:

  1. Apri il file message-processor.properties in un editor. Se il file non esiste, crealo:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Configura le proprietà utilizzando la seguente sintassi:
    # 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[,...]

    Ad esempio:

    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

    Per un elenco completo delle proprietà correlate, consulta Configurare TLS tra un router e un Message Processor.

  3. Salva le modifiche.
  4. Assicurati che il file delle proprietà sia di proprietà dell'utente apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Riavvia il Message Processor:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Se utilizzi TLS bidirezionale con il backend, imposta il protocollo TLS nell'host virtuale come descritto in Configurare TLS da Edge al backend (cloud e cloud privato).

Utilizzare cifrari e protocolli TLS precedenti: consulta le seguenti sezioni se vuoi utilizzare cifrari o protocolli precedenti.

Utilizzare TLS precedente

In Java 21, i protocolli TLS precedenti (TLSv1, TLSv1.1, e SSLv3) e le chiavi Diffie-Hellman deboli (DH keySize < 1024) sono disabilitati per impostazione predefinita in jdk.tls.disabledAlgorithms. Per abilitarle, utilizza una delle seguenti opzioni:

  • Opzione A: modernizzare i protocolli di backend: aggiorna i server di backend in modo che supportino TLS 1.2 o TLS 1.3 e assicurati che le dimensioni dei parametri Diffie-Hellman siano di 2048 bit o superiori (>= 2048 bit).
  • Opzione B: riattivare i protocolli precedenti utilizzando CwC: mantieni la compatibilità con i backend TLS 1.0 o TLS 1.1 precedenti rimuovendo TLSv1, TLSv1.1 da conf_jvmsecurity_jdk.tls.disabledAlgorithms in /opt/apigee/customer/application/message-processor.properties utilizzando il codice con la configurazione (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

Utilizzare i cifrari RSA statici

Apigee Edge per Private Cloud versione 4.54.00 viene eseguito su Java 21, dove le suite di cifrari RSA statici (TLS_RSA_*) che non dispongono dello scambio di chiavi Diffie-Hellman effimero (ECDHE o DHE) sono disabilitate per impostazione predefinita in jdk.tls.disabledAlgorithms (ad esempio, TLS_RSA_WITH_AES_128_CBC_SHA o TLS_RSA_WITH_AES_256_CBC_SHA). Per supportare i backend che richiedono suite di cifrari RSA statici, utilizza la seguente opzione:

  • Riattivare i cifrari RSA statici utilizzando CwC: mantieni la compatibilità con i backend precedenti rimuovendo TLS_RSA_* da conf_jvmsecurity_jdk.tls.disabledAlgorithms in /opt/apigee/customer/application/message-processor.properties utilizzando il codice con la configurazione (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

Dopo aver modificato le proprietà, riavvia il processore di messaggi utilizzando apigee-service:

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

Abilitare TLS 1.3 per gli host

Questa sezione spiega come abilitare TLS 1.3 per host virtuali specifici. Per abilitare TLS 1.3, segui questi passaggi sui nodi del server di gestione:

  1. Su ogni nodo del server di gestione, modifica il file /opt/apigee/customer/application/management-server.properties e aggiungi la seguente riga (se il file non esiste, crealo):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    Per questo file, i protocolli sono separati da virgole e fanno distinzione tra maiuscole e minuscole.

  2. Salva il file.
  3. Assicurati che il file sia di proprietà dell'utente apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Riavvia il server di gestione:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Ripeti i passaggi precedenti su tutti i nodi del server di gestione uno alla volta.
  6. Crea (o aggiorna un host virtuale esistente) con la seguente proprietà. Tieni presente che i protocolli sono separati da spazi e fanno distinzione tra maiuscole e minuscole:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    L'esempio seguente mostra un host virtuale di esempio con questa proprietà:

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

Testare TLS 1.3

Per testare TLS 1.3, inserisci il seguente comando:

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

Tieni presente che puoi testare TLS 1.3 solo sui client che supportano questo protocollo. Se TLS 1.3 non è abilitato, viene visualizzato un messaggio di errore simile al seguente:

sslv3 alert handshake failure