Conectar-se a um serviço seguro com o proxy reversoConnect to a secure service with the reverse proxy

Este artigo explica como estabelecer uma conexão segura entre o proxy reverso e os serviços, permitindo assim um canal seguro de ponta a ponta.This article explains how to establish secure connection between the reverse proxy and services, thus enabling an end to end secure channel. Para saber mais sobre o proxy reverso, consulte proxy reverso no Azure Service FabricTo learn more about reverse proxy, see Reverse proxy in Azure Service Fabric

Só há suporte para a conexão com serviços seguros quando o proxy reverso está configurado para escutar em HTTPS.Connecting to secure services is supported only when reverse proxy is configured to listen on HTTPS. Este artigo pressupõe que esse é o caso.This article assumes this is the case. Consulte Configurar proxy reverso no Azure Service Fabric para configurar o proxy reverso no Service Fabric.Refer to Setup reverse proxy in Azure Service Fabric to configure the reverse proxy in Service Fabric.

Estabelecimento de conexão segura entre o proxy reverso e os serviçosSecure connection establishment between the reverse proxy and services

Autenticação de proxy reverso para serviços:Reverse proxy authenticating to services:

O proxy reverso se identifica aos serviços usando seu certificado.The reverse proxy identifies itself to services using its certificate. Para clusters do Azure, o certificado é especificado com a propriedade reverseProxyCertificate na seção tipo de recurso Microsoft. perfabric/clusters do modelo do Resource Manager.For Azure clusters the certificate is specified with reverseProxyCertificate property in the Microsoft.ServiceFabric/clusters Resource type section of the Resource Manager template. Para clusters autônomos, o certificado é especificado com a propriedade ReverseProxyCertificate ou ReverseProxyCertificateCommonNames na seção de segurança de ClusterConfig. JSON.For standalone clusters, the certificate is specified with either the ReverseProxyCertificate or the ReverseProxyCertificateCommonNames property in the Security section of ClusterConfig.json. Para saber mais, confira habilitar o proxy reverso em clusters autônomos.To learn more, see Enable reverse proxy on standalone clusters.

Os serviços podem implementar a lógica para verificar o certificado apresentado pelo proxy reverso.Services can implement the logic to verify the certificate presented by the reverse proxy. Os serviços podem especificar os detalhes do certificado de cliente aceito como definições de configuração no pacote de configuração.The services can specify the accepted client certificate details as configuration settings in the configuration package. Isso pode ser lido em tempo de execução e usado para validar o certificado apresentado pelo proxy reverso.This can be read at runtime and used to validate the certificate presented by the reverse proxy. Consulte gerenciar parâmetros de aplicativo para adicionar as definições de configuração.Refer to Manage application parameters to add the configuration settings.

Proxy reverso verificando a identidade do serviço por meio do certificado apresentado pelo serviço:Reverse proxy verifying the service's identity via the certificate presented by the service:

O proxy reverso dá suporte às seguintes políticas para executar a validação de certificado do servidor dos certificados apresentados pelos serviços: nenhum, ServiceCommonNameAndIssuer e ServiceCertificateThumbprints.Reverse proxy supports the following policies to perform server certificate validation of the certificates presented by services: None, ServiceCommonNameAndIssuer, and ServiceCertificateThumbprints. Para selecionar a política para uso de proxy reverso, especifique o ApplicationCertificateValidationPolicy na seção ApplicationGateway/http em fabricSettings.To select the policy for reverse proxy to use, specify the ApplicationCertificateValidationPolicy in the ApplicationGateway/Http section under fabricSettings.

A próxima seção mostra os detalhes de configuração para cada uma dessas opções.The next section shows configuration details for each of these options.

Opções de validação de certificado de serviçoService certificate validation options

  • Nenhum: o proxy reverso ignora a verificação do certificado de serviço com proxy e estabelece a conexão segura.None: Reverse proxy skips verification of the proxied service certificate and establishes the secure connection. Esse é o comportamento padrão.This is the default behavior. Especifique o ApplicationCertificateValidationPolicy com o valor None na seção ApplicationGateway/http .Specify the ApplicationCertificateValidationPolicy with value None in the ApplicationGateway/Http section.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "None"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCommonNameAndIssuer: o proxy reverso verifica o certificado apresentado pelo serviço com base no nome comum do certificado e na impressão digital do emissor imediato: especifique o ApplicationCertificateValidationPolicy com o valor ServiceCommonNameAndIssuer na seção 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 ApplicationGateway/Http section.

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

    Para especificar a lista de nome comum do serviço e as impressões digitais do emissor, adicione uma seção ApplicationGateway/http/ServiceCommonNameAndIssuer em fabricSettings, conforme mostrado abaixo.To specify the list of service common name and issuer thumbprints, add a ApplicationGateway/Http/ServiceCommonNameAndIssuer section under fabricSettings, as shown below. Vários nomes comuns de certificado e pares de impressão digital do emissor podem ser adicionados na matriz de parâmetros .Multiple certificate common name and issuer thumbprint pairs can be added in the parameters array.

    Se o proxy reverso do ponto de extremidade estiver se conectando para apresentar um certificado que é o nome comum e a impressão digital do emissor corresponde a qualquer um dos valores especificados aqui, o canal SSL é estabelecido.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. Após a falha de correspondência dos detalhes do certificado, o proxy reverso falha a solicitação do cliente com um código de status 502 (gateway inadequado).Upon failure to match the certificate details, reverse proxy fails the client's request with a 502 (Bad Gateway) status code. A linha de status HTTP também conterá a frase "certificado SSL inválido".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: o proxy reverso verificará o certificado de serviço com proxy com base em sua impressão digital.ServiceCertificateThumbprints: Reverse proxy will verify the proxied service certificate based on its thumbprint. Você pode optar por ir para essa rota quando os serviços são configurados com certificados autoassinados: especifique o ApplicationCertificateValidationPolicy com o valor ServiceCertificateThumbprints no ApplicationGateway/http Section.You can choose to go this route when the services are configured with self signed certificates: Specify the ApplicationCertificateValidationPolicy with value ServiceCertificateThumbprints in the ApplicationGateway/Http section.

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

    Especifique também as impressões digitais com uma entrada ServiceCertificateThumbprints na seção ApplicationGateway/http .Also specify the thumbprints with a ServiceCertificateThumbprints entry in the ApplicationGateway/Http section. Várias impressões digitais podem ser especificadas como uma lista separada por vírgulas no campo valor, conforme mostrado abaixo: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 a impressão digital do certificado do servidor estiver listada nessa entrada de configuração, o proxy reverso terá sucesso na conexão SSL.If the thumbprint of the server certificate is listed in this config entry, reverse proxy succeeds the SSL connection. Caso contrário, ele encerra a conexão e falha a solicitação do cliente com um 502 (gateway inadequado).Otherwise, it terminates the connection and fails the client's request with a 502 (Bad Gateway). A linha de status HTTP também conterá a frase "certificado SSL inválido".The HTTP status line will also contain the phrase "Invalid SSL Certificate."

