Assinar XML
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Assinar XML
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?
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Assinar XML
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.
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/
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/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Assinar XML
Olá!
OPENSSL.
Tem o passo a passo, para assinar na internet p/ usuários LINUX. Já li alguma coisa, mas não implementei NADA !
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.
No Linux tem a resposta que procura.quais as opções hoje pra assinar XML SEM fazer uso da capicom?
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.
Aqui o ACBr no Windows é usado OPENSSL.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Assinar XML
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...
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)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Assinar XML
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).
É como já comentei: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.
- 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/
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/
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Assinar XML
Amiguinhos,
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.
O caso é complicado mesmo, até o Papa é requisitado para isto.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.
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.
@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

- Mensagens: 31
- Registrado em: 23 Set 2009 22:35
- Localização: Catanduva-SP
Assinar XML
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.
exemplo de como assinar XML:
https://tools.chilkat.io/xmlDsigGen.cshtml
Abraço.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Assinar XML
Olá!
Até onde sei, o pessoal do Linux(PHP,Python...) usam a CURL + OPENSSL para essas tarefas.
Saudações,
Itamar M. Lins Jr.
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.
Itamar M. Lins Jr.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Assinar XML
Dem uma olhada nesse link, pode ajudar também usando certificado
http://www.forums.fivetechsupport.com/v ... ca8895415a
http://www.forums.fivetechsupport.com/v ... ca8895415a
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql