Certificado Digital - NFe


#1

Boa noite,
Estou preparando o AdempiereLBR para a emissão da NF-e (SP).
Estou com o AdempiereLBR versão 082016.

Primeiro passo, eu anexei o arquivo .pfx no processo Digital Certificate.
Em seguida, no Certificate Type, coloquei PKCS#12.
Depois Nome, Descrição.
Pseudonimo(Alias) e senha.

Cliquei em Validar, mas nada acontece.

Alguem sabe, o que esta acontecendo?
Preciso criar um Certificado Digital para JKS?

Estou usando um manual de 2009, tem algo mais recente?

Desde ja agradeço,

Um abraço,

Raimundo


#2

Olá Raimundo,

Verifique se você tem acesso para executar o processo de Validação do Certificado Digital. Para verificar entre na janela Papel Função, escolha o seu perfil e depois veja aba Acesso a Processos se consta o processo LBR_DigitalCertificate_Validate.

Se o perfil que você está usando para acessar estiver com a flag manual desmarcada, você pode executar o processo Atualização do Acesso do Papel (Função) que o sistema irá criar os acessos necessários.

Att.


#3

Boa tarde, Ricardo,
Grato pela ajuda.
Inclui o LBR_DigitalCertificate_Validate no Acesso a Processos.

Cliquei em Validar e deu a seguinte mensagem de erro:
Erro: -Erro ao validar o certificado. Este certificado não funcionará com a NF-e. Verifique o log do sistema.
Tentei tanto para Produção, como Homologação.

Já procurei esse log no Adempiere, no banco e em ferramentas, preferencias, error, mas não achei nada.

Que log ele esta se referindo?

Quando vou testar o ProcStatusServicos, aparece Certificate Type is Null.

Grato,
Raimundo


#4

Olá Raimundo,

Para acessar o log clique no menu Ferramentas > Preferência > Erros.

Faça um teste deixando o pseudônimo em branco e preenchendo somente a senha para ver se o certificado é validado.

Att.


#5

Ola Ricardo,
Fiz o teste, removendo o pseudonimo, mas não valida, continua a mesma mensagem.
Tambem não aparece nada no log.

Fiz alguns prints da tela, como posso te mandar?

Um abraço
Raimundo


#6

Vc pode anexar aqui mesmo, ou subir em algum serviço de imagem como o imgur.com/ por exemplo.


#7

Ricardo,
Fui verificar o status e apareceu a seguinte mensagem:

Testa o status do serviço da NF-e
** Erro: - Falha na verificação de Status - java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.DefaultSSLContextImpl)

Raimundo


#8


#9

Raimundo, não conheço esse erro. Vou descrever qual seria o procedimento correto neste caso:

Você precisa de um certificado A1 (PKCS#12) ou A3 (PKCS#11). Se for cartão/token A3 você precisa instalar o programa leitor (normalmente SafeSign), se for arquivo PFX, verifique a integridade dele pelo seu sistema operacional, normalmente dando um duplo-clique o SO importará o certificado para o sistema. Digite a senha do certificado ao fazer a importação.

Sabendo que o certificado cartão ou arquivo está OK vamos para o Adempiere.

  • Acesse a janela Certificado Digital, crie um novo registro
  • Preencha um nome, o Tipo de Certificado (PKCS#11=A3 ou PKCS#12=A1) e preencha também o campo senha.
  • Salve o registro e clique no botão de anexo (clips)
  • Adicione o arquivo PFX
  • Clique no botão Validar Certificado, verifique o resultado no rodapé da janela

Se ainda assim ocorrer algum erro, tente pegar o log e postar aqui (Ferramentas > Preferência > Erros > Salvar em arquivo)

Atenciosamente,


#10

Avançando!!!

Consegui resolver o problema do Certificado PFX, agora está validando.
Acabei achando um tutorial “Como o Java trabalha com Certificados Digitais”, no site http://devbrasil.net/group/nfce-em-java/page/como-o-java-trabalha-com-certificados-digitais.
A orientação é importar o certificado PFX e depois exportar a cadeia, gerando outro certificado PFX. Acabou dando certo. O certificado foi validado.

Entretanto estou quebrando a cabeça com o JKS.
Importei do site da fazenda.sp o arquivo Certificados_NFe_SefazSP.
Nesse arquivo constam dois certificados: CertificadosHomologacaoNFe2013.p7b e CertificadosProducaoNFe2013.p7b.
Fiz a instalação do CertificadosHomologacaoNFe2013.p7b e depois a exportacao para .CER.
Em seguida atraves do keytool gerei o arquivo JKS.
Instalei o jks, mas ao validar aparece a seguinte mensagem: Não foi encontrado um certificado válido.
O que eu pude verificar, é que o certificado de homologacao.nfe.fazenda.sp.gov.br está vencido.

Como eu consigo o certificado de homologação atualizado?

Grato,


#11

Olá Raimundo,

Você pode ignorar o passo da configuração do JKS do webservices se você usar o Truststore.

Download: [attachment=0]nfe-trust.jks.zip[/attachment]

Basta adicionar como anexo na janela de Certificado Digital e escolher o tipo Truststore ICP.

Att.


#12

Ola Ricardo, bom dia,
Grato pela ajuda.

Anexei o arquivo jks na janela do Certificado Digital.
Tipo: ICP Trutstore
Alias: deixei em branco
Senha: deixei em branco
Validade desde: coloquei data de hoje

Salvei e tentei validar.
Mensagem: Não foi encontrado um certificado válido.
Não ha mensagem no log do sistema.

  1. É necessário validar?
    Quando clico em validar, aparece uma mensagem, que pelo que eu entendi, a validação é somente para PKCS 11 ou PKCS 12.
  2. Não é necessário Alias e senha?
  3. e a validade desde?

Do jeito que esta, ou seja, apos anexar ao Certificado Digital, quanto tento executar ProcStatusServiços, surge a seguinte mensagem:
Access denied(java.lang.RuntimePermissionAccessClassInPackage.sun.security.util)

Apesar de estar com o Adempiere atualizado (201608), estou com o jdk1.6, isso pode prejudicar algum processo?

Grato, um abraço,

Raimundo


#13

Olá Raimundo,

Fiz um teste aqui e realmente estava acontecendo esse erro na validação. Mesmo com o erro na validação, o processo de Consultar o Status do Serviço deveria funcionar.

Na versão 201609 este erro foi corrigido, o sistema não vai apresentar erro ao testar o truststore.

Abs!


#14

Olá Ricardo, boa noite,
Grato pela ajuda.

Fiz a atualização do AdempiereLBR para a versão 201609.
Agora a validação do truststore passou sem problema.

Entretanto o Status do Serviço continua apresentando a seguinte mensagem: Access denied(java.lang.RuntimePermissionAccessClassInPackage.sun.security.util

Acredito que o erro esteja relacionado à instalação do JDK. O ADEMPIERE_HOME aponta para JDK1.6.0_21 e a JVM aponta para uma OpenJDK.
Vou verificar melhor isso. De qualquer forma segue abaixo o log do sistema.

Mais uma vez obrigado,

Raimundo


===========> ProcStatusServico.process: access denied (java.lang.RuntimePermission accessClassInPackage.sun.security.util) [12]
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.security.util)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393)
at java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at net.sourceforge.jnlp.runtime.JNLPSecurityManager.checkPermission(JNLPSecurityManager.java:250)
at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1529)
at java.lang.ClassLoader$1.run(ClassLoader.java:345)
at java.security.AccessController.doPrivileged(Native Method)
at java.lang.ClassLoader.checkPackageAccess(ClassLoader.java:343)
at com.sun.crypto.provider.PBEParameters.engineInit(PBEParameters.java:76)
at java.security.AlgorithmParameters.init(AlgorithmParameters.java:277)
at sun.security.x509.AlgorithmId.decodeParams(AlgorithmId.java:139)
at sun.security.x509.AlgorithmId.(AlgorithmId.java:114)
at sun.security.x509.AlgorithmId.parse(AlgorithmId.java:381)
at sun.security.pkcs.EncryptedPrivateKeyInfo.(EncryptedPrivateKeyInfo.java:80)
at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:247)
at java.security.KeyStore.getKey(KeyStore.java:779)
at org.adempierelbr.model.MLBRDigitalCertificate.setTrustStoreDynamic(MLBRDigitalCertificate.java:179)
at org.adempierelbr.model.MLBRDigitalCertificate.setCertificate(MLBRDigitalCertificate.java:103)
at org.adempierelbr.process.ProcStatusServico.doIt(ProcStatusServico.java:129)
at org.compiere.process.SvrProcess.process(SvrProcess.java:147)
at org.compiere.process.SvrProcess.startProcess(SvrProcess.java:105)

Hospedeiro = 192.168.1.101 : 1099 (2010-06-14)