Lógica de seleção de ponto de extremidade quando os serviços expõem pontos de extremidades seguros e não segurosEndpoint selection logic when services expose secure as well as unsecured endpoints

O Service Fabric dá suporte à configuração de vários pontos de extremidade para um serviço.Service fabric supports configuring multiple endpoints for a service. Para obter mais informações, consulte especificar recursos em um manifesto do serviço.For more information, see Specify resources in a service manifest.

Proxy reverso seleciona um dos pontos de extremidade para encaminhar a solicitação com base no parâmetro de consulta listenername no URI do serviço.Reverse proxy selects one of the endpoints to forward the request based on the ListenerName query parameter in the service URI. Se o parâmetro listenername não for especificado, o proxy reverso poderá escolher qualquer ponto de extremidade da lista de pontos de extremidade.If the ListenerName parameter is not specified, reverse proxy can pick any endpoint from the endpoints list. Dependendo dos pontos de extremidade configurados para o serviço, ele selecionado pode ser um ponto de extremidade HTTP ou HTTPS.Depending on the endpoints configured for the service, the endpoint selected can be an HTTP or HTTPS endpoint. Pode haver cenários ou requisitos em que você deseja que o proxy reverso opere em um "modo somente de segurança"; ou seja, você não quer que o proxy reverso seguro encaminhe solicitações a pontos de extremidade não seguros.There might be scenarios or requirements where you want the reverse proxy to operate in a "secure-only mode"; that is, you don't want the secure reverse proxy to forward requests to unsecured endpoints. Para definir o proxy reverso para o modo somente segurança, especifique a entrada de configuração SecureOnlyMode com o valor true na seção ApplicationGateway/http .To set reverse proxy to secure-only mode, specify the SecureOnlyMode configuration entry with value true in the ApplicationGateway/Http section.

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

Nota

Ao operar em SecureOnlyMode, se um cliente tiver especificado um listenername correspondente a um ponto de extremidade http (não seguro), o proxy reverso falhará na solicitação com um código de status http 404 (não encontrado).When operating in SecureOnlyMode, if a client has specified a ListenerName corresponding to an HTTP(unsecured) endpoint, reverse proxy fails the request with a 404 (Not Found) HTTP status code.

Configurando a autenticação de certificado do cliente por meio do proxy reversoSetting up client certificate authentication through the reverse proxy

A terminação SSL ocorre no proxy reverso e todos os dados do certificado do cliente são perdidos.SSL termination happens at the reverse proxy and all the client certificate data is lost. Para os serviços executarem a autenticação de certificado de cliente, especifique a configuração ForwardClientCertificate na seção ApplicationGateway/http .For the services to perform client certificate authentication, specify the ForwardClientCertificate setting in the ApplicationGateway/Http section.

  1. Quando ForwardClientCertificate for definido como false, o proxy reverso não solicitará o certificado do cliente durante seu handshake de SSL com o cliente.When ForwardClientCertificate is set to false, reverse proxy will not request the client certificate during its SSL handshake with the client. Esse é o comportamento padrão.This is the default behavior.

  2. Quando ForwardClientCertificate é definido como true, o proxy reverso solicita o certificado do cliente durante seu handshake de SSL com o cliente.When ForwardClientCertificate is set to true, reverse proxy requests the client's certificate during its SSL handshake with the client. Em seguida, ele encaminhará os dados do certificado do cliente em um cabeçalho HTTP personalizado chamado X-Client-Certificate.It will then forward the client certificate data in a custom HTTP header named X-Client-Certificate. O valor do cabeçalho é a cadeia de caracteres de formato PEM codificado em base64 do certificado do cliente.The header value is the base64 encoded PEM format string of the client's certificate. O serviço pode ter êxito/falha na solicitação com o código de status apropriado depois de inspecionar os dados do certificado.The service can succeed/fail the request with appropriate status code after inspecting the certificate data. Se o cliente não apresentar um certificado, o proxy reverso encaminha um cabeçalho vazio e permite que o serviço manipule o caso.If the client does not present a certificate, reverse proxy forwards an empty header and let the service handle the case.

Nota

O proxy reverso é um mero encaminhador.Reverse proxy is a mere forwarder. Ele não executará nenhuma validação do certificado do cliente.It will not perform any validation of the client's certificate.

Passos seguintesNext steps