Clipper On Line • Ver Tópico - Assinar XML

Assinar XML

Discussão sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (ECF, TEF, SINTEGRA, NF-e, ECD, EFD, etc.)

Moderador: Moderadores

 

Assinar XML

Mensagempor JoséQuintas » 06 Set 2021 14:47

Quais as opções que temos hoje pra assinar XML, além da Capicom ?

Pelo que tenho visto por aqui, o ACBR ainda tem a versão capicom.
Então pergunto: quais as opções hoje pra assinar XML SEM fazer uso da capicom?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Assinar XML

Mensagempor JoséQuintas » 06 Set 2021 14:56

Só relembrando:

Assinar XML, se fosse considerar o XML inteiro, seria demorado.

Então, é calculado uma espécie de dígito de controle, o tal digestValue, encima do XML.
A assinatura com o certificado, é encima desse digestValue.

Como chegar ao digestValue? ainda não sabemos.
Como assinar? podemos até saber, mas sem o digestValue, de nada adianta saber assinar com o certificado.
O Harbour até tem funções pra isso, mas... como depende do conjunto, não sei se alguém poderia ajudar.
Na maioria dos casos acabam usando produtos de terceiros.

A coisa, que deve ser simples, acaba virando um mistério.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Assinar XML

Mensagempor Itamar M. Lins Jr. » 06 Set 2021 15:56

Olá!
quais as opções hoje pra assinar XML SEM fazer uso da capicom?

No Linux tem a resposta que procura.
OPENSSL.
Tem o passo a passo, para assinar na internet p/ usuários LINUX. Já li alguma coisa, mas não implementei NADA !
ACBr_NFe_CAPICOM: Usa as DLLs da Microsfot CAPICOM (conexão segura) e MSXML (Assinatura e validação do XML) - Apenas funciona no Delphi e Windows. Funciona com certificados do tipo A1 e A3.
ACBr_NFe_OpenSSL: Usa Projetos OpenSource: Synapse+OpenSSL (conexão segura) e LibXml2 + XmlSEC (Assinatura e validação do XML) - Atualmente compatível com Delphi, mas será compatível com Lazarus, Kylix e com Linux. Funciona apenas com certificados do tipo A1.

Um dica seria olhar nos fontes da NFe do governo em JAVA, para ver como assina no Linux.

Aqui o ACBr no Windows é usado OPENSSL.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6949
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 506 vezes

Assinar XML

Mensagempor alxsts » 06 Set 2021 19:08

Olá!

Não conheço nada sobre o assunto. Fazendo uma busca no Google encontrei:

Como calcular o DigestValue do XML? => É um cálculo BaseEncode64 feito em cima dos bits resultantes do cálculo SHA1 feito em cima do XML canonizado.

Exclusive XML Canonicalization Version 1.0 W3C Recommendation 18 July 2002 => Não sei se é o mais atual...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Assinar XML

Mensagempor JoséQuintas » 06 Set 2021 21:06

O processo de se calcular o DigestValue de um arquivo XML não se resume a calcular o hash desse arquivo, mas possui outros passos intermediários:

Colocar o documento na forma canônica, tal como apontado por @Anthony Accioly;
Aplicar quaisquer transformações especificadas em Reference/Transforms. Se não há nenhum elemento Transforms, ou o mesmo está vazio (sem sub-elementos), então nada precisa ser feito.
Certifique-se que esses passos foram corretamente adotados e, se ainda tiver problemas em conseguir um resultado correto, acrescente mais detalhes à sua pergunta de modo a podermos ajudar mais (se possível mostrando o SignedInfo que quer atingir, um link para o arquivo XML e uma descrição dos passos e ferramentas que utilizou).

Nota: minha resposta anterior (em arquivo) não se aplica aqui, pois de fato o DigestValue é um simples hash e não uma assinatura digital (portanto invariante à presença ou não de um certificado).


Faltou um passo importante que é canonizar o XML. Recomendo o uso da classe Canonicalizer do projeto Apache Santuario (na verdade, eu não faria nada na mão, usaria essa biblioteca para tudo). Sobre o algoritmo basta aplicar um SHA1 para obter os bits (não a assinatura em HEX) e, em cima desses bits obter a Base64 da assinatura. A biblioteca Apache Commons Codec tem tudo que você precisa para a segunda parte. –
É para codificar em SHA1 e conveter em base64 eu utilizo essas bibliotecas que você citou.


É como já comentei:
- Primeiro precisa fazer ajustes no XML, dependendo de como está o XML, e de como "pediram".
- Depois é calculado um hash do documento ajustado
- Por último é que entra a assinatura do hash

O que é assinado não é exatamente o XML que estamos vendo.
E nisso ainda pode entrar codepage e conversão UTF-8.

O complicado é descobrir os detalhes.
Principalmente porque o pessoal já usa alguma ferramenta que faz tudo sozinho, e nem precisa saber dos detalhes.
Se começar a misturar ferramentas diferentes, ou estilo batch, aí mais chances de falhas.

Uma coisa que falta é até um passo a passo, não só do "manual", mas também de cada cálculo intermediário.
Só conferir o resultado final, ficamos sem saber em que parte se encontra o erro.
A partir daí, podemos estar estragando ao invés de estar consertando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Assinar XML

Mensagempor rochinha » 09 Set 2021 21:43

Amiguinhos,

Como calcular o DigestValue do XML? => É um cálculo BaseEncode64 feito em cima dos bits resultantes do cálculo SHA1 feito em cima do XML canonizado.


O caso é complicado mesmo, até o Papa é requisitado para isto.

Tô eu aqui testando CRC16 e CRC32 de todo o lado e os valores não dão o que eu quero para usar com PIX. Ja testei várias funções em Harbour, C++ e VB.

No caso do base64 encode creio que tem exemplos bem legais aqui no forum mas também achava que a aassinatura se dava pelo conjunto do XML inteiro mas percebi que não existe uma necessidade obrigatória de certificado certificado por certificadora para assinar, pois criei um aqui com openssl e usei no monitor e pimba.

Só pra enviar que o certificado será consultado quanto ao proprietário, chave da certificadora, etc.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4547
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 246 vezes

Assinar XML

Mensagempor toninhofwi » 13 Set 2021 09:12

Bom dia, eu uso a chilkat, aliás estou usando praticamente pra tudo, desde leitura de XML, JSON, certificados, etc, é um complemento perfeito para o Harbour mas precisa comprar uma licença que fica em torno de 2000 reais mas vale cada centavo.

exemplo de como assinar XML:

https://tools.chilkat.io/xmlDsigGen.cshtml

Abraço.
toninhofwi
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 29
Data de registro: 23 Set 2009 22:35
Cidade/Estado: Catanduva-SP
Curtiu: 7 vezes
Mens.Curtidas: 6 vezes

Assinar XML

Mensagempor sygecom » 16 Set 2021 11:56

Pode usar HBCURL para assinar.

Veja também:
http://www.projetoacbr.com.br/forum/top ... e-capicom/
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Assinar XML

Mensagempor Itamar M. Lins Jr. » 16 Set 2021 12:00

Olá!
Até onde sei, o pessoal do Linux(PHP,Python...) usam a CURL + OPENSSL para essas tarefas.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6949
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 506 vezes

Assinar XML

Mensagempor sygecom » 16 Set 2021 13:44

Dem uma olhada nesse link, pode ajudar também usando certificado

http://www.forums.fivetechsupport.com/v ... ca8895415a
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes




Retornar para Legislação Fiscal e Tributária

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro