Assinar XML

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

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

Assinar XML

Mensagem por JoséQuintas »

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 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

Assinar XML

Mensagem por JoséQuintas »

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 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

Assinar XML

Mensagem por Itamar M. Lins Jr. »

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 !

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Assinar XML

Mensagem por alxsts »

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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Assinar XML

Mensagem por JoséQuintas »

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 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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Assinar XML

Mensagem por rochinha »

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 [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
toninhofwi
Usuário Nível 1
Usuário Nível 1
Mensagens: 31
Registrado em: 23 Set 2009 22:35
Localização: Catanduva-SP

Assinar XML

Mensagem por toninhofwi »

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.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Assinar XML

Mensagem por sygecom »

Pode usar HBCURL para assinar.

Veja também:
http://www.projetoacbr.com.br/forum/top ... e-capicom/
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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

Assinar XML

Mensagem por Itamar M. Lins Jr. »

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

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Assinar XML

Mensagem por sygecom »

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

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