Hola, soy nuevo en este Foro, les dejo algo que puede servirles, quizás no esté muy claro. Es para firmar el ticket sin usar un Bat a la librería Openssl.
Deben conseguir OpensslUtils, que no recuerdo donde la encontré e incorporarla al proyecto.
Les adjunto el código que uso yo. Espero les sea útil.
Código:
function Tcomprobante.crearfirma: string;
var
signer: TMessageSigner;
camino: String;
ruta: Pwidechar;
firma: String;
position: integer;
begin
camino := ExpandFileName(application.ExeName + '\..\keys');
ruta := Pwidechar(camino);
fgeneracion := now();
fexpiracion := inchour(fgeneracion,1);
signer := TMessageSigner.Create;
signer.LoadPrivateKey(ruta +'\'+ responsable.edita_responsables['llave'], '');
signer.LoadCertificate(ruta + '\'+ responsable.edita_responsables['cert']);
signer.PlainMessage :=
'<?xml version="1.0" encoding="UTF-8" ?>'+
'<loginTicketRequest version="1.0">'+
'<header>'+
'<uniqueId>123456</uniqueId>'+
'<generationTime>'+formatdatetime('yyyy-MM-dd',fgeneracion)+'T'+formatdatetime('hh:mm',fgeneracion)+':00-03:00</generationTime>'+
'<expirationTime>'+formatdatetime('yyyy-MM-dd',fexpiracion)+'T'+formatdatetime('hh:mm',fexpiracion)+':00-03:00</expirationTime>'+
'</header>'+
'<service>wsfe</service>'+
'</loginTicketRequest>';
signer.MIMESign;
firma := signer.SignedMessage;
firma := rightstr(firma,length(firma)-186);
position := ansipos('==', firma);
if position <> 0 then
begin
delete(firma,position,length(firma));
end;
result := firma;
end;