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 .
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.
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
- Configurar o proxy inverso num cluster.
- Veja Configurar o proxy inverso para ligar a serviços seguros
- Veja um exemplo de comunicação HTTP entre serviços num projeto de exemplo no GitHub.
- Chamadas de procedimento remoto com comunicação remota do Reliable Services
- API Web que utiliza o OWIN no Reliable Services
- Gerir certificados de cluster