Assinar NFE sem utilizar o CAPICOM

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

carlosro
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 30 Dez 2019 09:03
Localização: Curitiba

Assinar NFE sem utilizar o CAPICOM

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

Assinar NFE sem utilizar o CAPICOM

Mensagem 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.
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
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Assinar NFE sem utilizar o CAPICOM

Mensagem 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
Imagem
carlosro
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 30 Dez 2019 09:03
Localização: Curitiba

Assinar NFE sem utilizar o CAPICOM

Mensagem 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!
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Assinar NFE sem utilizar o CAPICOM

Mensagem por bencz »

Carlos,
o xmlsec está no repositório do debian, mas, com outro nome..., utilize o seguinte comando:

Código: Selecionar todos

apt install xmlsec1
Veja: https://packages.debian.org/search?keywords=xmlsec1
Imagem
Responder