Histórico da Página
...
- Edite o arquivo domain.xml ([diretório_instalação]/appserver/domain/configuration/domain.xml)
- Procure pela seguinte linha:
...
language | xml |
---|
- <response-header
...
- header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin"/>
Bloco de código | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<response-header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin" header-value="*" /> |
- Substitua o "*" pela URL origem que terá permissão de acessar o TOTVS Fluig Plataforma. Por exemplo, se a URL de acesso ao fluig for "https://www.minhaempresa.com.br" e deseja-se liberar acesso a um site cuja URL de acesso seja "https://www.outrosite.com.br", ficaria assim:
Bloco de código | ||
---|---|---|
| ||
<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 | ||||
---|---|---|---|---|
| ||||
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!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"; shared:SSL:10m; } location /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 Access-Control-Allow-Methods 'GET, POST, if ($request_method = 'OPTIONS') { set $CORS "${CORS}O"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; } add_header Access-Control-Max-Age 3600; if ($CORS = "O") { add_header Content-Type 'text/plain charset=UTF-8'Access-Control-Allow-Origin $http_origin; add_header Content-Length 0; Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT'; return 204add_header Access-Control-Allow-Headers 'Accept,Authorization,Content-Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control'; } add_header if ($CORS = "O") {Access-Control-Allow-Credentials 'true'; add_header Access-Control-AllowMax-OriginAge $http_origin3600; } add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT'; proxy_pass http://fluig-http; proxy_ssl_verify off; add_header Access-Control-Allow-Headers 'Accept,Authorization,Content-Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control'; proxy_ssl_ciphers HIGH:!aNULL:!MD5; addproxy_set_header AccessX-ControlForwarded-Allow-Credentials 'true'Host $host:443; addproxy_set_header AccessX-ControlForwarded-Max-AgeServer 3600$host; } proxy_pass http://fluig-httpproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_sslset_verifyheader offX-Forwarded-Proto https; proxy_sslset_ciphersheader HIGH:!aNULL:!MD5; X-Real-IP $remote_addr; proxyclient_max_set_header X-Forwarded-Host $host:443; body_size proxy_set_header X-Forwarded-Server $host880m; proxyclient_body_setbuffer_header X-Forwarded-For $proxy_add_x_forwarded_for; size 256k; proxy_set_header X-Forwarded-Proto httpsconnect_timeout 800; proxy_set_header X-Real-IP $remote_addr; send_timeout 800; clientproxy_max_body_sizeread_timeout 880m800; client_bodyproxy_buffer_size 256k; proxy_connect_timeout8k; 800; proxy_buffers proxy_send_timeout 8 80032k; proxy_busy_readbuffers_timeoutsize 80064k; proxy_temp_bufferfile_write_size 8k64k; proxy_buffers 8 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }} } |
Nota |
---|
Recomendamos o uso de chaves e protocolos mais modernos e seguros 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/. E também os protocolos: TLSv1, TLSv1.1 e TLSv1.2 Preencha a diretiva ssl_protocols do fluig.conf substituindo pelos valores suportados acima que estejam de acordo com sua política de segurança. |
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)
...