Compartilhar via


Ligar a um serviço seguro com o proxy inverso

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. Para saber mais sobre proxy reverso, consulte Proxy reverso no Azure Service Fabric

Importante

A conexão a serviços seguros é suportada somente quando o proxy reverso está configurado para escutar em HTTPS. Este artigo parte do princípio de que é esse o caso. Consulte Configurar proxy reverso no Azure Service Fabric para configurar o proxy reverso no Service Fabric.

Estabelecimento seguro de conexão entre o proxy reverso e os serviços

Autenticação de proxy reverso para serviços:

O proxy reverso identifica-se aos serviços usando seu certificado. Para clusters do Azure, o certificado é especificado com a propriedade reverseProxyCertificate na seção Microsoft.ServiceFabric/clusters Resource type do modelo do Resource Manager. Para clusters autônomos, o certificado é especificado com a propriedade ReverseProxyCertificate ou ReverseProxyCertificateCommonNames na seção Security do ClusterConfig.json. Para saber mais, consulte Habilitar proxy reverso em clusters autônomos.

Os serviços podem implementar a lógica para verificar o certificado apresentado pelo proxy reverso. Os serviços podem especificar os detalhes do certificado de cliente aceito como definições de configuração no pacote de configuração. Isso pode ser lido em tempo de execução e usado para validar o certificado apresentado pelo proxy reverso. Consulte Gerenciar parâmetros do aplicativo para adicionar as definições de configuração.

Proxy reverso verificando a identidade do serviço através do certificado apresentado pelo serviço:

O proxy reverso suporta as seguintes políticas para executar a validação de certificado de servidor dos certificados apresentados pelos serviços: None, ServiceCommonNameAndIssuer e ServiceCertificateThumbprints. Para selecionar a política para proxy reverso a ser usada, especifique ApplicationCertificateValidationPolicy na seção ApplicationGateway/Http em fabricSettings.

A próxima seção mostra os detalhes de configuração para cada uma dessas opções.

Opções de validação de certificado de serviço

  • Nenhum: o proxy reverso ignora a verificação do certificado de serviço por proxy e estabelece a conexão segura. Este é o comportamento predefinido. Especifique o ApplicationCertificateValidationPolicy com o valor None na seção ApplicationGateway/Http.

    {
    "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 imediata do emissor: especifique o ApplicationCertificateValidationPolicy com o valor ServiceCommonNameAndIssuer na seção ApplicationGateway/Http.

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

    Para especificar a lista de nomes comuns de serviço e impressões digitais do emissor, adicione uma seção ApplicationGateway/Http/ServiceCommonNameAndIssuer em fabricSettings, conforme mostrado abaixo. Vários pares de impressão digital do certificado, nome comum e emissor podem ser adicionados na matriz de parâmetros .

    Se o proxy reverso do ponto de extremidade estiver se conectando para apresentar um certificado cujo nome comum e a impressão digital do emissor corresponder a qualquer um dos valores especificados aqui, um canal TLS será estabelecido. Em caso de falha na correspondência dos detalhes do certificado, o proxy reverso falha na solicitação do cliente com um código de status 502 (Gateway incorreto). A linha de status HTTP também conterá a frase "Certificado SSL inválido".

    {
    "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 por proxy com base em sua impressão digital. Você pode optar por seguir esta rota quando os serviços são configurados com certificados autoassinados: especifique o ApplicationCertificateValidationPolicy com o valor ServiceCertificateThumbprints na seção ApplicationGateway/Http.

    {
    "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 . Várias impressões digitais podem ser especificadas como uma lista separada por vírgulas no campo de valor, conforme mostrado abaixo:

    {
    "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 nesta entrada de configuração, o proxy reverso sucederá a conexão TLS. Caso contrário, ele encerra a conexão e falha na solicitação do cliente com um 502 (Bad Gateway). A linha de status HTTP também conterá a frase "Certificado SSL inválido".

Lógica de seleção de pontos finais quando os serviços expõem pontos de extremidade seguros e não seguros

O Service Fabric oferece suporte à configuração de vários pontos de extremidade para um serviço. Para obter mais informações, consulte Especificar recursos em um manifesto de serviço.

O 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. Se o parâmetro ListenerName não for especificado, o proxy reverso poderá escolher qualquer ponto de extremidade da lista de pontos de extremidade. Dependendo dos pontos de extremidade configurados para o serviço, o ponto de extremidade selecionado pode ser um ponto de extremidade HTTP ou HTTPS. Pode haver cenários ou requisitos em que você deseja que o proxy reverso opere em um "modo somente seguro"; ou seja, você não quer que o proxy reverso seguro encaminhe solicitações para pontos de extremidade não seguros. Para definir o proxy reverso para o modo somente seguro, especifique a entrada de configuração SecureOnlyMode com o valor true na seção ApplicationGateway/Http.

{
"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á a solicitação com um código de status HTTP 404 (Não encontrado).

Configurando a autenticação de certificado de cliente por meio do proxy reverso

A terminação TLS acontece no proxy reverso e todos os dados do certificado do cliente são perdidos. Para os serviços executarem a autenticação de certificado de cliente, especifique a configuração ForwardClientCertificate na seção ApplicationGateway/Http .

  1. Quando ForwardClientCertificate é definido como false, o proxy reverso não solicitará o certificado do cliente durante seu handshake TLS com o cliente. Este é o comportamento predefinido.

  2. Quando ForwardClientCertificate é definido como true, o proxy reverso solicita o certificado do cliente durante seu handshake TLS com o cliente. Em seguida, ele encaminhará os dados do certificado do cliente em um cabeçalho HTTP personalizado chamado X-Client-Certificate. O valor do cabeçalho é a cadeia de caracteres do formato PEM codificado base64 do certificado do cliente. O serviço pode ter êxito/falhar a solicitação com o código de status apropriado depois de inspecionar os dados do certificado. Se o cliente não apresentar um certificado, o proxy reverso encaminhará um cabeçalho vazio e permitirá que o serviço trate do caso.

Nota

O proxy reverso atua apenas como um serviço de encaminhamento. Não realizará qualquer validação do certificado do cliente.

Próximos passos