Segurança de dados do EPM via HTTPS.

Neste artigo, abordaremos como utilizar um servidor de Proxy para redirecionar todo o tráfego de uma porta para os servidores do EPM Portal e EPM Web Server, e explicaremos como habilitar HTTPS no Proxy e, desta forma, permitir a criptografia do tráfego e uma conexão segura.

Neste ambiente, o Proxy seria o ponto de acesso público e estaria na fronteira da infraestrutura de rede, enquanto que os servidores do EPM Portal e EPM Web Server estariam protegidos e com seu acesso externo bloqueado.

Instalação do servidor Proxy (NGINX)

O primeiro item a ser configurado é um servidor de Proxy reverso para conseguirmos redirecionar o tráfego do EPM Portal e EPM Web Server.

Existem algumas opções de produtos que permitem fazer este tipo de configuração, como o ApacheIISNGINX, entre outros.

Para o nosso caso, utilizaremos a versão gratuita mais recente do NGINX, disponível para download em https://nginx.org/en/download.html no mesmo servidor onde estão rodando o EPM Portal e o EPM Web Server.

Após o download, é necessário apenas descompactar o arquivo em alguma pasta qualquer para que o NGINX possa ser considerado instalado.

Feito isso, o conteúdo do diretório destino será equivalente ao da imagem abaixo.

Conteúdo da pasta do NGINX
Conteúdo da pasta do NGINX

Configuração do Proxy reverso (NGINX)

Após a instalação, é necessário configura o Proxy reverso do NGINX para o redirecionamento do tráfego.

Para isso, é necessário criar um arquivo de configuração do NGINX em formato texto e com sintaxe própria, conforme abaixo.

worker_processes  1;

events {
    worker_connections  1024;
}

http {
       server {
              listen 80;
              server_name  [server_url];

              proxy_http_version 1.1;
              proxy_set_header   Upgrade $http_upgrade;
              proxy_set_header   Connection keep-alive;
              proxy_set_header   Host $host;
              proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header   X-Forwarded-Proto $scheme;
              proxy_cache_bypass $http_upgrade;
             
              location /auth {
                     proxy_pass         http://localhost:44333;
              }

              location ~ ^/(batch|epm|resource|opcua) {
                     proxy_pass         http://localhost:44332;
              }

              location / {
                     proxy_pass         http://localhost:44331;
              }
       }
}

Na configuração acima, o NGINX está configurado para receber conexões pela porta 80, que é a porta padrão HTTP. Caso não seja possível utilizar esta porta, você pode alterar este parâmetro conforme necessário.

Em seguida, é preciso alterar o parâmetro [server_url] para o endereço que será utilizado para acesso público ao EPM Portal. Por exemplo:

portal.empresa.com.br

Mais abaixo, é possível verificar que há 3 entradas separadas de location. Estas entradas são responsáveis pelo redirecionamento do tráfego para as portas correspondentes do EPM Portal e EPM Web Server.

No nosso exemplo, os serviços do EPM Portal e EPM Web Server (WebApi e Authentication) estão configurados para receber conexões pelas portas 44331, 44332 e 44333, respectivamente.

EPM Portal Settings
EPM Portal Settings

EPM Web Server Settings
EPM Web Server Settings

Logo, caso alguma das portas não esteja de acordo com o que foi configurado no EPM Portal e EPM Web Server em sua máquina, você precisará corrigir a configuração do NGINX para indicar as portas corretas.

Além disso, o NGINX será executado no mesmo servidor do EPM Portal e EPM Web Server, e por isso utilizamos localhost nos endereços.

Agora, o servidor de Proxy reverso do NGINX está configurado corretamente. O próximo passo é inicializar o serviço do Proxy.

Inicialização do Proxy reverso (NGINX)

Para executar o NGINX com o arquivo de configuração criado no passo anterior, devemos executá-lo a partir de uma linha de comando com o parâmetro -c e informando o caminho do arquivo, conforme abaixo:

nginx.exe -c [caminho do arquivo de configuração]

Linha de comando do NGINX
Linha de comando do NGINX

Ao executar este comando, o NGINX será executado utilizando o arquivo de configuração passado e permanecerá em execução até que seja finalizado.

Configuração do EPM Portal

Uma vez configurado o Proxy e com ele em execução, é necessário alterar os endereços do WebApi e Authentication Endpoint que o EPM Portal utiliza para os endereços públicos do Proxy e reiniciar o serviço.

EPM Portal Settings
EPM Portal Settings para HTTP

Os novos valores são:

  • WebApi Endpoint: http://portal.empresa.com.br
  • Authentication Endpoint: http://portal.empresa.com.br

Configuração do EPM Web Server

Como o serviço do EPM Web Server não tem conhecimento da existência deste novo endereço, será necessário fazer algumas mudanças na sua configuração.

