Estou implementando uma rotina para geração de NFE, estava vendo as rotinas do Sr. José e ele utiliza a DLL CAPICOM para fazer a assinatura dos dados, infelizmente, não consigo utilizar essa rotina na plataforma do meu cliente que é Linux Debian ppc64le.
Verifiquei que no Harbour existe as rotinas do openssl e diggest, alguém sabe me informar como pode ser feito para assinar a string utilizando as rotinas do Harbour ?
Assinar NFE sem utilizar o CAPICOM
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Assinar NFE sem utilizar o CAPICOM
na hbnfe tem rotina, mas usando linha de comando e BAT, não sei se serve de referência.
https://github.com/fernandoathayde/hbnf ... Assina.prg
O Brasil não é o único a ter algo eletrônico que precisa de assinatura.
Talvez no Harbour users alguém possa indicar alguma coisa.
E sempre tem a opção de usar componentes, se não me engano o ACBR tem versão pra Linux.
De repente resolver o problema pode ser mais urgente do que criar uma solução própria, e seria uma alternativa.
https://github.com/fernandoathayde/hbnf ... Assina.prg
O Brasil não é o único a ter algo eletrônico que precisa de assinatura.
Talvez no Harbour users alguém possa indicar alguma coisa.
E sempre tem a opção de usar componentes, se não me engano o ACBR tem versão pra Linux.
De repente resolver o problema pode ser mais urgente do que criar uma solução própria, e seria uma alternativa.
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/
Assinar NFE sem utilizar o CAPICOM
@Carlos, boas tardes!!!
De uma olhada nessa lib: https://www.chilkatsoft.com/
E nessa URL você encontra a lib para ppc64le: https://www.chilkatsoft.com/more_linux_archs.asp
Eu utilizo muito essa lib, inclusive no ppc64 e s390x, o preço da licença dela é razoavelmente ok, +/- U$300 e é licença vitalicia, pela quantidade de coisas q ela tem, me valeu muito a pena..., só, que depois de um ano você não consegue mais utilizar novos releases, mas até la, você pode baixar novos releases e ir utilizando..., algumas coisas são gratuitas na lib, como o gerenciamento de certificados e utilização deles... a parte de criptografia e digestão de dados ( que é o que você vai necessitar para assinar o XML ), não é gratuito...
Veja estes exemplos em C: https://www.example-code.com/C/cert_load_from_pfx.asp
Para assinar a mensagem ( no caso, não é um XML, mas, outro tipo de informação... ), usando o arquivo PFX/P12, eu implementei esse método simples ( em C++ )
Por que estou te recomendado essa lib. ao inves de utilizar a que já existe no Harbour, bom, o motivo é simples, você necessita do PKCS#12 e no Harbour tem a implementação até o PKCS#7....
E também existe a opção que o Sr. José informou, que é utilizando a ferramenta xmlsec
De uma olhada nessa lib: https://www.chilkatsoft.com/
E nessa URL você encontra a lib para ppc64le: https://www.chilkatsoft.com/more_linux_archs.asp
Eu utilizo muito essa lib, inclusive no ppc64 e s390x, o preço da licença dela é razoavelmente ok, +/- U$300 e é licença vitalicia, pela quantidade de coisas q ela tem, me valeu muito a pena..., só, que depois de um ano você não consegue mais utilizar novos releases, mas até la, você pode baixar novos releases e ir utilizando..., algumas coisas são gratuitas na lib, como o gerenciamento de certificados e utilização deles... a parte de criptografia e digestão de dados ( que é o que você vai necessitar para assinar o XML ), não é gratuito...
Veja estes exemplos em C: https://www.example-code.com/C/cert_load_from_pfx.asp
Para assinar a mensagem ( no caso, não é um XML, mas, outro tipo de informação... ), usando o arquivo PFX/P12, eu implementei esse método simples ( em C++ )
Código: Selecionar todos
std::string Certificado::assinaMensagem(std::string msg)
{
std::unique_ptr<CkCrypt2> crypt(new CkCrypt2());
bool success = crypt->UnlockComponent(CHILKAT_KEY_CRYPT);
if (success != true)
throw CERTIFICADO_FALHA_AO_INCIALIZAR_O_SISTEMA_DE_CERTIFICADOS_TEXT;
crypt->put_Charset("utf-8");
crypt->put_EncodingMode("Base64");
crypt->SetSigningCert(*_certificado); // Aqui envio para o sistema de criptografia, que deve ser utilizado o certificado que já está carregado na memoria ( tipo CkCert )
std::unique_ptr<CkString> ckStr(new CkString());
bool sucess = crypt->OpaqueSignStringENC(msg.c_str(), *ckStr);
std::string ret;
if (sucess)
ret = ckStr->getStringAnsi();
return ret;
}
E também existe a opção que o Sr. José informou, que é utilizando a ferramenta xmlsec
Assinar NFE sem utilizar o CAPICOM
@José
Infelizmente a solução utilizada, usando o xmlsec não funciona nos servidores da empresa, devido as regras da empresa, programas que não estão no repositorio do debian ou que não sejam fornecidos por fornecedores contratados não podem ser instalados no servidor.
No caso da alternativa dada pelo Sr. Bencz, isso se adequá com o que pode ser entregue para a empresa, pois é uma lib. de terceiro que é testada e fornecida por uma empresa, com base em contrato ( é um saco as regras da empresa, mas, faz parte do negocio, meu ganha pão ta ai... )
@Bencz
Obrigado pela dica, ela se adapta exatamente com a minha necessidade, pois necessito fazer a assinatura de outros documentos usando o e-cnpj e e-cpf..., infelizmente terei que fazer varias adaptações no meu código para adequar com o uso dessa lib.
Baixei ela e fiz alguns testes nos servidores da empresa e funcionou perfeitamente, inclusive, fiz um pequeno programa em C para fazer essa assinatura e deu certinho!
Infelizmente a solução utilizada, usando o xmlsec não funciona nos servidores da empresa, devido as regras da empresa, programas que não estão no repositorio do debian ou que não sejam fornecidos por fornecedores contratados não podem ser instalados no servidor.
No caso da alternativa dada pelo Sr. Bencz, isso se adequá com o que pode ser entregue para a empresa, pois é uma lib. de terceiro que é testada e fornecida por uma empresa, com base em contrato ( é um saco as regras da empresa, mas, faz parte do negocio, meu ganha pão ta ai... )
@Bencz
Obrigado pela dica, ela se adapta exatamente com a minha necessidade, pois necessito fazer a assinatura de outros documentos usando o e-cnpj e e-cpf..., infelizmente terei que fazer varias adaptações no meu código para adequar com o uso dessa lib.
Baixei ela e fiz alguns testes nos servidores da empresa e funcionou perfeitamente, inclusive, fiz um pequeno programa em C para fazer essa assinatura e deu certinho!
Assinar NFE sem utilizar o CAPICOM
Carlos,
o xmlsec está no repositório do debian, mas, com outro nome..., utilize o seguinte comando:
Veja: https://packages.debian.org/search?keywords=xmlsec1
o xmlsec está no repositório do debian, mas, com outro nome..., utilize o seguinte comando:
Código: Selecionar todos
apt install xmlsec1

