Connettersi a un servizio protetto con il proxy inverso

In questo articolo viene spiegato come stabilire una connessione protetta tra il proxy inverso e i servizi, abilitando un canale protetto end-to-end.

La connessione ai servizi protetti è supportata solo quando il proxy inverso è configurato per l'ascolto su HTTPS. In questo documento si presuppone che questo sia il caso. Fare riferimento a Proxy inverso in Azure Service Fabric per configurare il proxy inverso in Service Fabric.

Stabilire una connessione protetta tra il proxy inverso e i servizi

Autenticazione del proxy inverso per i servizi:

Il proxy inverso si autoidentifica per i servizi usando il certificato, specificato con la proprietà reverseProxyCertificate nella sezione relativa al tipo di risorsa del cluster . I servizi possono implementare la logica per verificare il certificato presentato dal proxy inverso. I servizi possono specificare i dettagli del certificato client accettati come impostazioni di configurazione nel pacchetto di configurazione. Questo può essere letto in fase di runtime e usato per convalidare il certificato presentato dal proxy inverso. Fare riferimento a Gestire i parametri dell'applicazione per aggiungere le impostazioni di configurazione.

Verifica dell'identità del servizio da parte del proxy inverso tramite il certificato presentato dal servizio:

Per eseguire la convalida del certificato del server per i certificati presentati dai servizi, il proxy inverso supporta una delle opzioni seguenti: None, ServiceCommonNameAndIssuer e ServiceCertificateThumbprints. Per selezionare una di queste tre opzioni, specificare ApplicationCertificateValidationPolicy nella sezione dei parametri dell'elemento ApplicationGateway/Http in fabricSettings.

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
              {
                "name": "ApplicationCertificateValidationPolicy",
                "value": "None"
              }
            ]
          }
        ],
        ...
}

Fare riferimento alla sezione successiva per informazioni sulla configurazione aggiuntiva per ognuna di queste opzioni.

Opzioni di convalida dei certificati del servizio

  • None: il proxy inverso ignora la verifica del certificato del servizio di proxy e stabilisce la connessione sicura. Questo è il comportamento predefinito. Specificare ApplicationCertificateValidationPolicy con il valore None nella sezione dei parametri dell'elemento ApplicationGateway/Http.

  • ServiceCommonNameAndIssuer: il proxy inverso verifica il certificato presentato dal servizio in base al nome comune del certificato e all'identificazione personale immediata dell'autorità di certificazione: specificare ApplicationCertificateValidationPolicy con valore ServiceCommonNameAndIssuer nella sezione dei parametri dell'elemento ApplicationGateway/Http.

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
              {
                "name": "ApplicationCertificateValidationPolicy",
                "value": "ServiceCommonNameAndIssuer"
              }
            ]
          }
        ],
        ...
}

Per specificare l'elenco del nome comune del servizio e l'identificazione personale dell'autorità di certificazione, aggiungere un elemento ApplicationGateway/Http/ServiceCommonNameAndIssuer in fabricsettings, come illustrato di seguito. Nell'elemento della matrice di parametri è possibile aggiungere associazioni multiple del nome comune del certificato e dell'identificazione personale dell'autorità di certificazione.

Se il proxy inverso dell'endpoint si connette per presentare un certificato il cui nome comune e l'identificazione personale dell'autorità di certificazione corrisponde a uno qualsiasi dei valori specificati in questo caso, viene stabilito il canale SSL. In caso di errore nella corrispondenza dei dettagli del certificato, il proxy inverso non esegue correttamente la richiesta del client e presenta un codice di stato 502, ovvero Gateway non valido. La riga di stato HTTP conterrà anche la frase "Invalid SSL Certificate" (Certificato SSL non valido).

