Ver Mensaje Individual
  #2  
Antiguo 26-07-2025
Avatar de YellowStone
YellowStone YellowStone is offline
Miembro
 
Registrado: feb 2007
Ubicación: Adeje
Posts: 165
Reputación: 20
YellowStone Va por buen camino
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 ) );
    //Insertamos en el XML la identificación del certificado
    // INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84
    // En Delphi 2007 no existe esta constante en WinInet.
    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.

Última edición por YellowStone fecha: 26-07-2025 a las 14:27:26.
Responder Con Cita