Certificado A3 - NFE

Voce deve cria-lo e adicionar aquelas duas linhas do exemplo acima.

Olá galera!
Procurei aqui no forum alguém com problema semelhantes, porém não encontrei nada parecido… hehe
Então como se trata de certificado A3 para NFe resolvi postar aqui um problema que tenho.

Seguinte… para A1 tudo ok.
Para A3 NFe tudo ok também.
Porém para A3 e-CNPJ não estou conseguindo assinar a conexão com os webservices. Tive um problema semelhante com o A1 e-CNPJ, porém resolvi adicionando ao certificado pfx a cadeia de certificados pertencentes a ele.
Creio que esse seja meu problema com o A3 e-CNPJ.
Só que… como faria para adicionar essa cadeia de certificados a ele?

Vou explicar como faço a comunicação, talvez seja até outro erro:
Abaixo segue o código para testar o status (que funciona para A1 e A3 NFe e o A1 e-CNPJ)
Ah, um detalhe já… testei pelo browser e funciona acessando o webservice com o A3 e-CNPJ, então o certificado é válido.
E outro detalhe também importante, eu consigo assinar uma NFe e validar sua assinatura.
O que é problema é apenas a assinatura da conexão com o webservice.

Vejam se está correta a idéia:

        (...)
	String nfeCabecMsg = cab.getCabecalho();
	String nfeDadosMsg = Comandos.getConteudoArquivo(Main.parametros.getArquivosXML() + "temp.xml");
		
        System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
        
        if (Main.parametros.getTipoCertificado() == ParametrosXML.A1) {
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());  
            
            System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");  
            System.setProperty("javax.net.ssl.keyStore",Main.parametros.getCertificadoCliente());  
            System.setProperty("javax.net.ssl.keyStorePassword", Main.parametros.getSenhaCliente());	
        } else {
        	Provider p = new sun.security.pkcs11.SunPKCS11(Main.parametros.getTokenCFG());
        	Security.addProvider(p);
        	
        	System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
        	System.setProperty("javax.net.ssl.keyStore","NONE");
        	System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SmartCard");
        	System.setProperty("javax.net.ssl.keyStorePassword", Main.parametros.getSenhaCliente());
        }  
  
        System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
        System.setProperty("javax.net.ssl.trustStore", Main.parametros.getCertificadoServidor());
        System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
		
        NfeStatusServico service = new NfeStatusServicoLocator();  
        try {  
            NfeStatusServicoSoap nfeStatus = service.getNfeStatusServicoSoap();
            
            String resultado = nfeStatus.nfeStatusServicoNF(nfeCabecMsg, nfeDadosMsg); //Aqui ocorre o erro 403!

        } catch (Throwable e1) {  
        		if (Main.parametros.getDebug()) {
        			e1.printStackTrace();
        		}
        }

Ah. importante:
O token.cfg contém:
name = SmartCard
library = c:/windows/system32/aetpkss1.dll

O erro que ocorre é o Forbidden, o padrão dizendo que entrei sem certificado no site.
Alguém tem alguma luz? x}
[]'s

[quote=xsplyter]Olá galera!
Procurei aqui no forum alguém com problema semelhantes, porém não encontrei nada parecido… hehe
Então como se trata de certificado A3 para NFe resolvi postar aqui um problema que tenho.



O erro que ocorre é o Forbidden, o padrão dizendo que entrei sem certificado no site.
Alguém tem alguma luz? x}
[]'s[/quote]

Sim eu tive este problema, enquanto estava emitidindo pelo fisco estadual(Rondonia) estava tudo ok, porem como é de conhecimento geral, Rondonia nao aguentou o arroxo e agora esta trabalhando no SEFAZ VIRTAL RS - SVRS, e foi ai que um certificado A3 token do SERASA de um cliente nosso parou de funcionar, dando exatamente o forbidden na assinatura da conexao.

Resultado: não consegui resolver, adicionei tudo quanto é tipo de cadeia de certificado no trust do JKS mas sem sucesso.
Status atual: pra nossa sorte o cliente é muito amigo nosso, o cara tava sem emitir entao foi la no SERASA e comprou um A1 novinho, o token ainda esta la em casa, mas nao tive tempo de tentar resolver o problema!

