Login Registre-se
[RESOLVIDO] - Erro na Geração de Cacerts (Exceto SP)  XML
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Autor Mensagem
JunniorR

JavaC Membro

Membro desde: 30/06/2015 09:40:20
Mensagens: 17
Offline

Bom Dia,

Realizei a implementação de uma funcionalidade que recebe a chave de acesso (chNFe) de um documento fiscal, realiza a consulta de status da mesma, e se tudo estiver OK, realizo o Manifesto de Ciência da operação para conseguir realizar o download depois.
O CNPJ da empresa que trabalho e que irá fazer uso dessa funcionalidade, é do estado de SP, porém recebe notas de diferentes estados.
Para criação dos cacerts, estou utilizando o mesmo código postado pelo Maciel, porém estou usando os Host de produção. Para geração dos cacerts de SP (nfe.fazenda.sp.gov.br), Sefaz Virtual de Contingência Ambiente Nacional - (SVC-AN - www.svc.fazenda.gov.br) e Sefaz Virtual Ambiente Nacional - (SVAN - www.sefazvirtual.fazenda.gov.br), não ocorre erro nenhum, e o arquivo é gerado normalmente, porém quando tento gerar para mais algum estado, exemplo MG (nfe.fazenda.mg.gov.br), o arquivo não é gerado, e é apresentado o seguinte erro "Unrecognized SSL message, plaintext connection?"
Caso alguém possa ajudar com esse problema, passei a sexta-feira toda quebrando a cabeça com isso, e nada.


Obrigado desde já.

Esta mensagem foi editada 2 vezes. Última atualização foi em 24/07/2015 07:34:56

rfumiot

JavaC Membro
[Avatar]

Membro desde: 23/06/2015 17:19:55
Mensagens: 217
Offline

JuniorR você está passando a porta 443? tem como postar o código que você está usando para gerar o cacerts?
JunniorR

JavaC Membro

Membro desde: 30/06/2015 09:40:20
Mensagens: 17
Offline

Estou utlizando a porta 443 sim, segue abaixo o código, se conseguir me ajudar, fico grato, estou quebrando a cabeça com isso faz alguns dias,
OBS: no caso ai eu removi a chamada get passando os demais estados pois estava ocorrendo erro, consigo criar os cacerts referente apenas a os 4 ws.

package br.com.embraer.eas.nfe.cacerts;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

import br.com.embraer.eas.nfe.exception.NfeException;

/**
* <p> Classe responsável em realizar a criação do arquivo de Cacerts para todos os estados.
*
*/
public class Cacerts {

/**
* <p> Caminho para criação do arquivo cacerts.
*/
private static String CAMINHO_CACERTS;

/**
* <p> Nome do arquivo cacerts.
*/
private static final String NOME_CACERTS = "NFeCacerts";


private static final char SEPARATOR = File.separatorChar;

private static char[] CHANGEIT = "changeit".toCharArray();

private static final Integer TIMEOUT_WS = 30;

/**
* <p> Realiza a criação do Cacerts para todos os estados.
*/
public static void criarCacerts(String caminhoCacerts) throws NfeException{
try {
CAMINHO_CACERTS = caminhoCacerts;

File file = carregarCacertsJava();

InputStream inputStream = new FileInputStream(file);

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

keyStore.load(inputStream, CHANGEIT);

inputStream.close();

// Sefaz São Paulo - (SP)
get("nfe.fazenda.sp.gov.br", 443, keyStore);

// Sefaz Virtual de Contingência Ambiente Nacional - (SVC-AN)
get("www.svc.fazenda.gov.br", 443, keyStore);

//Sefaz Virtual Ambiente Nacional - (SVAN)
get("www.sefazvirtual.fazenda.gov.br", 443, keyStore);

// Ambito Nacional
get("www.nfe.fazenda.gov.br", 443, keyStore);

File cacerts = new File(criarDiretorioCacerts(), NOME_CACERTS);
OutputStream outPutStream = new FileOutputStream(cacerts);
keyStore.store(outPutStream, CHANGEIT);
outPutStream.close();

} catch (Exception e) {
throw new NfeException(e.getMessage());
}
}

/**
* <p> Verifica e retorna o local onde o cacerts da lib está criada.
* @return
*/
private static File carregarCacertsJava(){
File file = new File(NOME_CACERTS);

if( file.isFile() == false ){
File diretorio = new File( System.getProperty("java.home") + SEPARATOR + "lib" + SEPARATOR + "security");
file = new File(diretorio, NOME_CACERTS);

if( file.isFile() == false ){
file = new File(diretorio, "cacerts");
}
}
return file;
}

/**
* <p> Método responsável em verificar se o diretório para criação do cacerts, existe, caso não exista, o mesmo é criado.
* @return
*/
private static File criarDiretorioCacerts(){
File diretorio = new File(CAMINHO_CACERTS);

if( !diretorio.exists() )
diretorio.mkdirs();

return diretorio;
}

private static void get(String host, int port, KeyStore keyStore) throws Exception{
SSLContext context = SSLContext.getInstance("TLS");

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

trustManagerFactory.init(keyStore);

X509TrustManager defaultTrustManager = (X509TrustManager) trustManagerFactory.getTrustManagers()[0];
SavingTrustManager savingTrustManager = new SavingTrustManager(defaultTrustManager);

context.init(null, new TrustManager[]{savingTrustManager}, null);
SSLSocketFactory factory = context.getSocketFactory();

SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setSoTimeout(TIMEOUT_WS * 1000);

try{
socket.startHandshake();
socket.close();
}catch(SSLException e){
e.printStackTrace();
}
criarCertificado(savingTrustManager, host, keyStore);
}

/**
* <p> Método responsável em retornar o caminho onde o arquivo cacerts está criado.
* @return
*/
public static String retornaCaminhoCacerts(String caminho){
return caminho + NOME_CACERTS;
}

private static void criarCertificado(SavingTrustManager savingTrustManager, String host, KeyStore keyStore) throws Exception{
X509Certificate[] x509Certificate = savingTrustManager.getX509Certificate();

MessageDigest sha1 = MessageDigest.getInstance("SHA1");
MessageDigest md5 = MessageDigest.getInstance("MD5");

for(int i = 0; i < x509Certificate.length; i++){
X509Certificate certificate = x509Certificate[i];
sha1.update(certificate.getEncoded());
md5.update(certificate.getEncoded());

String alias = host + "-" + (i);
keyStore.setCertificateEntry(alias, certificate);
}
}
}


