Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

  • Edite o arquivo domain.xml ([diretório_instalação]/appserver/domain/configuration/domain.xml)
  • Procure pela seguinte linha:

...

languagexml
  • <response-

...

  • header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin"/>
Bloco de código
languagexml
<response-header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin"/>
  • Substitua o "*" pela URL de acesso ao TOTVS Fluig Plataforma. Por exemplo, se a URL de acesso ao fluig for "https://www.minhaempresa.com.br", ficaria assim:
Bloco de código
languagexml
<response-header header-name="Access-Control-Allow-Origin" name="Access-Control-Allow-Origin" header-value="httpsheader-value="https://www.minhaempresa.com.br" name="Access-Control-Allow-Origin"/>
  • Reinicie os serviços da plataforma

Permitindo a conexão de uma única origem

...

Bloco de código
languagexml
<response-header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin" header-value="*" />
Bloco de código
languagexml
<response-header header-name="Access-Control-Allow-Origin" name="Access-Control-Allow-Origin" header-value="https:header-value="https://www.outrosite.com.br" name="Access-Control-Allow-Origin"/>
  • Reinicie os serviços da plataforma

Permitindo a conexão de múltiplas origens

...

Mas há uma solução: usar ferramentas de terceiros (como NGINX ou Apache), construindo uma de rede DMZ. Inclusive a maneira mais segura de utilizar o TOTVS Fluig Plataforma é não expô-lo diretamente na internet, mas sim através de uma DMZ (Veja mais informações aqui).

...

Bloco de código
languagetext
titlefluig.conf
upstream fluig-http {
    server 192.168.2.100:8080;
}

server {
    listen                    443 ssl;
    server_name               *.minhaempresa.com;
    server_tokens             off;
    ssl_certificate           fullchain.pem;
    ssl_certificate_key       privkey.pem;
	ssl_protocols             TLSv1.2 TLSv1.3;
	ssl_ciphers                       ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK;
	ssl_prefer_server_ciphers on;
	ssl_session_cache         shared:SSL:10m;

    location / {
:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; # Se necessário complemente com outras chaves Ciphers suportadas;
	ssl_prefer_server_ciphers on;
	ssl_session_cache         shared:SSL:10m;

    location / {
        set $CORS "";
        # Lista de origens permitidas
        if ($http_origin ~* "^https://(www.minhaempresa.com|empresa1.com|api.empresa2.com)$") {
            set $CORS "O";
        }
        if ($request_method = 'OPTIONS') {
            set $CORS "${CORS}O";
        # Lista de origens permitidas}

        if ($http_origin ~* "^https://(www.minhaempresa.com|empresa1.com|api.empresa2.com)$$CORS = "OO") {
            set $CORS "O"add_header Access-Control-Allow-Origin $http_origin;
        }
    add_header    if ($request_method = 'OPTIONS') {
            set $CORS "${CORS}O"Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT';
        }

    add_header    if ($CORS = "OO") {Access-Control-Allow-Headers 'Accept,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            add_header Access-Control-Allow-Origin $http_originCredentials 'true';
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUTMax-Age 3600;
            add_header Content-Type 'text/plain charset=UTF-8';
            add_header Access-Control-Allow-Headers 'Accept,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
Content-Length 0;

             add_header Access-Control-Allow-Credentials 'true';return 204;
        }

        if ($CORS = "O") {
            add_header Access-Control-MaxAllow-AgeOrigin 3600$http_origin;
            add_header Content-Type 'text/plain charset=UTF-8Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT';
            add_header Access-Control-Allow-Headers 'Accept,Authorization,Content-Length 0;

-Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control';
            return 204;
add_header Access-Control-Allow-Credentials 'true';
          }

  add_header Access-Control-Max-Age 3600;
    if ($CORS = "O") { }

        proxy_pass http://fluig-http;
   add_header Access-Control-Allow-Origin $http_origin;
     proxy_ssl_verify    off;
        addproxy_ssl_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT';
ciphers   HIGH:!aNULL:!MD5;

            addproxy_set_header AccessX-ControlForwarded-Allow-Headers 'Accept,Authorization,Content-Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control'Host $host:443;
            addproxy_set_header AccessX-ControlForwarded-Allow-Credentials 'true'Server $host;
            addproxy_set_header AccessX-ControlForwarded-Max-Age 3600;
For $proxy_add_x_forwarded_for;
        proxy_set_header  }
X-Forwarded-Proto https;
        proxy_pass http://fluig-http;set_header X-Real-IP $remote_addr;
		
        proxyclient_max_ssl_verifybody_size       off880m;
        proxyclient_body_sslbuffer_cipherssize    HIGH:!aNULL:!MD5256k;

        proxy_setconnect_headertimeout X-Forwarded-Host $host:443     800;
        proxy_set_header X-Forwarded-Server $host;
send_timeout        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 800;
        proxy_setread_headertimeout X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr800;
		
        clientproxy_max_bodybuffer_size       880m   8k;
        client_body_buffer_size    256k;

proxy_buffers         proxy_connect_timeout     8 80032k;
        proxy_sendbusy_timeoutbuffers_size         80064k;
        proxy_read_timeout         800;

        proxy_buffer_size          8k;
        proxy_buffers              8 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}temp_file_write_size 64k;
    }
}
Nota

Recomendamos o uso de chaves mais modernas e seguras como os indicados no exemplo. Porém, outras chaves também são suportadas:

DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA

Preencha a diretiva ssl_ciphers do fluig.conf substituindo pelos valores suportados acima que estejam de acordo com sua política de segurança. As chaves podem ser validadas em https://ciphersuite.info/.

Utilizando Apache para configurar CORS

A seguir um exemplo de configuração para o Apache que pode ser usado como base para configurá-lo para fazer a validação de CORS. Essa configuração é úm um aprimoramento da configuração descrita em Configuração de Proxy Reverso - Configuração do Apache (SSL) + Fluig (HTTP)

...