hummm…
O mais hilário é que consigo acessar pelo internet explorer o mesmo endereço que tento acessar pelo java, porém pelo internet explorer acessa, e pelo java Forbidden.
Também tentei colocar no jks N certificados… que vieram junto com o CD e mais os que eu já tinha.
Também não deu certo!

A forma que vc usou para acessar o webservice está parecida com a minha?
Teve algum parâmetro a mais ou a menos?
[]'s

[quote=xsplyter]A forma que vc usou para acessar o webservice está parecida com a minha?
Teve algum parâmetro a mais ou a menos?
[]'s[/quote]

Sim a maneira é esta mesma, acho que nao tem nada a mais, estou sem o codigo agora.

Rapaz eu coloquei cadeia de certificado até dentro do token no gerenciador dele. La tem a opcao de importar certificados, ainda tenho minhas duvidas se nao é isto.

Sim o mais estranho é ele passar pelo IE/Firefox normalmente.

Tentei importar alguns certificados que achei coerentes, porém também não deu certo!
Que certificados vc importou?

[quote=xsplyter]Tentei importar alguns certificados que achei coerentes, porém também não deu certo!
Que certificados vc importou?[/quote]

Aquelas cadeias pb7 alguma coisa que tem no site da receita e no site do SVRS. Alem disto entrei diretamente no site do webservice e exportei pelo navegador no formato DER e tals, mesmo assim nao funfou, pode ser que passei pela resolucao e nao consegui, isto acontece muito quando vc esta de cabeça quente e tentando de varias maneiras diferentes.

Salve galera!
Seguinte… depois de tentar algumas coisas e falando com o pessoal da Certisign consegui resolver!

O que fiz foi adicionar esta hierarquia:
http://www.certisign.com.br/suporte/utilitarios-criptograficos/hierarquias-de-certificacao/icp-brasil/e-cnpj

Os certificados que estão na opção 2!
[]'s

[quote=xsplyter]Salve galera!
Seguinte… depois de tentar algumas coisas e falando com o pessoal da Certisign consegui resolver!

O que fiz foi adicionar esta hierarquia:
http://www.certisign.com.br/suporte/utilitarios-criptograficos/hierarquias-de-certificacao/icp-brasil/e-cnpj

Os certificados que estão na opção 2!
[]'s[/quote]

Adicionar onde xsplyter? No KeyStore.jks???

No próprio cartão ou token do certificado.

Usa aquele programa SafeSign, na opção de importar certificados.

[]'s

Pessoal, estou precisando achar algum identificador (serial) do cartão A3, porém a API Provider não me dá esse tipo de informação, apesar de ter conseguido “enxergá-la” via debug, me parece que não existem métodos públicos que permitam visualizar essa informação.

Estou precisando identificar o cartão, antes mesmo do usuário ou sistema (automáticamente) inserir esse PIN, pois após N tentativas o cartão é bloqueado.

Alguém aí conhece alguma API que me forneça essa informação ?

PS: Já contornamos a situação, porém me seria extremamente útil conseguir isso, pra automatizar o processo.

Abraços.

Edson.

hey fredferrao

Você conseguiu algo com seu token?
Eu estou com um problema igual ao que tive para o A3.

Porém consigo assinar a nota normalmente, e na hora que tento acessar um webservice qualquer dá erro de autenticação.
(para o cartão A3 funciona TUDO)
O fato de assinar a nota já elimina boa parte das possibilidades de erro, como provedor usado, senha errada, entre outros.

Pelo sistema do governo funciona normalmente, pois eles acessam os certificados do repositório do windows.
Além disso, no caso do token não foi necessário adicionar cadeias de certificados adicionais.

Alguém passou por esse problema também?

[]'s

Estou com o seguinte erro:

PKCS11 not found

token.cfg

name = SafeSign
library =  C:/WINDOWS/system32/aetpkss1.dll 

minha classe:


Provider p = new sun.security.pkcs11.SunPKCS11("token.cfg");
Security.addProvider(p);
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, senha.toCharArray());
          

O certificado que estou utilizando é um e-Cnpj (cartão)

Tentei seguir a dica do xsplyter e o erro é o mesmo.

Help me please!!!

Alterei o arquivo de configuração para usar outra dll

