Ligar a um serviço seguro com o proxy inverso

Este artigo explica como estabelecer uma ligação segura entre o proxy inverso e os serviços, permitindo assim um canal seguro de ponta a ponta. Para saber mais sobre o proxy inverso, veja Reverse proxy in Azure Service Fabric (Proxy inverso no Azure Service Fabric)

Importante

A ligação a serviços seguros só é suportada quando o proxy inverso está configurado para escutar em HTTPS. Este artigo pressupõe que este é o caso. Veja Configurar o proxy inverso no Azure Service Fabric para configurar o proxy inverso no Service Fabric.

Proteger o estabelecimento de ligação entre o proxy inverso e os serviços

Autenticação de proxy inverso nos serviços:

O proxy inverso identifica-se aos serviços com o respetivo certificado. Para clusters do Azure, o certificado é especificado com a propriedade reverseProxyCertificate na secção Tipo de recurso Microsoft.ServiceFabric/clusters do modelo Resource Manager. Para clusters autónomos, o certificado é especificado com a propriedade ReverseProxyCertificate ou ReverseProxyCertificateCommonNames na secção Segurança de ClusterConfig.json. Para saber mais, veja Ativar o proxy inverso em clusters autónomos.

Os serviços podem implementar a lógica para verificar o certificado apresentado pelo proxy inverso. Os serviços podem especificar os detalhes do certificado de cliente aceites como definições de configuração no pacote de configuração. Isto pode ser lido no runtime e utilizado para validar o certificado apresentado pelo proxy inverso. Veja Gerir parâmetros de aplicação para adicionar as definições de configuração.

Proxy inverso a verificar a identidade do serviço através do certificado apresentado pelo serviço:

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

A secção seguinte mostra os detalhes de configuração de cada uma destas opções.

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

  • Nenhum: o proxy inverso ignora a verificação do certificado de serviço proxied e estabelece a ligação segura. Este é o comportamento predefinido. Especifique ApplicationCertificateValidationPolicy com o valor None na secção ApplicationGateway/Http .

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "None"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCommonNameAndIssuer: o proxy inverso verifica o certificado apresentado pelo serviço com base no nome comum do certificado e no thumbprint do emissor imediato: especifique o ApplicationCertificateValidationPolicy com o valor ServiceCommonNameAndIssuer na secção ApplicationGateway/Http .

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

    Para especificar a lista de thumbprints do nome comum do serviço e do emissor, adicione uma secção ApplicationGateway/Http/ServiceCommonNameAndIssuer em fabricSettings, conforme mostrado abaixo. Vários pares de thumbprint de nome comum e emissor de certificados podem ser adicionados na matriz de parâmetros .

    Se o proxy inverso do ponto final estiver a ligar-se a apresentar um certificado com o nome comum e o thumbprint do emissor corresponder a qualquer um dos valores especificados aqui, é estabelecido um canal TLS. Após a não correspondência dos detalhes do certificado, o proxy inverso falha no pedido do cliente com um código de estado 502 (Gateway Incorreto). A linha de estado HTTP também conterá a expressão "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 inverso verificará o certificado de serviço proxied com base no thumbprint. Pode optar por seguir esta rota quando os serviços estiverem configurados com certificados autoassinados: especifique ApplicationCertificateValidationPolicy com o valor ServiceCertificateThumbprints na secção ApplicationGateway/Http .

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

    Especifique também os thumbprints com uma entrada ServiceCertificateThumbprints na secção ApplicationGateway/Http . Podem ser especificados vários thumbprints 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 o thumbprint do certificado de servidor estiver listado nesta entrada de configuração, o proxy inverso terá êxito na ligação TLS. Caso contrário, termina a ligação e falha o pedido do cliente com um 502 (Gateway Incorreto). A linha de estado HTTP também conterá a expressão "Certificado SSL Inválido".

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

O Service Fabric suporta a configuração de vários pontos finais para um serviço. Para obter mais informações, veja Especificar recursos num manifesto de serviço.

O proxy inverso seleciona um dos pontos finais para reencaminhar o pedido com base no parâmetro de consulta ListenerName no URI do serviço. Se o parâmetro ListenerName não for especificado, o proxy inverso pode escolher qualquer ponto final na lista de pontos finais. Dependendo dos pontos finais configurados para o serviço, o ponto final selecionado pode ser um ponto final HTTP ou HTTPS. Podem existir cenários ou requisitos em que pretende que o proxy inverso funcione num "modo apenas de segurança"; ou seja, não quer que o proxy inverso seguro reencaminhe pedidos para pontos finais não seguros. Para definir o proxy inverso para o modo apenas de segurança, especifique a entrada de configuração SecureOnlyMode com o valor verdadeiro na secção ApplicationGateway/Http .

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

Nota

Ao operar no SecureOnlyMode, se um cliente tiver especificado um ListenerName correspondente a um ponto final HTTP (não seguro), o proxy inverso falha o pedido com um código de estado HTTP 404 (Não Encontrado).

Configurar a autenticação do certificado de cliente através do proxy inverso

A terminação TLS ocorre no proxy inverso e todos os dados do certificado de cliente são perdidos. Para os serviços efetuarem a autenticação de certificados de cliente, especifique a definição ForwardClientCertificate na secção ApplicationGateway/Http .

  1. Quando ForwardClientCertificate está definido como falso, o proxy inverso não pedirá o certificado de cliente durante o handshake TLS com o cliente. Este é o comportamento predefinido.

  2. Quando ForwardClientCertificate está definido como verdadeiro, o proxy inverso solicita o certificado do cliente durante o handshake TLS com o cliente. Em seguida, reencaminhará os dados do certificado de cliente num cabeçalho HTTP personalizado com o nome X-Client-Certificate. O valor do cabeçalho é a cadeia de formato PEM codificada com base64 do certificado do cliente. O serviço pode efetuar com êxito/falhar o pedido com o código de estado adequado depois de inspecionar os dados do certificado. Se o cliente não apresentar um certificado, o proxy inverso reencaminha um cabeçalho vazio e permite que o serviço processe o caso.

Nota

O proxy inverso age apenas como um serviço de reencaminhamento. Não efetuará qualquer validação do certificado do cliente.

Passos seguintes