Banco de Dados = Marte : 5432 / Adempiere
Esquema = adempiere
Usuário/Contato = dcruzAdmin
Papel (Função) = DCruz Admin
Empresa = DCruz
Organização = DCruz Comercial Hospitalar Ltda-EPP Filial Itapevi
Data = 2016-09-21 00:00:00
Impressora =
Fornecedor de Implementação = ${ADEMPIERE_VENDOR}
Versão de Implementação = ${ADEMPIERE_VERSION} 20160921-1827
AdempiereHome = /Adempiere
AdempiereProperties = 192.168.1.101:8188/admin/adempiereHome/
Language=[Portuguese (BR),Locale=pt_BR,AD_Language=pt_BR,DatePattern=DD/MM/YYYY,DecimalPoint=false]
MClient[2000000-DCruz]
Documentos Multi-Idiomas = false
BaseLanguage = false/false
OpenJDK Client VM 1.6.0_18
java.io.tmpdir=/tmp
Linux 2.6.32-5-686 unknown
Max Heap = 508M
Allocated Heap = 215M
Free Heap = 56M
Active Threads = 9
=== Environment === 1126464509
ADempiere® Release 3.6.0LTS_2010-06-14 -Smart Suite ERP,CRM and SCM- © 1999-2010 ADempiere®; Implementation: ${ADEMPIERE_VERSION} 20160921-1827 - ${ADEMPIERE_VENDOR}
Marte/192.168.1.101
192.168.1.101{Marte-Adempiere-adempiere} adempiere@jdbc:postgresql://Marte:5432/Adempiere?encoding=UNICODE

DB_PostgreSQL[null]
AppsServerOK=true, DatabaseOK=true

