Histórico da Página
Índice maxLevel 3
01. DADOS GERAIS
Produto: | TOTVS Saúde Planos |
---|---|
Linha de Produto: | Linha Datasul |
Segmento: | Saúde |
Módulo: | HAT - Atendimento ao Cliente HAW - Autorizador Web |
Função: | Manutenção de Guias Solicitação de Exames Solicitação de Internação Consulta Beneficiários Intercambio |
País: | Brasil |
Ticket: | |
Issue: |
02. SITUAÇÃO/REQUISITO
As implementações descritas neste documento correspondem as adequações efetuadas no TOTVS Saúde Planos - Linha Datasul para atender ao PTU Online 9.0.
...
03. SOLUÇÃO
...
Link para o comunicado completo
03. SOLUÇÃO
Conforme descrito no comunicado acima, à partir de 03/05/2023 a Unimed Brasil não aceitará mais protocolos inferiores a TLS 1.2.
A atual versão padrão do Java utilizada pelo Foundation Saúde (6u18 ou 6u45) somente tem suporte a TLS 1.0.
...
Portanto, para atender à nova necessidade,
...
o Foundation Saúde precisará passar a utilizar uma versão customizada do Java 6, com suporte para TLS 1.2,
...
disponibilizada neste documento.
Informações |
---|
Esta atualização não depende de aplicação de patch do Datasul. Apenas o Java deve ser atualizado. Portanto, pode/deve ser realizada a qualquer momento, o quanto antes. Recomenda-se atualizar no ambiente de protótipo, realizar as devidas validações e em seguida atualizar em Produção, sem a necessidade de esperar pela data de 03/05/2023, pois nesta data a Brasil apenas deixará de aceitar protocolos inferiores, mas desde já ela aceita o |
...
Ou seja, para atender a esta necessidade, precisarão passar a existir duas instâncias do Foundation Saúde:
...
protocolo TLS 1.2. |
PACOTES PARA DOWNLOAD
Baixe os pacotes de acordo com a versão do Java que você já utiliza (6u18 ou 6u45) e Sistema Operacional.
Obs: cada versão está separada em 4 arquivos. Basta baixar todos e descompactar o arquivo com extensão 001:
Descrição | Download (Linux) | Download (Windows) |
---|
...
Java 6u18 customizado para suportar TLS 1.2 | ||
Java 6u45 customizado para suportar TLS 1.2 | WIN-jdk1.6.0_45x64_TLS1.2.7z.001 WIN-jdk1.6.0_45x64_TLS1.2.7z.002 |
...
ATUALIZAÇÃO DO JAVA NO FOUNDATION SAÚDE
Informações | ||
---|---|---|
| ||
|
- Baixar os arquivos do Java nos links acima, de acordo com seu Sistema Operacional.
- Descompactar no mesmo local onde já se encontra a versão anterior do seu Java, sem sobrepor arquivos. A sugestão do exemplo é apenas para manter os padrões:
- Se já existe c:\java\jdk1.6.0_18, então descompacte em c:\java\jdk1.6.0_18_TLS1.2
- Se já existe /usr/java/jdk1.6.0_18, então descompacte em /usr/java/jdk1.6.0_18_TLS1.2
- Após realizar backup do Jboss do Foundation Saúde, atualizar seu script de carga do Jboss do Foundation Saúde para considerar a nova versão do Java.
- Normalmente isso é tratado nos scripts com a variável de ambiente JAVA_HOME e/ou JAVA.
- Normalmente isso é tratado nos scripts com a variável de ambiente JAVA_HOME e/ou JAVA.
- No arquivo de start/configurações do seu Jboss (normalmente run.bat, run.sh ou run.conf), que se encontra na pasta bin do Jboss:
- Caso exista, eliminar o parâmetro abaixo, que indica restrição de TLS 1.0. Ao remover este parâmetro, a tomada de decisão sobre a versão de TLS passa a ser feita automaticamente pelo Java.
- -Dhttps.protocols=TLSv1
- -Dhttps.protocols=TLSv1
- Caso exista, eliminar o parâmetro abaixo, que indica restrição de TLS 1.0. Ao remover este parâmetro, a tomada de decisão sobre a versão de TLS passa a ser feita automaticamente pelo Java.
- No arquivo run.conf que se encontra na pasta bin do Jboss:
- Acrescentar o parâmetro -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true no JAVA_OPTS. Ex:
- JAVA_OPTS="-Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true"
- JAVA_OPTS="-Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true"
- Acrescentar o parâmetro -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true no JAVA_OPTS. Ex:
- Após concluir as alterações acima e reiniciar o Jboss do Foundation Saúde, o mesmo estará recebendo e enviando mensagens utilizando o protocolo TLS 1.2.
Informações |
---|
A solução descrita acima atendeu a maioria dos cenários de clientes onde já auxiliamos na atualização. Alguns cenários diferentes podem ser observados, de acordo com questões particulares do ambiente de cada cliente, como Firewall, Proxy Reverso, Certificados, demais configurações de segurança, etc. Caso o seu cenário apresente problemas, recomenda-se avaliar as soluções de contorno abaixo e/ou acionar consultoria. |
04. SOLUÇÕES DE CONTORNO
ERRO DE SSL
Se após atualizar o java do Foundation Saúde o seu ambiente apresentar mensagens semelhantes a estas, seja no envio (Unimed > Brasil) ou recebimento (Brasil > Unimed):
- Exception getting SSL attributes
- Renegotiation not supported
Pode ser necessário alterar estas configurações:
- Na nova instalação do Java 6, arquivo .../jre/lib/security/java.security:
- atributo ssl.KeyManagerFactory.algorithm → alterar de SunX509 para PKIX
- adicionar o atributo jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSV1.1
- No Jboss do Foundation Saúde, arquivo bin/run.conf:
- diferente da orientação anterior, onde foi indicado para retirar o parâmetro -Dhttps.protocols=TLSv1, fazer o contrário: mantê-lo forçando o protocolo 1.2:
- JAVA_OPTS="${JAVA_OPTS} -Dhttps.protocols=TLSv1.2"
- diferente da orientação anterior, onde foi indicado para retirar o parâmetro -Dhttps.protocols=TLSv1, fazer o contrário: mantê-lo forçando o protocolo 1.2:
NECESSIDADE DE CRIAR A NOVA INSTÂNCIA DO FOUNDATION SAÚDE
Caso a nova versão do Java com TLS 1.2 gere conflitos de comunicação nas mensagens de entrada (sentido Brasil > Unimed), ou se o cliente optar por isolar uma instância do Jboss para ficar dedicada apenas a recebimento e outra para envio de mensagens para a Brasil, as orientações abaixo podem ser utilizadas para criar uma nova instância apartada do Jboss.
Como criar a nova instância do Foundation Saúde
Existem duas formas para a criação da nova instância do Foundation Saúde:
- Clonar a VM do seu Foundation Saúde, e utilizar a nova com TLS 1.2 para envio de mensagens à Unimed Brasil
- Menor complexidade no ajuste de arquivos de configuração
- Maior consumo de recursos de hardware
- Criar uma cópia do seu Foundation Saúde na mesma VM, e configurar a nova com TLS 1.2
- Maior complexidade no ajuste de arquivos de configuração
- Menor consumo de recursos de hardware
Pontos de atenção para criar a nova instância do Foundation Saúde na mesma VM
Resumo: será feita uma cópia completa do Jboss já existente. Em seguida alguns arquivos serão alterados na nova versão.
- Derrubar o serviço Jboss do Foundation Saúde já existente. Ele precisa estar fora do ar para poder ser copiado corretamente.
- Limpar as pastas temporárias (log, temp, work e data) da instância, isso vai reduzir o tamanho e tempo da cópia. Ex:
- Fazer uma cópia da pasta inteira do Jboss. Novo nome sugerido, seguindo o padrão do exemplo: C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2.
...
- Carregar novamente o serviço do Foundation Saúde já existente
...
- .
A partir deste ponto, vamos configurar a nova cópia do Jboss do Foundation Saúde para trabalhar com TLS 1.2: - Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2\bin\run.bat (ou run.sh):
- Alterar para passar a considerar a nova versão do Java, instalada no passo anterior:
- Antes: set JAVA=C:\Java\jdk1.6.0_18\bin\java
- Depois: set JAVA=C:\Java\jdk1.6.0_18
- Alterar para passar a considerar a nova versão do Java, instalada no passo anterior:
...
- _TLS1.2\bin\java
- Obs: se a sua instalação não possui a linha acima, possivelmente está utilizando a variável de ambiente JAVA_HOME. Neste caso, declare a mesma no início do script apontando para a nova instalação do Java com TLS 1.2, mas não altere sua variável do sistema operacional, para não afetar seu Foundation Saúde já existente. Ex:
- Windows:
- set JAVA_HOME=C:\Java\jdk1.6.0_18
- Windows:
...
- _TLS1.2
- Linux:
- JAVA_HOME=C:\Java\jdk1.6.0_18
...
- _TLS1.2
- export JAVA_HOME
- Ajuste da nova localização da instância:
- Antes: set JAVA_OPTS=%JAVA_OPTS% -Ddatasul.framework.properties.dir=C:\totvs\foundation-saude\jboss-4.2.3.GA\server\default\conf
- Depois: set JAVA_OPTS=%JAVA_OPTS% -Ddatasul.framework.properties.dir=C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2\server\default\conf
- Retirar restrição da versão do TLS:
- Se existir, retirar esta propriedade: -Dhttps.protocols=TLSv1
- Se existir, retirar esta propriedade: -Dhttps.protocols=TLSv1
- Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2\bin\run.conf:
- Acrescentar o parâmetro -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true no JAVA_OPTS. Ex:
- JAVA_OPTS="-Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true"
- JAVA_OPTS="-Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true"
- Acrescentar o parâmetro -Dorg.bouncycastle.jsse.client.assumeOriginalHostName=true no JAVA_OPTS. Ex:
- A partir deste ponto vamos alterar portas em arquivos de configuração, que precisam estar livres. É fundamental que o seu Foundation Saúde atual esteja no ar para testar as novas portas, garantindo que não haverão conflitos. Dica para verificar se uma porta está livre:
- Windows (cmd):
- netstat -ona | findstr <nr_porta>
- Linux (shell):
- netstat -ona | grep <nr_porta>
- Se os comandos acima não tiverem retorno, a porta está livre e pode ser utilizada.
- Windows (cmd):
- Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2\server\default\conf\jboss-service.xml:
- Dica para identificar os pontos a serem alterados: procurar por port":
Anote o número da porta acima (no exemplo 21099). Será necessário atualizar no bin/service.bat (explicado a seguir).
- Dica para identificar os pontos a serem alterados: procurar por port":
- Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA\server\default\deploy\ejb3.deployer\META-INF\jboss-service.xml:
- Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml:
...
Anote o número da porta acima (no exemplo, 28080): Esta será a porta para acesso http.
Será necessário atualizar também no bin/service.bat (explicado a seguir).
Anote o número da porta acima (no exemplo, 443): Está será a porta para acesso https.
Além da porta, ajustar o caminho correto do keystore na nova instância.
- Arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA\server\default\deploy\properties-service.xml:
Ajustar o caminho correto do keystore na nova instância.
- Se você utiliza o arquivo C:\totvs\foundation-saude\jboss-4.2.3.GA_TLS1.2\bin\service.bat para instalar o Jboss do Foundation Saúde como Serviço no Windows, atenção para estes ajustes ANTES de instalar o novo serviço:
SVCNAME: utilize um nome de serviço para distinguir a nova versão da antiga. Sugerido: adicionar -TLS1.2 ao final.
SVCDISP: utilize um display name para fácil distinção dos serviços.
SVCDESC: texto livre, onde podem ser adicionadas informações úteis, como as novas portas para acesso http e https. No exemplo acima, a porta http foi alterada de 28080 na instância antiga para 28090 na nova; a porta https é mudou de 443 na antiga para 9443 na nova.- Nos pontos onde é tratado o arquivo r-<porta>.lock, ajustar para a nova porta http (no exemplo, mudou de 28080 para 28090):
- Nos pontos em que é tratado o shutdown do serviço, ajuste para a nova porta do NamingService (item 8 acima). No exemplo, mudou de 21099 para 29099.
- Após concluir estes ajustes, pode ser usada a instrução service.bat install para que o Jboss do novo Foundation Saúde seja instalado como serviço do Windows.
Após todas as configurações acima, por último é necessário modificar configuração da URL para a nova porta nos sistemas, onde no exemplo acima o http foi alterada de 28080 na instância antiga para 28090 na nova.
Totvs custom tabs box tabs GPS, Unicoo ids passo1,passo2 Totvs custom tabs box items default yes referencia passo1 Exemplo antigo: http://cxs-squad-sus01.jv01.local:28080/htz-foundation/WsdPtuSenderWSv9000?wsdl
Exemplo novo: http://cxs-squad-sus01.jv01.local:28090/htz-foundation/WsdPtuSenderWSv9000?wsdlTotvs custom tabs box items default no referencia passo2 Ajustar no cadastro da área de ação na Administração do Sistema > Tabelas Básicas > Plano de Saúde a nova URL, atentando-se para a nova porta de acesso:
PROXY REVERSO SEM ALTERAÇÃO DO JAVA
Informações |
---|
Esta é uma solução utilizando Proxy Reverso para as mensagens de saída (Unimed → Brasil), sem a necessidade de atualização da versão do Java 6 original. |
Resumo
Esta solução utiliza Nginx para o Proxy.
O caminho do arquivo de configuração pode variar de acordo com o ambiente. No exemplo temos um arquivo chamado ptu.conf dentro da pasta: /etc/nginx/conf.d/
Na Parte 1 temos um exemplo da configuração do Nginx.
Feita esta configuração pode-se testar acessando um endereço com o comando abaixo (ajustando a porta e o endereço conforme foi colocado no arquivo):
curl http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/comunicacaoInternacaoAlta
O retorno esperado é:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>No binding operation info while invoking unknown method with params unknown.</faultstring></soap:Fault></soap:Body></soap:Envelope>
Isto indica que está funcionando a “conversa” entre o proxy reverso e a Unimed Brasil, caso o retorno seja outro é necessário revisar a configuração.
Na Parte 2 temos um exemplo da alteração de configuração necessária para o Foundation Saúde utilizar o Proxy Reverso nas mensagens de saída.
Dentro da pasta conf do jboss do ptu temos o arquivo foundation-exchange.properties.
Nele é necessário alterar para que as requisições sejam feitas para o proxy reverso ao invés de enviar para a Unimed Brasil.
Após isto é necessário reiniciar o jboss, se o teste do curl funcionou, a configuração vai funcionar.
Parte 1 - configuração Nginx
server {
#adicionar o IP do servidor onde está o nginx e a porta, exemplo 192.168.0.50
listen x.x.x.x:80;
#Adicionar o endereço que será usado para chegar até o ptu
server_name enderecoptu.unimed.com.br;
return 301 https://$server_name$request_uri;
}
server {
#Alterar pelo IP do jboss do PTU, caso ncessário alterar a porta de 443 para a que está sendo usada
listen x.x.x.x:443 ssl;
#Adicionar o endereço que será usado para chegar até o ptu
server_name enderecoptu.unimed.com.br;
proxy_ssl_server_name on;
#colocar aqui o caminho do arquivo certificado crt da unimed
ssl_certificate /certificado/certificado-unimed.crt;
#colocar aqui o caminho do arquivo da chave do certificado da unimed
ssl_certificate_key /opt/certificad-unimed.key;
#colocar aqui o certificado recebido da unimed brasil
ssl_client_certificate /opt/certificado-unimed-brasil.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_verify_client off;
ssl_prefer_server_ciphers on;
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
#caminho dos logs
error_log /var/log/nginx/ptu.error.log;
access_log /var/log/nginx/ptu.access.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Host $http_host;
#colocar aqui o endereco IP HTTP do jboss do ptu, colocar a porta se necessário, exemplo: 192.168.0.50:8443
proxy_pass http://x.x.x.x;
}
location /htz-foundation {
#colocar aqui o certificado recebido da unimed brasil nos formatos do exemplo
proxy_ssl_certificate /opt/certificado-unimed-brasil.pem;
proxy_ssl_certificate_key /opt/certificado-unimed-brasil.key;
proxy_set_header X-SSL-CERT /opt/certificado-unimed-brasil.pem;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header Host $http_host;
proxy_ssl_verify off;
proxy_ssl_verify_depth 2;
#Adicionar o endereço https do jboss do ptu, colocar a porta se necessário, exemplo: 192.168.0.50:8443
proxy_pass https://x.x.x.x;
proxy_ssl_ciphers HIGH:!DH;
}
}
server {
#Porta que será em que este serviço será disponibilizado, a porta pode ser qualquer uma livre
listen localhost:9999;
#caminho dos logs
error_log /var/log/nginx/ptup-unimedcoop-error.log;
access_log /var/log/nginx/ptup-unimedcoop-access.log;
#Endereço da aplicação, neste caso é localhost porque o jboss esta no mesmo servidor do jboss
server_name localhost;
# Certificado do proxy (PTU -> Nginx)
ssl_certificate /opt/certificad-unimed.crt;
ssl_certificate_key /opt/certificad-unimed.key;
proxy_ssl_certificate /opt/certificado-unimed-brasil.pem;
proxy_ssl_certificate_key /opt/certificado-unimed-brasil.key;
# Protocolos aceitos pelo proxy (PTU -> Nginx)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
#Aqui é forçado o envio usando TLS 1.2
proxy_ssl_protocols TLSv1.2;
proxy_ssl_verify_depth 2;
proxy_ssl_server_name on;
# Enviar as requisições recebidas para o Foundation
location / {
#Url da unimed do brasil de produção, protótipo é https://wsdapihml.unimed.coop.br;
proxy_pass https://wsdapi.unimed.coop.br;
}
}
Parte 2 - foundation-exchange.properties
Lembrar de alterar o endereço http://localhost:9999 pelo endereço que foi colocado na configuração do Nginx, destacado em vermelho na parte 1.
#Versao 9000 - PTU ONLINE 9.0 - ENDPOINT TLS 1.2
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.RespostaAuditoria.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/RespostaAuditoria
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.PedidoAutorizacao.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/PedidoAutorizacao
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.PedidoComplementoAutorizacao.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/PedidoComplementoAutorizacao
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.OrdemServico.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/OrdemServico
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.ConsultaDadosPrestador.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/ConsultaDadosPrestador
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.Cancelamento.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/Cancelamento
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.PedidoInsistencia.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/PedidoInsistencia
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.ConsultaDadosBeneficiario.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/ConsultaDadosBeneficiario
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.RequisicaoContagemBeneficiarios.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/RequisicaoContagemBeneficiarios
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.StatusTransacao.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/StatusTransacao
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.comunicacaoDecursoPrazo.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/ComunicacaoDecursoPrazo
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.autorizacaoOrdemServico.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/AutorizacaoOrdemServico
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.ConsultaA1100.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/ConsultaA1100
com.totvs.foundation.exchange.connector.ptu.implementation.v9000.DefaultExternalConnector.comunicacaoInternacaoAlta.ENDPOINT = http://localhost:9999/wsdintercambio/intercambioservices/ptu_V90_00/comunicacaoInternacaoAlta
05. WEBINAR
Em 20/04/2023 realizamos um Webinar para todos os clientes, para esclarecimentos sobre o assunto.
A gravação está neste link:
Senha: 9SJCff0$
04. DEMAIS INFORMAÇÕES
...