Felipe eu muda tambem para https mas deu erro de A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS.
Obrigado.
Eu ainda estou aguardando a SEFAZ de PE me responder se fui autorizado ou não, enquanto isso continuo com erro.
O que acho estranho é que fiz uma comunicação teste, para validar uma NFe e obtive sucesso.
Se eu acesso o endereço via HTTPS via browser, usando o mesmo certificado para autenticação tbm obtenho sucesso.
Porém,
Na comunicação via webservice, acontece esse erro de certificado.
você exportou e adicionou no seu keystore o certificado da gnre?
Sim, segui o procedimento do seguinte link: http://www.sefaz.pe.gov.br/sefaz2/flexpub/versao1/filesdirectory/systems6719.pdf
Será que consigo de alguma outra maneira de validar se meu certificado está coreto ? eu apenas converti o PFX para PEM…
cara… na verdade nem sabia daquele tutorial… eu uso uma classe que faz esse procedimento automático…
mas se vc seguir isto (que eu usava para a nfe), acho que vai rolar tb…:
-Baixar os arquivos .WSDL em https://www.gnre.pe.gov.br/gnreWS/services/GnreLoteRecepcao?wsdl
e no mesmo link instalar o certificado, clicando no cadeado, exibir certificado e instalar.
- depois de instalar vai no Internet Explorer -> Ferramentas -> Opções da internet -> (Aba) Conteúdo -> (botão) certificados -> (Aba) outras pessoas; a chave instalada deve estar ai.
-selecione ela e clique no botão Exportar;
-na tela da exportação marque o RadioButton X.509 codificado na base 64 (*.cer) informe o arquivo com extensão .cer;
-Importar esta chave pública que vc exportou no IE para um keystore do Java com a ferramenta Keytool:
-via DOS va até a pasta bin da sua JRE e execute o seguinte comando: keytool -import -alias nfe -keystore <caminho_para_um_keystore Ex: c:\certificados\nfe.keystore> -file <caminho_completo_para_o_cert_exportado_do_IE ( arquivo .cer)>, esse comando irá gerar um arquivo que no exemplo é c:\certificados\nfe.keystore
-importar todos os .cer(exportado do ie) para o keystore
tenta ai… acho que vai funcionar…
[quote=thiago_souza]
Será que consigo de alguma outra maneira de validar se meu certificado está coreto ? eu apenas converti o PFX para PEM…[/quote]
e o seu certificado (o mesmo que da nfe), continua pfx… pelo meno eu fiz assim…
Olá
desculpa a demora para responder, então os procedimentos para instalar os certificados da Sefaz no meu computador eu já havia feito,
Estou tentando fazer a comunicação por cURL, veja abaixo o exemplo
C:\Users\Thiago\Downloads\curl-7.23.1-win64-ssl-sspi>curl -3 https://www.gnre.pe.gov.br/gnreWS/services/GnreConfigUF?wsdl --cert cliente.pem --key chave.pem --insecure
Resposta:
curl: (35) error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate
Porém se eu altero o endereço para algum da SEFAZ por exemplo:
C:\Users\Thiago\Downloads\curl-7.23.1-win64-ssl-sspi>curl -3 https://nfe.fazenda.mg.gov.br/nfe2/services/NfeStatusServico2 --cert cliente.pem --key chave.pem --insecure
Resposta:<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope”>soap:Bodysoap:Faultsoap:Codesoap:Valuesoap:Receiver</soap:Value></soap:Code>soap:Reason<soap:Text xml:lang=“en”>No such operation: (HTTP GET PATH_INFO: /nfe2/NfeStatusServico2)</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
Apesar de apresentar erro eu obtive sucesso na requisição, o erro aqui da NFe é devido ao XML não enviado como requisição
Será que existe alguma outra maneira para eu testar meu certificado ? Ou a conexão ?
Bad Certificate.
Bom dia pessoal,
depois de muito tempo, consegui resolver.
O problema é que minha cadeia de certificado não está autorizado na SEFAZ, para solucionar temos 2 opções:
- Eles adicionarem toda a cadeia de certificado no servidor deles (já fiz essa solicitação há 2 semanas)
- Você na requisição cURL enviar toda a cadeia de certificados junto, através dos comandos
Obrigado a todos que me ajudaram!
[quote=mbrocco]Olá pessoal, estou desenvolvendo essa integração da GNRE também Online e está me ocorrendo o seguinte erro :
System.Web.Services.Protocols.SoapException: java.rmi.RemoteException: Erro ao gerar XML de resposta
em System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
Se alguém puder me ajudar fico agradecido.[/quote]
Cara você conseguiu resolver esse caso?
Obrigado.
[quote=mbrocco]Olá pessoal, estou desenvolvendo essa integração da GNRE também Online e está me ocorrendo o seguinte erro :
System.Web.Services.Protocols.SoapException: java.rmi.RemoteException: Erro ao gerar XML de resposta
em System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
Se alguém puder me ajudar fico agradecido.[/quote]
Cara você conseguiu resolver esse caso?
Obrigado.
Olá pessoal…
Preciso fazer essa integração via webservice a partir do txt gerado pelo emissor nfe gratuito, alguém teria disponibilidade para desenvolver?
obrigado…
Bom Dia senhores…
Estou querendo implantar o uso de Web Services do GNRE aqui na empresa, mas não conheço este método.
Alguem poderia me dar o caminho das pedras ?!?!
O que eu preciso ter / criar / implantar aqui na empresa ?
Grato e aguardo retorno…
Augusto.
gutosoft@hotmail.com
Bom dia.
Alguem pode me dar uma dica como resolvo a mensagem abaixo. Pesquisei e não consegui resolver.
No caso da GNRE precisa desta informação? e como Ficaria? //arquivo que contém a cadeia de certificados do serviço a ser consumido
// socketFactory.setFileCacerts(this.getClass().getResource(“C:/Certificados/nfe-cacerts”)); //mudei este trecho para a classe abaixo.
br.gov.pe.gnre.www.webservice.gnreconfiguf.GnreConfigUFStub$GnreDadosMsg@101f935
<ns1:TConfigUf xmlns:ns1=“http://www.gnre.pe.gov.br” xmlns=“http://www.gnre.pe.gov.br”>ns1:ambiente1</ns1:ambiente>ns1:ufMG</ns1:uf>ns1:situacaoConsultans1:codigo198</ns1:codigo>ns1:descricaoEste serviço deve usar uma conexão HTTPS Segura! Tente novamente utilizando seu Certificado Digital.</ns1:descricao></ns1:situacaoConsulta></ns1:TConfigUf>
import java.io.FileInputStream;
import java.net.URL;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.util.Map;
import java.security.cert.X509Certificate;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.commons.httpclient.protocol.Protocol;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import br.gov.pe.gnre.www.webservice.gnreconfiguf.GnreConfigUFStub;
public class TestGnreConfigUF_01 {
/**
* @param args
*/
public static void main(String[] args) {
try{
URL url = new URL("http://www.gnre.pe.gov.br/gnreWS/services/GnreConfigUF");
SelecionaCertificado selecionaCertificado = new SelecionaCertificado(null, true);
selecionaCertificado.setVisible(true);
Map map = selecionaCertificado.getDadosCertificado();
String caminhoCertificado = (String) map.get("caminhoCertificado");
char[] senha = (char[]) map.get("senha");
/**
* Informações do Certificado Digital.
*/
//busca os dados do certificado digital
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(caminhoCertificado), senha);
String alias = ks.aliases().nextElement();
X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
PrivateKey privatekey = (PrivateKey) ks.getKey(alias, senha);
SocketFactoryDinamico socketFactory = new SocketFactoryDinamico(certificate, privatekey);
//arquivo que contém a cadeia de certificados do serviço a ser consumido
// socketFactory.setFileCacerts(this.getClass().getResource("C:/Certificados/nfe-cacerts")); //mudei este trecho para a classe abaixo.
// getClass().getResourceAsStream(): procura o resource no mesmo diretorio do .class.
//getClass().getClassLoader().getResourceAsStream(): procura no CLASSPATH.
//define o protocolo a ser utilizado na conexão
Protocol protocol = new Protocol("https", socketFactory, 443);
Protocol.registerProtocol("https", protocol);
StringBuilder xmls = new StringBuilder();
xmls.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<TConsultaConfigUf xmlns=\"http://www.gnre.pe.gov.br\">")
.append("<ambiente>1</ambiente><uf>MG</uf><receita courier=\"N\">100048</receita>")
.append("</TConsultaConfigUf></gnreDadosMsg");
String xml = xmls.toString();
OMElement ome = AXIOMUtil.stringToOM(xml);
GnreConfigUFStub.GnreDadosMsg dadosMsg = new GnreConfigUFStub.GnreDadosMsg();
dadosMsg.setExtraElement(ome);
GnreConfigUFStub.GnreCabecMsg cabecMsg = new GnreConfigUFStub.GnreCabecMsg();
cabecMsg.setVersaoDados("1.00");
GnreConfigUFStub stub = new GnreConfigUFStub(url.toString());
System.out.println(dadosMsg);
stub.consultar(dadosMsg, cabecMsg);
//NfeStatusServico2Stub.NfeStatusServicoNF2Result result = stub.nfeStatusServicoNF2(dadosMsg, nfeCabecMsgE);
GnreConfigUFStub.GnreRespostaMsg result = stub.consultar(dadosMsg, cabecMsg);
ByteArrayInputStream in = new ByteArrayInputStream(result.getExtraElement().toString().getBytes());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
// Document doc = dbf.newDocumentBuilder().parse(in);
System.out.println(result.getExtraElement().toString());
} catch (Exception e) {
error(e.toString());
}
}
private static void error(String log) {
System.out.println("ERROR: " + log);
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.SocketFactory;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509KeyManager;
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
public class SocketFactoryDinamico implements ProtocolSocketFactory {
private SSLContext ssl = null;
private X509Certificate certificate;
private PrivateKey privateKey;
private InputStream fileCacerts;
public SocketFactoryDinamico(X509Certificate certificate,
PrivateKey privateKey) {
this.certificate = certificate;
this.privateKey = privateKey;
}
private SSLContext createSSLContext() {
try {
KeyManager[] keyManagers = createKeyManagers();
TrustManager[] trustManagers = createTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
return sslContext;
} catch (KeyManagementException e) {
error(e.toString());
} catch (KeyStoreException e) {
error(e.toString());
} catch (NoSuchAlgorithmException e) {
error(e.toString());
} catch (CertificateException e) {
error(e.toString());
} catch (IOException e) {
error(e.toString());
}
return null;
}
private SSLContext getSSLContext() {
if (ssl == null) {
ssl = createSSLContext();
}
return ssl;
}
public Socket createSocket(String host, int port, InetAddress localAddress,
int localPort, HttpConnectionParams params) throws IOException,
UnknownHostException, ConnectTimeoutException {
if (params == null) {
throw new IllegalArgumentException("Parameters may not be null");
}
int timeout = params.getConnectionTimeout();
SocketFactory socketfactory = getSSLContext().getSocketFactory();
if (timeout == 0) {
return socketfactory.createSocket(host, port, localAddress,
localPort);
}
Socket socket = socketfactory.createSocket();
SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
SocketAddress remoteaddr = new InetSocketAddress(host, port);
socket.bind(localaddr);
try {
socket.connect(remoteaddr, timeout);
} catch (Exception e) {
error(e.toString());
throw new ConnectTimeoutException("Poss�vel timeout de conex�o", e);
}
return socket;
}
public Socket createSocket(String host, int port, InetAddress clientHost,
int clientPort) throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port,
clientHost, clientPort);
}
public Socket createSocket(String host, int port) throws IOException,
UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(host, port);
}
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(socket, host,
port, autoClose);
}
public KeyManager[] createKeyManagers() {
HSKeyManager keyManager = new HSKeyManager(certificate, privateKey);
return new KeyManager[] { keyManager };
}
public TrustManager[] createTrustManagers() throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException {
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(fileCacerts, "changeit".toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
return trustManagerFactory.getTrustManagers();
}
class HSKeyManager implements X509KeyManager {
private X509Certificate certificate;
private PrivateKey privateKey;
public HSKeyManager(X509Certificate certificate, PrivateKey privateKey) {
this.certificate = certificate;
this.privateKey = privateKey;
}
public String chooseClientAlias(String[] arg0, Principal[] arg1,
Socket arg2) {
return certificate.getIssuerDN().getName();
}
public String chooseServerAlias(String arg0, Principal[] arg1,
Socket arg2) {
return null;
}
public X509Certificate[] getCertificateChain(String arg0) {
return new X509Certificate[] { certificate };
}
public String[] getClientAliases(String arg0, Principal[] arg1) {
return new String[] { certificate.getIssuerDN().getName() };
}
public PrivateKey getPrivateKey(String arg0) {
return privateKey;
}
public String[] getServerAliases(String arg0, Principal[] arg1) {
return null;
}
}
public void setFileCacerts(InputStream fileCacerts) {
this.fileCacerts = fileCacerts;
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:/Certificados/nfe-cacerts");
}
/**
* Log Error.
* @param log
*/
private static void error(String log) {
System.out.println("ERROR: " + log);
}
}
Bom dia.
Dúvida:
Uma nfe tem pode ter vários produtos diferentes , minha tabela não tem nenhum vinculo com a tabela de produtos da gnre.
Como faço esse processo na qual a nfe tem ex: 2 produtos diferentes e o código não e o mesmo da tabela de produtos da gnre?
[quote=moncerra][quote=mbrocco]Olá pessoal, estou desenvolvendo essa integração da GNRE também Online e está me ocorrendo o seguinte erro :
System.Web.Services.Protocols.SoapException: java.rmi.RemoteException: Erro ao gerar XML de resposta
em System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
Se alguém puder me ajudar fico agradecido.[/quote]
Cara você conseguiu resolver esse caso?
Obrigado.[/quote]
Bom dia pessoal.
Ressuscitando a dúvida, queria saber se alguem resolveu esse problema utilizando a consulta de lote da GNRE?
Exception in thread "main" org.apache.axis2.AxisFault: java.rmi.RemoteException: Erro ao gerar XML de resposta
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at br.gov.pe.gnre.www.webservice.gnreresultadolote.GnreResultadoLoteStub.consultar(GnreResultadoLoteStub.java:197)
at br.com.amazonas.gnrepe.teste.GeraXMLConsultaLote.main(GeraXMLConsultaLote.java:68)
Java Result: 1
Agradeço desde já!
Galera alguém sabe sobre a impressão das guias se podemos criar nosso proprio layout, podemos fazer o pagamento da guia e colocar a autenticação bancaria na guia como o Banco do Brasil fazia?
Bom dia Pessoal, sou novo no assunto de SSL Conection, e estou com um problema que não encontro a solução, em vários foruns vi esse erro mas na resposta as pessoas colocam que resolveram só não colocam como…
Bom direto ao assunto o erro é:
Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
Já coloquei toda cadeia de certificados no meu cacerts, do link de homologação e de produção. defini os certificados como confiáveis no meu windows, utilizo Java 1.8.0_51, segui os passos que encontrei em alguns foruns para reativar a conexão SSLv3, mas esse “Certificado do mau” continua a me atrapalhar, alguém passou por isso, como resolveu?
Agradeço a ajuda.
Galera, estou desenvolvendo a integração com o webservice do sefaz para emitir a gnre, porém, quando tenta-se efetuar a conexão recebo “bad_certificate”, alguém tem noção do que pode ser?
Obs: Meu certificado está na trust store, gerei os cacerts corretamente conforme outros tópicos lidos, e assim por diante, porém, não consigo fazer a comunicação
Agradeço desde já
Boa tarde Thiago,
O meu é certisign você sabe me dizer como descubro a cadeia de certificado dele.