Buenas:
HTTPRIO si permite cargar el certificado desde un fichero PFX que puedes tener en cualquier sitio de la red. Juraría que hay varios ejemplos aquí, al menos en el foro de Ticketbai.
Se trata de controlar el evento de HTTPRIO.HTTPWebNode.OnBeforePost.
Por ejemplo:
Código Delphi
[-]procedure TBeforeEx.OnBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : PCCERT_CONTEXT;
FTimeout: Cardinal;
begin
FTimeout := 12000;
InternetSetOption(Data, INTERNET_OPTION_CONNECT_TIMEOUT, Pointer(@FTimeout), SizeOf(FTimeout));
InternetSetOption(Data, INTERNET_OPTION_RECEIVE_TIMEOUT, Pointer(@FTimeout), SizeOf(FTimeout));
InternetSetOption(Data, INTERNET_OPTION_SEND_TIMEOUT, Pointer(@FTimeout), SizeOf(FTimeout));
Cert := CoCertificate.Create;
try
Cert.Load(FicheroCert, ClaveCert, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_LOCAL_MACHINE_KEY);
if cert.ValidToDate < date then
begin
MessageDlg('O Certificado Digital '+trim(FicheroCert)+' está caducado.', mtWarning, [mbOk], 0);
end;
CertContext := Cert as ICertContext;
CertContext.Get_CertContext( Integer( PCertContext ) );
if InternetSetOption( Data, 84, PCertContext, Sizeof( CERT_CONTEXT )) = False then
begin
MessageDlg('Error anexando el Certificado Digital.', mtError, [mbOk], 0);
end;
except
on E: Exception do
begin
MessageDlg('Error cargado el Certificado Digital:'+#13#10+#13#10+E.Message, mtError, [mbOk], 0);
end;
end;
end;
Así lo usamos en Delphi 2007, así que supongo que en versiones posteriores será más fácil.
Luego hay algunos tipos de certificados, que dependiendo de la entidad certificadora, tendrás que buscar el correcto dentro de cada pfx, por ejemplo los de IANATACA, en los de la FNMT no.