Gerar um certificado autoassinado do Gateway de Aplicativo do Azure com uma AC raiz personalizada

A SKU v2 do Gateway de Aplicativo introduz o uso de certificados raiz confiáveis para permitir conexões TLS com os servidores back-end. Esse recurso remove o uso de certificados de autenticação (certificados individuais Leaf) que eram necessários no SKU v1. O certificado raiz é um certificado raiz no formato X.509 (.CER) codificado em Base-64 do servidor de certificados de back-end. Ele identifica a AC (autoridade de certificação) raiz que emitiu o certificado do servidor e o certificado do servidor é usado para a comunicação TLS/SSL.

O Gateway de Aplicativo confiará no certificado do seu site por padrão se uma AC conhecida (por exemplo, GoDaddy ou DigiCert) o assinar. O carregamento explícito do certificado raiz não é necessário nesse caso. Para saber mais, confira Visão geral da terminação de TLS e TLS de ponta a ponta com um Gateway de Aplicativo. No entanto, se você tiver um ambiente de desenvolvimento/teste e não quiser comprar um certificado emitido por uma Autoridade Certificadora (AC) verificada, poderá criar sua própria Autoridade Certificadora Raiz personalizada e um certificado final assinado por essa AC raiz.

Note

Certificados autogerados não são confiáveis por padrão e podem ser difíceis de manter. Além disso, eles podem usar conjuntos de hash e criptografia desatualizados que não são fortes. Para obter mais segurança, adquira um certificado assinado por uma autoridade de certificação conhecida.

Use as opções a seguir para gerar seu certificado privado para conexões TLS de back-end.

  1. Use a ferramenta de gerador de certificado privado. Usando o nome de domínio (Nome Comum) que você fornece, essa ferramenta executa as mesmas etapas documentadas neste artigo para gerar certificados Raiz e Servidor. Com os arquivos de certificado gerados, você pode carregar imediatamente o arquivo de certificado raiz (.CER) para a configuração de backend do seu gateway e a cadeia de certificação correspondente (.PFX) para o servidor de backend. A senha do arquivo PFX também é fornecida no arquivo ZIP baixado.

  2. Use comandos OpenSSL para personalizar e gerar certificados de acordo com suas necessidades. Continue seguindo as instruções neste artigo se quiser fazer esse processo inteiramente por conta própria.

Neste artigo, você aprenderá a:

  • Criar sua própria autoridade de certificação personalizada
  • Criar um certificado autoassinado assinado por sua AC personalizada
  • Fazer upload de um certificado raiz autoassinado para um Gateway de Aplicativo para autenticar o servidor back-end

Prerequisites

  • OpenSSL em um computador executando o Windows ou Linux

    Embora outras ferramentas possam estar disponíveis para gerenciamento de certificados, este tutorial usa o OpenSSL. Você pode encontrar o OpenSSL agrupado com muitas distribuições do Linux, como o Ubuntu.

  • Um servidor Web

    Por exemplo, Apache, IIS ou NGINX para testar os certificados.

  • SKU do Gateway de Aplicativo v2

    Se você não tiver um gateway de aplicativo existente, consulte Início Rápido: Direcionar o tráfego da Web com o Gateway de Aplicativo do Azure – portal do Azure.

Criar um certificado de AC raiz

Crie seu certificado de autoridade de certificação raiz usando o OpenSSL.

Criar a chave raiz

  1. Entre no computador em que o OpenSSL está instalado e execute o comando a seguir. Esse comando cria a chave privada raiz. A chave não é criptografada e não é protegida por senha, então armazene o arquivo contoso.key de forma segura.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

Criar um certificado raiz e autoassiná-lo

  1. Use o comando a seguir para gerar a CSR (Solicitação de Assinatura de Certificado).

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. Quando solicitado, digite as informações organizacionais da CA personalizada, como país/região, estado, organização, OU e o domínio totalmente qualificado (esse domínio é o emissor). Como a chave raiz não é protegida por senha, o OpenSSL não solicita uma senha.

    Captura de tela da criação do certificado raiz.

  3. Use o comando a seguir para gerar o certificado raiz.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    Os comandos anteriores criam o certificado raiz. Você usa esse certificado para assinar o certificado do servidor.

Criar um certificado do servidor

Em seguida, você cria um certificado de servidor usando o OpenSSL.

Criar a chave do certificado

Use o comando a seguir para gerar a chave para o certificado do servidor.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

Criar o CSR (Solicitação de Assinatura de Certificado)

A CSR é uma chave pública que você fornece a uma AC ao solicitar um certificado. A AC emite o certificado para essa solicitação específica.

Note

O CN (Nome Comum) para o certificado do servidor deve ser diferente do domínio do emissor. Por exemplo, nesse caso, o CN do emissor é www.contoso.com e o CN do certificado do servidor é www.fabrikam.com.

  1. Use o seguinte comando para gerar a CSR:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. Quando solicitado, digite as informações da organização para a CA personalizada: País/Região, Estado, Org, OU e o nome de domínio totalmente qualificado. Esse domínio é o domínio do site e deve ser diferente do emissor. Assim como a chave raiz, a chave do servidor não é protegida por senha, então o OpenSSL não solicita uma senha.

    Captura de tela do certificado do servidor.

Gerar o certificado usando o CSR e a chave, e assiná-lo com a chave raiz da CA.

  1. Use o seguinte comando para criar o certificado:

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