Devemos habilitar a opção Public Origin e informar o endereço público do Proxy para que seja exposto na web pelo serviço de autenticação, além de incluir este mesmo endereço na lista de endereços aceitos pelo EPM Portal.

EPM Web Server Settings
EPM Web Server Settings para HTTP

Isto é tudo o que precisa ser feito para rodar um Proxy, sem criptografia, com o EPM Portal e EPM Web Server.

A partir deste momento, já deve ser possível acessar o EPM Portal pelo endereço público do Proxy (http://portal.empresa.com.br).

Adicionando suporte a HTTPS no Proxy

Para adicionar suporte a HTTPS ao Proxy configurado anteriormente, será necessário alterar o arquivo de configuração do NGINX.

worker_processes  1;

events {
    worker_connections  1024;
}

http {
       server {
             listen 80;
             return 301 https://$host$request_uri;
       }

       server {
              listen 443 ssl default_server;
              server_name  [server_url];       

              ssl_certificate [path para certificate.crt];
              ssl_certificate_key [path para certificate.key];

              proxy_http_version 1.1;
              proxy_set_header   Upgrade $http_upgrade;
              proxy_set_header   Connection keep-alive;
              proxy_set_header   Host $host;
              proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header   X-Forwarded-Proto $scheme;
              proxy_cache_bypass $http_upgrade;

              location /auth {
                     proxy_pass         http://localhost:44333;
              }

              location ~ ^/(batch|epm|resource|opcua) {
                     proxy_pass         http://localhost:44332;
              }

              location / {
                     proxy_pass         http://localhost:44331;
              }
       }
}

Primeiro, alteramos a porta onde nosso servidor está escutando de 80 para 443, padrão do HTTPS.

listen 443;

Em seguida, precisamos informar o caminho dos arquivos do certificado que estarão associados a esta porta. Ambos os arquivos (certificado e sua chave) devem estar no formato PEM. Por exemplo:

ssl_certificate C:/certs/nginx.crt;
ssl_certificate_key C:/certs/nginx.key;

Nota
Para gerar um certificado auto assinado para testes, podemos usar a ferramenta por linha de comando OpenSSL. Criamos um arquivo de configuração com o conteúdo do anexo para a geração do certificado usando o comando abaixo, modificando as partes destacadas conforme necessário. No exemplo abaixo, ssl.conf é o caminho para este arquivo.

openssl.exe req -x509 -nodes -days 365 -out nginx.crt -keyout nginx.key -extensions v3_req -config ssl.conf

Este comando irá gerar dois arquivos, nginx.crt e nginx.key, que podem ser utilizados diretamente no arquivo de configuração do nginx. As máquinas clientes devem confiar no certificado gerado para que o HTTPS funcione de forma válida pelo navegador.

No entanto,  este tipo de certificado não deve ser utilizado em produção. Em vez dele, deve ser usado um certificado verificado e validado por um autoridade certificadora (CA) raíz confiável.

Atualizando a configuração do EPM Web Server para HTTPS

Agora, é preciso atualizar os valores da configuração do EPM Web Server para que ele passe a usar o endereço HTTPS, e então reiniciar o serviço.

EPM Portal Settings para HTTPS
EPM Portal Settings para HTTPS

Os novos valores são:

  • EPM Portal redirects: https://portal.empresa.com.br
  • Public Origin: https://portal.empresa.com.br

Atualizando a configuração do EPM Portal para HTTPS

Em seguida, devemos atualizar a configuração do EPM Portal para utilizar o endereço HTTPS e reiniciar o serviço.

EPM Portal Settings para HTTPS
EPM Portal Settings para HTTPS

Os novos valores são:

  • WebApi Endpoint: https://portal.empresa.com.br
  • Authentication Endpoint: https://portal.empresa.com.br/auth

A partir deste momento, o EPM Portal já deve estar funcionando corretamente no endereço HTTPS, porta 443. Além disso, no arquivo de configuração do NGINX, adicionamos um redirecionamento automático da porta 80 para a 443.

      server {
            listen 80;
            return 301 https://$host$request_uri;
       }

Dessa forma, podemos conectar ao EPM Portal diretamente por HTTPS pela porta 443; alternativamente, ao conectar por HTTP pela porta 80, seremos redirecionados para a porta 443 (HTTPS).

Anexo

Exemplo de conteúdo do arquivo de configuração para geração do certificado auto-assinado.

[req]
default_bits = 2048
prompt = yes
default_md = sha256
req_extensions = v3_req
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = BR
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Rio Grande do Sul
localityName                = Locality Name (eg, city)
localityName_default        = Porto Alegre
organizationName            = Organization Name (eg, company)
organizationName_default    = Elipse Software
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = portal.empresa.com.br

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = portal.empresa.com.br
Este artigo foi útil? Was this post helpful?
Yes2
No0

Leave a Reply

Your email address will not be published.Required fields are marked *