Connettersi a un servizio protetto con il proxy inversoConnect to a secure service with the reverse proxy

In questo articolo viene spiegato come stabilire una connessione protetta tra il proxy inverso e i servizi, abilitando un canale protetto end-to-end.This article explains how to establish secure connection between the reverse proxy and services, thus enabling an end to end secure channel.

La connessione ai servizi protetti è supportata solo quando il proxy inverso è configurato per l'ascolto su HTTPS.Connecting to secure services is supported only when reverse proxy is configured to listen on HTTPS. In questo documento si presuppone che questo sia il caso.Rest of the document assumes this is the case. Fare riferimento a Proxy inverso in Azure Service Fabric per configurare il proxy inverso in Service Fabric.Refer to Reverse proxy in Azure Service Fabric to configure the reverse proxy in Service Fabric.

Stabilire una connessione protetta tra il proxy inverso e i serviziSecure connection establishment between the reverse proxy and services

Autenticazione del proxy inverso per i servizi:Reverse proxy authenticating to services:

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 .The reverse proxy identifies itself to services using its certificate, specified with reverseProxyCertificate property in the Cluster Resource type section. I servizi possono implementare la logica per verificare il certificato presentato dal proxy inverso.Services can implement the logic to verify the certificate presented by the reverse proxy. I servizi possono specificare i dettagli del certificato client accettati come impostazioni di configurazione nel pacchetto di configurazione.The services can specify the accepted client certificate details as configuration settings in the configuration package. Questo può essere letto in fase di runtime e usato per convalidare il certificato presentato dal proxy inverso.This can be read at runtime and used to validate the certificate presented by the reverse proxy. Fare riferimento a Gestire i parametri dell'applicazione per aggiungere le impostazioni di configurazione.Refer to Manage application parameters to add the configuration settings.

Verifica dell'identità del servizio da parte del proxy inverso tramite il certificato presentato dal servizio:Reverse proxy verifying the service's identity via the certificate presented by the service:

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.To perform server certificate validation of the certificates presented by the services, reverse proxy supports one of the following options: None, ServiceCommonNameAndIssuer, and ServiceCertificateThumbprints. Per selezionare una di queste tre opzioni, specificare ApplicationCertificateValidationPolicy nella sezione dei parametri dell'elemento ApplicationGateway/Http in fabricSettings.To select one of these three options, specify the ApplicationCertificateValidationPolicy in the parameters section of ApplicationGateway/Http element under 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.Refer to the next section for details about additional configuration for each of these options.

Opzioni di convalida dei certificati del servizioService certificate validation options

  • None: il proxy inverso ignora la verifica del certificato del servizio di proxy e stabilisce la connessione sicura.None: Reverse proxy skips verification of the proxied service certificate and establishes the secure connection. Questo è il comportamento predefinito.This is the default behavior. Specificare ApplicationCertificateValidationPolicy con il valore None nella sezione dei parametri dell'elemento ApplicationGateway/Http.Specify the ApplicationCertificateValidationPolicy with value None in the parameters section of ApplicationGateway/Http element.

  • 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.ServiceCommonNameAndIssuer: Reverse proxy verifies the certificate presented by the service based on certificate's common name and immediate issuer's thumbprint: Specify the ApplicationCertificateValidationPolicy with value ServiceCommonNameAndIssuer in the parameters section of ApplicationGateway/Http element.

