Portar para Linux a SefazClass

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Portar para Linux a SefazClass

Mensagem por Itamar M. Lins Jr. »

Olá!
Alguém que usa a SefazClass no Linux ?
Estou lendo algumas coisas e a principio será apenas entender o processo de assinar, enviar e receber o XML.
O resto acredito que não precisa mexer.
O certificado PFX precisa ser extraído o arquivo privado ".pem" e publico ".pem" alguns tutoriais ensinam como é feito.
Seria bom alguém com mais experiência para ajudar.
https://users.dcc.uchile.cl/~pcamacho/t ... mlsec.html
Este link ensina como fazer a assinatura. Falta a parte de envio e recebimento.
Temos que ir testando cada passo, assinar no Linux e enviar pelo windows para ver se ficou Ok...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Portar para Linux a SefazClass

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Temos que ir testando cada passo, assinar no Linux e enviar pelo windows para ver se ficou Ok...
Enviar o XML, tanto faz Linux ou Windows, trata-se de enviar.

Já a assinatura.....
Talvez dê pra dividir em duas etapas:

a) é gerado um HASH encima do XML FORMATADO, não exatamente o que XML que temos
b) é assinado o HASH com o certificado

NÃO SEI se dá pra testar essas coisas de forma separada, pelo menos facilitaria tentar resolver uma de cada vez.
Com as duas juntas, vai ficar difícil saber qual das duas pode estar com problema, e mais difícil de resolver.
De repente uma já está certa, e a outra está errada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Portar para Linux a SefazClass

Mensagem por Itamar M. Lins Jr. »

Olá!
Pelo que estou "entendendo", dentro do .PFX temos 3 arquivos(zipados/criptografados)
O OpenSSL extrai eles para usar no Linux com a extensão .PEM (é o que estou entendendo.)
Parece que usa o cURL para fazer o envio ou podemos usar a classe TIP.
Estou sem tempo para isso, passei algumas horas lendo sobre o assunto e é o que estou entendendo.
O pessoal da área jurídica usa muito isso mas é por cartão ou token no Linux.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Portar para Linux a SefazClass

Mensagem por JoséQuintas »

Digamos que seja algo como:

Código: Selecionar todos

cBloco := Substr( cXml, ???, ??? )
cBloco := Converte( cBloco )
cHash := CalculaHash( cBloco )
cAssinatura := AssinaXml( cHash, ???, ??? )
Então...

Que parte exatamente assina?
Que tipo de conversão é aplicada? pode ter variações
Como calcula o hash? provavelmente é estilo CRC32
Como assina o hash? pode ter variações

No Windows faço uso de MSXML5 e CAPICOM PRA ASSINATURA.
CAPICOM por si só já assina, mas... o MSXML5 tem os "segredos" adicionais.

Desvendar esse pequeno mistério, poderia num primeiro momento eliminar a dependência de MSXML5.
E num segundo momento, eliminar a dependência de CAPICOM.

Até lá.... talvez inventem de assinar usando TPM do Windows 11....
E aí, de nada adianta resolver o mistério atual...

Assinar.... vamos assinar somente um hash.
Desvendar como se assina um hash é apenas uma parte do problema.
A outra parte é: como se chega a esse hash?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Portar para Linux a SefazClass

Mensagem por JoséQuintas »

assinaA.png
assinaB.png
Por exemplo:

CANONICALIZAÇÃO DO XML

É justamente o padrão de formatação, pra que uma rotina de assinatura considere exatamente o mesmo conteúdo.
Se uma assinatura "formatar" diferente, vai dar outro resultado
Um mesmo XML pode ter assinatura diferente, se não for formatado direito pela rotina de assinatura.
Ou... vai assinar usando o código ASC, binário, ou o código UTF-8?

Se assinarmos certo, mas usando string errada, a assinatura não vai bater.
Se calcularmos o hash certo, mas usando string errada, a assinatura também não vai bater.
Os detalhes fazem muita diferença.

Talvez até o Harbour tenha funções prontas pra fazer as coisas.
Talvez os masters do Harbour saibam nos informar detalhes sobre o que tudo isso significa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Portar para Linux a SefazClass

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Alguém que usa a SefazClass no Linux ?
Estou lendo algumas coisas e a principio será apenas entender o processo de assinar, enviar e receber o XML.
O resto acredito que não precisa mexer.
Basicamente seria trocar a comunicação pela LIBCURL, e a assinatura pela OPENSSL.
No fonte tem um exemplo anotado da LIBCURL, que também pode ser visto na HBNFE.

Sobre a assinatura... não sei dizer.
Conforme já mencionei por aqui, foi a HBNFE que me mostrou como assinar XMLs.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder