Página 1 de 1
Assinar NFE sem utilizar o CAPICOM
Enviado: 27 Jan 2020 10:24
por carlosro
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
Enviado: 27 Jan 2020 13:51
por JoséQuintas
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.
Assinar NFE sem utilizar o CAPICOM
Enviado: 27 Jan 2020 13:56
por bencz
@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++ )
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;
}
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
Assinar NFE sem utilizar o CAPICOM
Enviado: 27 Jan 2020 18:50
por carlosro
@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!
Assinar NFE sem utilizar o CAPICOM
Enviado: 27 Jan 2020 19:05
por bencz
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