Neste artigo, primeiramente 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; logo após, 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)
Primeiramente, devemos configurar 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 Apache, IIS, NGINX, 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.
Conteúdo da pasta do NGINX
Configuração do Proxy reverso (NGINX)
Logo após a instalação, é necessário configurar 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 http2; 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|health|resource|security|opcua|swagger) { 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.
Logo após, é 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 exemplo abaixo, 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.
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]
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.
Os novos valores são:
- WebApi Endpoint: http://portal.empresa.com.br
- Authentication Endpoint: http://portal.empresa.com.br/auth
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.
Antes de mais nada, 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.
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 http2; 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|health|resource|security|opcua|swagger) { proxy_pass http://localhost:44332; } location / { proxy_pass http://localhost:44331; } } } |
Primeiramente, 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.
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.
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 |
fantástico e blog também notável. Na verdade, eu quero agradecer, por nos oferecer muito melhor informação.