rfumiot wrote:JuniorR você está passando a porta 443? tem como postar o código que você está usando para gerar o cacerts?
macielgoncalves

Administrador
[Avatar]

Membro desde: 06/03/2011 14:49:25
Mensagens: 1234
Localização: Tubarão - SC
Offline

JunniorR,

Você está utilizando algum Proxy para conexão?

Maciel Gonçalves
Administrador (JavaC - Java Community)
Seguir no Twitter @macielgoncalves



Projeto NF-e, CT-e, CC-e? Comece Por Aqui!

Quer saber mais sobre NF-e? Acesse www.MACIELGONCALVES.com.br

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original." Albert Einstein
"Seja liberal naquilo que você aceita, e conservador naquilo que você propaga". Jon Postel.
"A coisa mais indispensável a um homem é reconhecer o uso que deve fazer do seu próprio conhecimento". Platão


Emissão de Documentos Fiscais para Desenvolvedores Java


Membros do fórum,

Usem a tag [code] e [/code] quando postarem Códigos Java e ou exemplos de XMLs.
Evitem tópicos duplicados.
Tópico solucionado? Edite o primeiro post e coloque [RESOLVIDO] no final do título.
Evitem reviver tópicos antigos.

O tópico resolveu seu problema? Seja gentil, comente e ou agradeça quem contribuiu com a solução.

Obrigado!

[WWW] [MSN]
JunniorR

JavaC Membro

Membro desde: 30/06/2015 09:40:20
Mensagens: 17
Offline

Maciel, bom dia, eu implementei as seguintes configurações pra proxy, antes da chamada de consulta, porém funcionou apenas para o estado de Minas e São Paulo, os demais estados ainda não consigo acessar;

System.getProperties().put("proxySet", "true");
System.getProperties().put("http.proxyHost", "lnx237in.sjk.emb");
System.getProperties().put("http.proxyPort", "9090");
System.setProperty("http.proxyUser", "***********");
System.setProperty("http.proxyPassword", "**********");




macielgoncalves wrote:JunniorR,

Você está utilizando algum Proxy para conexão?
macielgoncalves

Administrador
[Avatar]

Membro desde: 06/03/2011 14:49:25
Mensagens: 1234
Localização: Tubarão - SC
Offline

Junior,

Certamente o problema é o proxy, já tentou usar sem o proxy? É possível liberar os endereços da Sefaz para não passar pelo seu proxy, na sua rede?


Maciel Gonçalves
Administrador (JavaC - Java Community)
Seguir no Twitter @macielgoncalves



Projeto NF-e, CT-e, CC-e? Comece Por Aqui!

Quer saber mais sobre NF-e? Acesse www.MACIELGONCALVES.com.br

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original." Albert Einstein
"Seja liberal naquilo que você aceita, e conservador naquilo que você propaga". Jon Postel.
"A coisa mais indispensável a um homem é reconhecer o uso que deve fazer do seu próprio conhecimento". Platão


Emissão de Documentos Fiscais para Desenvolvedores Java


Membros do fórum,

Usem a tag [code] e [/code] quando postarem Códigos Java e ou exemplos de XMLs.
Evitem tópicos duplicados.
Tópico solucionado? Edite o primeiro post e coloque [RESOLVIDO] no final do título.
Evitem reviver tópicos antigos.

O tópico resolveu seu problema? Seja gentil, comente e ou agradeça quem contribuiu com a solução.

Obrigado!

[WWW] [MSN]
JunniorR

JavaC Membro

Membro desde: 30/06/2015 09:40:20
Mensagens: 17
Offline

macielgoncalves wrote:Junior,

Certamente o problema é o proxy, já tentou usar sem o proxy? É possível liberar os endereços da Sefaz para não passar pelo seu proxy, na sua rede?



Maciel, bom dia, realmente, era problema de proxy, muito obrigado pela ajuda, fico extremamente grato,

Att.,

Esta mensagem foi editada 1 vez. Última atualização foi em 23/07/2015 11:19:56

 
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Ir para:   
Powered by JForum 2.1.9 © JForum Team