=== Context ===
#AD_Client_ID == 2000000
#AD_Client_Name == DCruz
#AD_Language == pt_BR
#AD_Org_ID == 2000002
#AD_Org_Name == DCruz Comercial Hospitalar Ltda-EPP Filial Itapevi
#AD_PrintColor_ID == 100
#AD_PrintFont_ID == 130
#AD_PrintPaper_ID == 100
#AD_PrintTableFormat_ID == 100
#AD_Role_ID == 2000000
#AD_Role_Name == DCruz Admin
#AD_SearchDefinition_ID == 50000
#AD_Session_ID == 2003402
#AD_User_ID == 2000000
#AD_User_Name == dcruzAdmin
#C_BP_Group_ID == 2000000
#C_ConversionType_ID == 114
#C_Country_ID == 139
#C_PaymentTerm_ID == 2000004
#C_Region_ID == 142
#C_TaxCategory_ID == 2000001
#C_Tax_ID == 2000002
#Date == 2016-09-21 00:00:00
#GL_Category_ID == 2000000
#IsLiberoEnabled == Y
#LBR_ENABLED == Y
#LBR_USE_UNIFIED_BP == N
#M_Locator_ID == 2000003
#M_PriceList_ID == 2000000
#M_Product_Category_ID == 2000002
#SalesRep_ID == 2000000
#ShowAcct == Y
#ShowAdvanced == Y
#ShowTrl == N
#StdPrecision == 2
#User_Level == CO
#User_Org == 0,2000000,2000001,2000002,2000003
#YYYY == Y
$C_AcctSchema_ID == 2000000
$C_Currency_ID == 297
$Element_AC == Y
$Element_BP == Y
$Element_MC == Y
$Element_OO == Y
$Element_PJ == Y
$Element_PR == Y
$Element_SR == Y
$HasAlias == Y
0|WindowName == &Menu
1110|Find_Table_ID == 1100000
AutoCommit == Y
AutoNew == N
P103|Type == S
P143|C_BPartner_ID == 2000000
P143|C_DocTypeTarget_ID == 2000040
P183|TaxAmt == 0
P189|DataType == S
P53004|AD_Org_ID == 0
P53005|Action == C
P53032|AD_Org_ID == 0
P53033|HR_Department_ID == -1
P53034|AD_Org_ID == 0
P53035|AD_Org_ID == 0
P53044|C_DocType_ID == 115
P53046|A_Entry_Type == TRN
P53046|C_DocType_ID == 115
P53047|A_Entry_Type == DIS
P53047|C_DocType_ID == 115
P53051|A_Entry_Type == SPL
P53051|C_DocType_ID == 115
P53051|GL_Category_ID == 108
P53053|A_Entry_Type == DEP
P53053|C_DocType_ID == 115
P53055|A_Entry_Type == NEW
P53055|C_DocType_ID == 115
P|AutoCommit == Y
P|AutoNew == Y
P|C_Country_ID == 139
P|Client == 2000000
P|HR_Department_ID == -1
P|Language == Portuguese (BR)
P|MenuCollapsed == N
P|Organization == 2000000
P|Role == 2000000
P|Warehouse == 2000000
P|WindowTabCollapsible == N
P|WindowTabPlacement == Left
java.naming.provider.url == jnp://192.168.1.101:1099
org.adempiere.security.principal == org.compiere.db.SecurityPrincipal@a98e77
org.compiere.model.DefaultRole == MRole[2000000,DCruz Admin,UserLevel= CO,AD_Client_ID IN(0,2000000),AD_Org_ID IN(0,2000003,2000002,2000001,2000000)]
org.compiere.util.CLogErrorBuffer.errors == [java.util.logging.LogRecord@37c7ee]
org.compiere.util.CLogErrorBuffer.history == [[Ljava.util.logging.LogRecord;@26fb32]
org.compiere.util.CLogErrorBuffer.issueError == true
org.compiere.util.CLogErrorBuffer.logs == [java.util.logging.LogRecord@37c7ee, java.util.logging.LogRecord@13596e0, java.util.logging.LogRecord@1445d28]

=== System ===
adempiereJNLP=http://192.168.1.101:8188/admin
application.home=/usr/lib/jvm/java-6-openjdk/jre
com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
env.class.path=/home/jdk1.6.0_21:/home/jdk1.6.0_21/lib:/home/jdk1.6.0_21/jre/lib:.
file.encoding=UTF-8
file.encoding.pkg=sun.io
file.separator=/
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
java.awt.printerjob=sun.print.PSPrinterJob
java.class.path=/usr/lib/jvm/java-6-openjdk/jre/lib/tools.jar:/usr/lib/jvm/java-6-openjdk/jre/classes
java.class.version=50.0
java.endorsed.dirs=/usr/lib/jvm/java-6-openjdk/jre/lib/endorsed
java.ext.dirs=/usr/lib/jvm/java-6-openjdk/jre/lib/ext:/usr/java/packages/lib/ext
java.home=/usr/lib/jvm/java-6-openjdk/jre
java.io.tmpdir=/tmp
java.library.path=/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/jvm/java-6-openjdk/jre/…/lib/i386:/usr/java/packages/lib/i386:/usr/lib/jni:/lib:/usr/lib
java.runtime.name=OpenJDK Runtime Environment
java.runtime.version=1.6.0_18-b18
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.6
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.6.0_18
java.vm.info=mixed mode, sharing
java.vm.name=OpenJDK Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=14.0-b16
javawebstart.version=javaws-1.6.0_18
javax.accessibility.assistive_technologies=org.GNOME.Accessibility.JavaBridge
jboss.remoting.version=22
line.separator=

os.arch=i386
os.name=Linux
os.version=2.6.32-5-686
path.separator=:
sun.arch.data.model=32
sun.boot.class.path=/usr/lib/jvm/java-6-openjdk/jre/lib/resources.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/jsse.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/jce.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/charsets.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar:/usr/lib/jvm/java-6-openjdk/jre/classes
sun.boot.library.path=/usr/lib/jvm/java-6-openjdk/jre/lib/i386
sun.cpu.endian=little
sun.cpu.isalist=
sun.desktop=gnome
sun.io.unicode.encoding=UnicodeLittle
sun.java.launcher=SUN_STANDARD
sun.jnu.encoding=UTF-8
sun.management.compiler=HotSpot Client Compiler
sun.os.patch.level=unknown
user.country=BR
user.dir=/home/postgres
user.home=/home/postgres
user.language=pt
user.name=postgres
user.timezone=America/Sao_Paulo


#15

Boa tarde,
Alterei a JVM para apontar para o JDK1.6.0_21, mesma do JAVA_HOME.
root@Marte:/home/postgres# java -version
java version “1.6.0_21”
Java™ SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot™ Client VM (build 17.0-b16, mixed mode, sharing)

Mas não adiantou, continua a mensagem Access denied(java.lang.RuntimePermissionAccessClassInPackage.sun.security.util

Alguem tem mais alguma ideia para corrigir isso?

Depois do ProcStatusServiço (uma vez resolvido), quais seriam as proximas etapas para colocar no ar a nf-e do AdempiereLBR?

Grato, pessoal

Raimundo


#16

RESOLVIDO

Testa o status do serviço da NF-e

** Processo completado com sucesso

Ambiente: 2 - Homologation
Versão: SP_NFE_PL_008i2
Estado: 107 - Serviço em Operação
UF: 35
Data/Hora: 29/09/2016 13:44:28
Tempo Médio de Processamento: 1 minuto(s)

Antes de falar da solução, vamos entender o ambiente de instalação do AdempiereLBR.
Eu fiz a instalação do Adempiere na empresa, em Setembro de 2011. Versão 360LTS.
Ele foi instalado em uma maquina virtual Debian 6, com jdk1.6.0_21 e PostgreSQL 8.4
Realizei as atualizações até 201609.
Durante esse período não tive problemas, pois a empresa não usava o Adempiere para rodar a NFe. Ela apenas implantava a nota gerada pelo sistema do governo.
Bom, eu estava emperrado no ProcStatusServico, com o erro de Access Denied. Eu imagina que o problema poderia ser a versão do jdk. Tentei configurar o jdk1.8, porem no momento de executar o RUN_setup.sh, isso não foi permitido, ele esperava o jdk1.6.0.
Bom, o jeito foi comerçar do zero.

  1. Configurei uma maquina virtual com Debian 8.
  2. Instalei o PostgreSQL 9.3
  3. Instalei o JDK1.8.0_91
  4. Instalei o AdempiereLBR(Adempiere360_LTS_Kenos2015.tar.gz)
  5. Fiz um pg_dump -Ft -b Adempiere > AdempiereBackup.tar do Adempiere do PostgreSQL 8.4
  6. Fiz pg_restore -d Adempiere AdempiereBackup.tar no PostgreSQL 9.3

Não sei se havia uma solução mais simples, porém essa funcionou.
Resta acompanhar mais um pouco, para verificar se não houve problema com o pg_restore.

Raimundi


#17

Que boa noticia Raimundo, eu não sabia mais o que poderia ser… rs

Agora basta você configurar o Tipo de Documento para a NF, colocar qual é o próximo número da sequência e gerar as faturas de vendas, estas faturas irão gerar as NFs, ai é só conferir e completar a NF.

Abs!


#18

Olá Ricardo,

Estou configurando a NF-e para nossa filial em Manaus.
Usei o certificado PFX dessa referida filial e a validação foi OK.
Usei o certificado JKS nfe-trust (que baixei do forum) e a validação foi ok.

Entretando quanto acesso ServiceStatus, ocorre o seguinte erro:

Testa o status do serviço da NF-e

** Erro: - Falha na verificação de Status - javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Para a filial São Paulo o JKS funcionou sem problemas. Posso usar o mesmo para Manaus?

Grato,

Raimundo


#19

Olá Raimundo, sim o mesmo JKS deveria funcionar para ambas empresas. Faça o teste a seguir:

Use um PC com Windows, dê um duplo-clique no certificado PFX da sua empresa de Manaus, o Windows irá abrir uma janela para importar o certificado, marque somente a opção Permitir que o certificado seja exportável (frase parecida com essa). Depois entre no site da empresa que emitiu o seu certificado (SERASA, Correios, CertSign, etc.) e baixa a cadeia de certificados correspondente ao seu A1. Depois vá em Painel de Controle, Opções da Internet, aba Segurança, botão Gerenciar Certificados. Vai abrir uma janela com os certificados instalados no seu computador, escolha o certificado de Manaus, clique em Exportar. Nas opções de exportação, marque Incluir a cadeia de certificados e salve o arquivo.

Tente colocar este arquivo no Adempiere.

Os nomes dos campos e dos flags podem estar um pouco diferentes do que eu falei, pois eu não tenho mais um PC com Windows para saber o nome exato.


#20

Olá Ricardo,
Segui as orientações, mas ainda não consegui.

Na hora de baixar a cadeia, descobri que a empresa mudou de certificadora ( De SERASA para DOCCLOUD).
Baixei a cadeia da DOCCLOUD e fiz conforme a orientação para gerar um novo certificado pfx.
A validação foi OK.
Mantive o nfe_trust.jks baixado do forum.
Continuou o erro.

Em uma segunda tentantiva,
Exportei a cadeia para gerar .cer e depois usei o keytool para gerar um novo jks.

Continuou o erro.

Por favor, sera que voce pode gerar um novo jks, baseado na cadeia da DOCCLOUD?
De repente eu não esteja gerando corretamente.

Grato,

Raimundo