name = SafeSign
library =  C:/WINDOWS/system32/opensc-pkcs11.dll 

A exception “PKCS11 not found” continua, mas agora gera a seguinte saída no console:

[b]
card-starcos.c:451:: returnning whith: invalid arguments
card.c:713:: returnning whith: invalid arguments

[/b]

A diferença é que agora com essa nova dll a leitora de cartão pisca o led quando rodo minha classe, mas o PKCS11 not found continua

galera… minha dúvida é mais em relação as ferramentas no Eclipse… o plugin do Axis2 mais especificamente.

tenho em mãos o cartão A3 e a leitora… já consegui criar e testar com sucesso minha aplicação java que assina
os xmls usando o certificado no cartão…

mas o meu problema é com esse plugin no eclipse:

o que ele faz é se conectar ao Web Service pegando o WSDL e montando toda a estrutura de classes em java pra acessa-lo e consumi-lo…

só que não estou achando a configuração do eclipse onde eu importo o certificado A3, aí o plugin não consegue se conectar ao
WSDL da receita, com certeza porque precisa do certificado…

alguma luz???

valeu, abraço

Bom dia pessoal,

Eu tenho um certificado A3, em dispositivo USB.
Mas nem sei por onde começar.

Utilizando certificados A1, (*.pfx) esta tudo blz, funcionando perfeitamente.

Mas agora eu preciso desenvolver assinatura utilizando o A3.
Preciso criar um arquivo token.cfg ? e configurar alguma coisa nele ?

boa noite prezados,

O certificado A3 para web como pode ser desenvolvido.

Exemplo tenho o servidor e o client side, no client que ele pluga o token na sua máquina ai leio o certificado, teria alguma opção de ler esse token no cliente e enviar as informações do certificado para o servidor?

Preciso disso pois será o servidor responsável por conectar com a prefeitura.

Valeu galera.

Não sei se vai ajudar, mas para assinatura na lógica só precisamos dos dados do certificado PublicKey e PrivateKey isso da pra extrair com outros programas daí cria um arquivo criptografado a sua maneira e daí ultiliza os dados quando bem entender.

Eu to envolvido bastante nessa coisa de NFe já valido, e assino só não consigo enviar a merda da nota. kkkk

Abraço

ps: se vc souber como enviar a nota em java somente o envio eu ia agradecer

espero ajudar

Tiago Neves

exemplo rápido e simples de consumação do webservice nfe.
Setei nfeCabecMsg e nfeDadosMsg apenas para testes.
Na linha System.out.println("Retorno webservice: " + call.invoke(param)); vc receberá o retorno da receita.

O exemplo abaixo apenas consulta o status do serviço p/ o estado de sp:

[code]
public class ClienteWebService {
public static void main(String[] args) throws Exception {

	System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
	Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

	System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
	System.setProperty("javax.net.ssl.keyStore","caminhoCert!");
	System.setProperty("javax.net.ssl.keyStorePassword", "senhaCert");

	System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	System.setProperty("javax.net.ssl.trustStore","caminhoKeystore");

	// Endereço, local onde encontra-se o Web Service
	String local = "https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico.asmx";

	// Criando e configurando o serviço
	Call call = (Call) new Service().createCall();

	// Configurando o endereço.
	call.setTargetEndpointAddress(local);

	// Marcando o método a ser chamado.
	call.setOperationName("consultaServ");

	String nfeCabecMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.02\"><versaoDados>1.07</versaoDados></cabecMsg>";
	String nfeDadosMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><consStatServ versao=\"1.07\" xmlns=\"http://www.portalfiscal.inf.br/nfe\"><tpAmb>1</tpAmb><cUF>42</cUF><xServ>STATUS</xServ></consStatServ>";

	// Set Parâmetros de envio
	Object[] param = new Object[] { nfeCabecMsg, nfeDadosMsg };

	try {
		// Retorno
		System.out.println("Retorno webservice: " + call.invoke(param));
	} catch (RemoteException e) {
		// e.printStackTrace();
		System.out.println("Problemas ao conectar com webservice " + local
				+ "\n" + e.getMessage());
	}
}

}[/code]

espero ter ajudado ^^

será que vc ou alguem consegue me ajudar com este problema aqui: http://www.guj.com.br/posts/list/206895.java#1057324 ???