{
"fabricSettings": [
          ...
          {
             "name": "ApplicationGateway/Http/ServiceCommonNameAndIssuer",
            "parameters": [
              {
                "name": "WinFabric-Test-Certificate-CN1",
                "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 b4 22 11"
              },
              {
                "name": "WinFabric-Test-Certificate-CN2",
                "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 11 33 44"
              }
            ]
          }
        ],
        ...
}
  • ServiceCertificateThumbprints: il proxy inverso consente di verificare il certificato del servizio del proxy in base all'identificazione personale. È possibile scegliere di intraprendere questa strada quando i servizi vengono configurati con certificati autofirmati : specificare ApplicationCertificateValidationPolicy con valore ServiceCertificateThumbprints nella sezione dei parametri dell'elemento ApplicationGateway/Http.
{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
              {
                "name": "ApplicationCertificateValidationPolicy",
                "value": "ServiceCertificateThumbprints"
              }
            ]
          }
        ],
        ...
}

Specificare anche le identificazioni personali con una voce ServiceCertificateThumbprints nella sezione parametri dell'elemento ApplicationGateway/Http. Nel campo del valore è possibile specificare più identificazioni personali come un elenco delimitato da virgole, come illustrato di seguito:

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
                ...
              {
                "name": "ServiceCertificateThumbprints",
                "value": "78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 bf,78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 b9"
              }
            ]
          }
        ],
        ...
}

Se l'identificazione personale del certificato del server è elencata in questa voce di configurazione, il proxy inverso esegue correttamente la connessione SSL. In caso contrario, termina la connessione e non esegue correttamente la richiesta del client con un errore 502, ovvero Gateway non valido. La riga di stato HTTP conterrà anche la frase "Invalid SSL Certificate" (Certificato SSL non valido).

Logica di scelta dell'endpoint quando i servizi espongono endpoint sicuri e non sicuri

Service Fabric supporta la configurazione di più endpoint per un servizio. Vedere Specificare le risorse in un manifesto del servizio.

Il proxy inverso consente di selezionare uno degli endpoint per inoltrare la richiesta in base al parametro di query ListenerName. Se non viene specificato, viene scelto un endpoint qualsiasi nell'elenco degli endpoint. A questo punto potrebbe essere un endpoint HTTP o HTTPS. Potrebbero verificarsi situazioni in cui si desidera o è necessario che il proxy inverso funzioni "solo in modalità protetta", per evitare che si inoltrino richieste agli endpoint non protetti. A tale scopo è necessario impostare il valore della voce della configurazione SecureOnlyMode su true nella sezione dei parametri dell'elemento ApplicationGateway/Http.

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
                ...
              {
                "name": "SecureOnlyMode",
                "value": true
              }
            ]
          }
        ],
        ...
}

Quando si opera in SecureOnlyMode, se il client ha specificato un ListenerName corrispondente a un endpoint HTTP, non sicuro, il proxy inverso non esegue correttamente la richiesta con un codice di stato HTTP 404, ovvero Non trovato.

Configurazione dell'autenticazione del certificato client tramite il proxy inverso

La terminazione SSL si verifica sul proxy inverso e si perdono tutti i dati del certificato client. Affinché i servizi eseguano l'autenticazione del certificato client, impostare l'impostazione ForwardClientCertificate nella sezione dei parametri dell'elemento ApplicationGateway/Http.

  1. Quando ForwardClientCertificate è impostato su false, il proxy inverso non richiederà il certificato del client durante l'handshake SSL con il client. Questo è il comportamento predefinito.

  2. Quando ForwardClientCertificate è impostato su true, il proxy inverso richiede il certificato del client durante l'handshake SSL con il client. I dati del certificato client verranno quindi inviati in un'intestazione HTTP personalizzata denominata X-Client-Certificate. Il valore dell'intestazione è la stringa in formato PEM con codifica base64 del certificato del client. Il servizio può eseguire correttamente o meno la richiesta con il codice di stato appropriato dopo aver esaminato i dati del certificato. Se il client non presenta un certificato, il proxy inverso inoltra un'intestazione vuota e il caso viene gestito dal servizio.

Il proxy inverso è un semplice server d'inoltro, pertanto non esegue alcuna convalida del certificato del client.

Passaggi successivi