{
"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.To specify the list of service common name and issuer thumbprints, add a ApplicationGateway/Http/ServiceCommonNameAndIssuer element under fabricSettings, as shown below. Nell'elemento della matrice di parametri è possibile aggiungere associazioni multiple del nome comune del certificato e dell'identificazione personale dell'autorità di certificazione.Multiple certificate common name and issuer thumbprint pairs can be added in the parameters array element.

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.If the endpoint reverse proxy is connecting to presents a certificate who's common name and issuer thumbprint matches any of the values specified here, SSL channel is established. 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.Upon failure to match the certificate details, reverse proxy fails the client's request with a 502 (Bad Gateway) status code. La riga di stato HTTP conterrà anche la frase "Invalid SSL Certificate" (Certificato SSL non valido).The HTTP status line will also contain the phrase "Invalid SSL Certificate."

{
"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.ServiceCertificateThumbprints: Reverse proxy will verify the proxied service certificate based on its thumbprint. È 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.You can choose to go this route when the services are configured with self signed certificates: Specify the ApplicationCertificateValidationPolicy with value ServiceCertificateThumbprints in the parameters section of ApplicationGateway/Http element.
{
"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.Also specify the thumbprints with a ServiceCertificateThumbprints entry under parameters section of ApplicationGateway/Http element. Nel campo del valore è possibile specificare più identificazioni personali come un elenco delimitato da virgole, come illustrato di seguito:Multiple thumbprints can be specified as a comma-separated list in the value field, as shown below:

{
"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.If the thumbprint of the server certificate is listed in this config entry, reverse proxy succeeds the SSL connection. In caso contrario, termina la connessione e non esegue correttamente la richiesta del client con un errore 502, ovvero Gateway non valido.Otherwise, it terminates the connection and fails the client's request with a 502 (Bad Gateway). La riga di stato HTTP conterrà anche la frase "Invalid SSL Certificate" (Certificato SSL non valido).The HTTP status line will also contain the phrase "Invalid SSL Certificate."

Logica di scelta dell'endpoint quando i servizi espongono endpoint sicuri e non sicuriEndpoint selection logic when services expose secure as well as unsecured endpoints

Service Fabric supporta la configurazione di più endpoint per un servizio.Service fabric supports configuring multiple endpoints for a service. Vedere Specificare le risorse in un manifesto del servizio.See Specify resources in a service manifest.

Il proxy inverso consente di selezionare uno degli endpoint per inoltrare la richiesta in base al parametro di query ListenerName.Reverse proxy selects one of the endpoints to forward the request based on the ListenerName query parameter. Se non viene specificato, viene scelto un endpoint qualsiasi nell'elenco degli endpoint.If this is not specified, it can pick any endpoint from the endpoints list. A questo punto potrebbe essere un endpoint HTTP o HTTPS.Now this can be an HTTP or HTTPS endpoint. Potrebbero verificarsi situazioni in cui si desidera o è necessario che il proxy inverso funzioni "solo in modalità protetta",There might be scenarios/requirements where you want the reverse proxy to operate in a "secure only mode", i.e per evitare che si inoltrino richieste agli endpoint non protetti.you don't want the secure reverse proxy to forward requests to unsecured endpoints. A tale scopo è necessario impostare il valore della voce della configurazione SecureOnlyMode su true nella sezione dei parametri dell'elemento ApplicationGateway/Http.This can be achieved by specifying the SecureOnlyMode configuration entry with value true in the parameters section of ApplicationGateway/Http element.

{
"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.When operating in SecureOnlyMode, if client has specified a ListenerName corresponding to an HTTP(unsecured) endpoint, reverse proxy fails the request with a 404 (Not Found) HTTP status code.

Configurazione dell'autenticazione del certificato client tramite il proxy inversoSetting up client certificate authentication through the reverse proxy

La terminazione SSL si verifica sul proxy inverso e si perdono tutti i dati del certificato client.SSL termination happens at the reverse proxy and all the client certificate data is lost. Affinché i servizi eseguano l'autenticazione del certificato client, impostare l'impostazione ForwardClientCertificate nella sezione dei parametri dell'elemento ApplicationGateway/Http.For the services to perform client certificate authentication, set the ForwardClientCertificate setting in the parameters section of ApplicationGateway/Http element.

  1. Quando ForwardClientCertificate è impostato su false, il proxy inverso non richiederà il certificato del client durante l'handshake SSL con il client.When ForwardClientCertificate is set to false, reverse proxy will not request for the client certificate during its SSL handshake with the client. Questo è il comportamento predefinito.This is the default behavior.

  2. Quando ForwardClientCertificate è impostato su true, il proxy inverso richiede il certificato del client durante l'handshake SSL con il client.When ForwardClientCertificate is set to true, reverse proxy requests for the client's certificate during its SSL handshake with the client. I dati del certificato client verranno quindi inviati in un'intestazione HTTP personalizzata denominata X-Client-Certificate.It will then forward the client certificate data in a custom HTTP header named X-Client-Certificate. Il valore dell'intestazione è la stringa in formato PEM con codifica base64 del certificato del client.The header value is the base64 encoded PEM format string of the client's certificate. Il servizio può eseguire correttamente o meno la richiesta con il codice di stato appropriato dopo aver esaminato i dati del certificato.The service can succeed/fail the request with appropriate status code after inspecting the certificate data. Se il client non presenta un certificato, il proxy inverso inoltra un'intestazione vuota e il caso viene gestito dal servizio.If the client does not present a certificate, reverse proxy forwards an empty header and let the service handle the case.

Il proxy inverso è un semplice server d'inoltro,Reverse proxy is a mere forwarder. pertanto non esegue alcuna convalida del certificato del client.It will not perform any validation of the client's certificate.

Passaggi successiviNext steps