Verificar o certificado recém-criado

  1. Use o seguinte comando para imprimir a saída do arquivo CRT e verificar seu conteúdo:

    openssl x509 -in fabrikam.crt -text -noout
    

    Captura de tela da verificação de certificado.

  2. Verifique os arquivos em seu diretório e verifique se você tem os seguintes arquivos:

    • contoso.crt
    • contoso.key
    • fabrikam.crt
    • fabrikam.key

Definir o certificado nas configurações do TLS do servidor Web

No servidor Web, configure o TLS usando os arquivos fabrikam.crt e fabrikam.key. Se o servidor Web não puder levar dois arquivos, você poderá combiná-los em um único arquivo .pem ou .pfx usando comandos OpenSSL.

IIS

Para obter instruções sobre como importar certificados e carregá-los como certificado de servidor no IIS, confira COMO instalar certificados importados em um servidor Web no Windows Server 2003.

Para obter instruções de associação TLS, consulte Como configurar o SSL no IIS 7.

Apache

A configuração a seguir é um exemplo de host virtual configurado para SSL no Apache:

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

A configuração a seguir é um exemplo de bloco de servidor NGINX com a configuração do TLS:

Captura de tela do NGINX com TLS.

Acessar o servidor com o certificado autoassinado

  1. Adicione o certificado raiz ao repositório raiz confiável do computador. Ao acessar o site, verifique se toda a cadeia de certificados é vista no navegador.

    Captura de tela de certificados raiz confiáveis.

    Note

    O DNS deve ser configurado para apontar o nome do servidor Web (neste exemplo www.fabrikam.com) para o endereço IP do servidor Web. Caso contrário, você pode editar o arquivo de hosts para resolver o nome.

  2. Navegue até o site e clique no ícone de bloqueio na caixa de endereço do navegador para verificar as informações do site e do certificado.

Verificar a configuração com o OpenSSL

Ou você pode usar o OpenSSL para verificar o certificado.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

Captura de tela da verificação do certificado OpenSSL.

Faça o upload do certificado raiz para as configurações de backend do Application Gateway

O Application Gateway aceita um certificado raiz confiável apenas como um certificado X.509 com codificação Base-64 que usa a extensão de nome de arquivo .cer. X.509 codificado em base-64 é uma codificação de texto, e é a codificação que o openssl x509 comando já produziu para o arquivo contoso.crt anteriormente neste artigo.

Como o contoso.crt já contém a chave pública no formato codificado Base-64, renomeie a extensão do nome do arquivo de .crt para .cer. Essa renomeação altera apenas a extensão do nome do arquivo. Ele não converte a codificação do certificado, e aqui não é necessária nenhuma conversão aqui. Um certificado que não esteja codificado Base-64 exige uma conversão real de codificação em vez de uma renomeação.

portal do Azure

Para carregar o certificado raiz confiável no portal, selecione as Configurações de Back-end e selecione HTTPS no protocolo Back-end.

Captura de tela da adição de um certificado usando o portal.

Azure PowerShell

Ou use a CLI do Azure ou o Azure PowerShell para carregar o certificado raiz. Os seguintes passos do Azure PowerShell adicionam um certificado raiz confiável ao gateway de aplicação, criam uma sonda de saúde, criam uma configuração de backend, adicionam uma regra de roteamento e, em seguida, aplicam as alterações ao gateway.

Note

Esses passos assumem que o gateway de aplicação appgwv2 no grupo de recursos rgOne, o backend pool testbackendpool e o ouvinte basichttps já existem. Execute os passos em ordem na mesma sessão do PowerShell, porque cada passo usa o $gw objeto que o primeiro passo recupera.

Passo 1: Adicionar o certificado raiz confiável

Essa etapa pressupõe que o gateway de aplicação appgwv2 já existe no grupo de recursos rgOne. Ele obtém o gateway na variável $gw, usada em todas as etapas posteriores, e carrega o arquivo contoso.cer que você renomeou anteriormente.

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

Passo 2: Crie a sonda de saúde

Esse passo assume que você tem a $gw variável do passo 1. Ele cria uma sonda HTTPS para www.fabrikam.com e a armazena na $probe variável.

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

Passo 3: Criar a configuração do backend

Essa etapa assume que você tem as $gwvariáveis , $trustedroot, e $probe das etapas anteriores. Ele cria a configuração de backend que usa o certificado raiz confiável e a sonda.

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Passo 4: Criar a regra de roteamento

Esta etapa pressupõe que você tenha a variável $gw da etapa 1 e a variável $backendhttp da etapa 3, e que o ouvinte basichttps e o pool de back-end testbackendpool já existam no gateway.

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Passo 5: Atualize o gateway de aplicação

Os passos anteriores mudam o $gw objeto apenas na memória. Esta etapa pressupõe que você tenha a variável $gw da etapa 1 com todas as alterações anteriores aplicadas e confirma essas alterações no gateway do Azure.

Set-AzApplicationGateway -ApplicationGateway $gw

Verificar a integridade do back-end do gateway de aplicativo

  1. Selecione a exibição Integridade de back-end do seu gateway de aplicativo para verificar se a investigação está íntegra.
  2. Você deve ver que o Status é Saudável para a sonda HTTPS.

Captura de tela da sonda HTTPS.

Próximas etapas

Para saber mais sobre SSL\TLS no Gateway de Aplicativo, consulte Visão geral da terminação TLS e do TLS de ponta a ponta com o Gateway de Aplicativo.