2015
Integração com o Invoicy via Java
15 de junho de 2015Olá,
Se o seu ERP utiliza a linguagem Java e está integrando com o InvoiCy leia este artigo.
A comunicação com o Web Service do InvoiCy se dá através de uma comunicação segura, dependendo de como a integração foi desenvolvida pode retornar o seguinte erro ao comunicar com o InvoiCy em produção:
Warning: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
Warning: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
Warning: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHands
hakeException: sun.security.validator.ValidatorException: PKIX path building fai
led: sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
No content received
Exception in thread “main” org.eclipse.swt.SWTException: Failed to execute runna
ble (java.lang.RuntimeException: Connection has been shutdown: javax.net.ssl.SSL
HandshakeException: sun.security.validator.ValidatorException: PKIX path buildin
g failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target(-10001))
Alguns parceiros disponibilizaram a solução técnica a seguir para resolver este erro.
Solução para quem desenvolve em Genexus compilando a aplicação em Java:
1. Passo – Criar keystore
Estando na pasta BIN do JRE, digitar o seguinte comando “keytool -genkey -keystore c:\keystore.jks” e pressionar a tecla “enter”, será solicitada a inserção da senha do armazenamento da chave que deve ser: “qualquer_senha”, após pressionar “enter” e confirmar a senha será solicitado para redigitar, é só digitar novamente: “senha_escolhida” e pressionar “enter”, responder as perguntas como informado abaixo:
Após todos os dados informados, será solicitado que você informe a senha de armazenamento novamente “senha_escolhida” e então confirme a senha “senha_escolhida” e pronto, keystore criado.
2. Passo – Assinar keystore com o certificado
Tendo o certificado digital da Migrate salvo em seu computador, assine o keystore com o certificado digital, conforme exemplo abaixo:
keytool -import -trustcacerts -alias <alias> -file <file> -keystore <keystore>
Ex: keytool -import -trustcacerts -alias nfse -file c:\-.migrate.info/desenvolvedores/web/.crt -keystore c:\keystore.jks
Você terá o keystore assinado com o certificado digital.
3. Passo – Iniciar a aplicação JAVA vinculando ao keystore
Inicialize a aplicação JAVA, adicionando o keystore com o comando:
– Djavax.net.ssl.trustStore=”CAMINHO_CERTIFICADO”
– Djavax.net.ssl.trustStorePassword=SENHA, conforme exemplo abaixo:
Java -Djavax.net.ssl.trustStore=” c:\keystore.jks “
-Djavax.net.ssl.trustStorePassword=senha123 –cp gxclassr.zip;swt.jar;. umain
- Solução para quem desenvolve em Java:
Segue abaixo passos para assinar digitalmente os jars com o certificado da Migrate.
O comando keytool deve ser usado dentro da pasta “bin” da “jre”.
1. Passo – Criar keystore
Digitar o seguinte comando:
“keytool -genkey -keystore <CAMINHO>\<NOME_KEYSTORE>” e pressionar a tecla “enter”, será solicitada a inserção da senha do armazenamento da chave que deve ser: “qualquer_senha”, após pressionar “enter” e confirmar a senha será solicitado para redigitar, é só digitar novamente: “senha_escolhida” e pressionar “enter”, responder as perguntas como informado abaixo:
Ex: “keytool -genkey -keystore c:\pastax.gerenciador.keystore”
Qual é o seu nome e o seu sobrenome?
Desenvolvimento
Qual é o nome da sua unidade organizacional?
Desenvolvimento
Qual é o nome da sua empresa?
EmpresaX
Qual é o nome da sua cidade ou localidade?
Estado
Qual é o nome do seu estado ou município?
Cidade
Quais são as duas letras do código do país desta unidade?
UF
Após todos os dados informados, será solicitado que você informe a senha de armazenamento novamente “senha_escolhida” e então confirme a senha “senha_escolhida” e pronto, keystore criado.
2. Passo – Assinar keystore com o certificado
keytool -import -trustcacerts -alias <alias> -file <file> -keystore <keystore>
Ex: keytool -import -trustcacerts -alias nfse -file c:\-.migrate.info/desenvolvedores/web/.crt -keystore c:\pastax.gerenciador.keystore
Você terá o keystore assinado com o certificado digital.
3. Passo – Assinar os jars da aplicação
Assinar todos os Jars até os de dentro da lib com o certificado.
jarsigner -keystore “C:\pastax.gerenciador.keystore”
“C:\pastax.gerenciador_lib\axis.jar” nfse
Será solicitada a senha de armazenamento criada no keystore.
Pronto, arquivo de certificado criado, jars assinados.
4. Passo – Dentro da aplicação
Nas classes de controle, que instância as conexões com os webservices, é necessário setar as seguintes propriedades.
public static final String TRUSTSTORE = “javax.net.ssl.trustStore”;
public static final String TRUSTSTOREPASSWORD = “javax.net.ssl.trustStorePassword”;
public static final String NOMEARQUIVOCHAVE = “pastax.gerenciador.keystore”;
public static final String SENHAARQUIVOCHAVE = “senhaA”;
System.setProperty(TRUSTSTORE, <CAMINHO DO KEYSTORE>);
System.setProperty(TRUSTSTOREPASSWORD, SENHAARQUIVOCHAVE);