Ver Mensaje Individual
  #14  
Antiguo 16-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 143
Reputación: 15
iMia Va por buen camino
Cita:
Empezado por iMia Ver Mensaje
Hola Serpic,

Tienes razón, no puse la función de asignación del certificado

Ahí va..

Código Delphi [-]

procedure TMainForm.SetCertificate(const FileName, Password: string; var Data: Pointer);
var
  Cert : ICertificate2;
  CertContext : ICertContext;
  PCertContext : PCCERT_CONTEXT;
begin
  try
    Cert := CoCertificate.Create;
  except
    on E: EOleSysError  do
      raise Exception.Create('CAPICOM.DLL no está registrada correctamente.')
  end;

  Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_LOCAL_MACHINE_KEY);
  CertContext := Cert as ICertContext;
  CertContext.Get_CertContext(Integer(PCertContext));
  if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, 4096) = False then
    raise Exception.Create ( 'Error al asignar el certificado de cliente' )
end;

Como se ve en el código inicial, hay que importar la libreria CAPICOM.DLL (y registrarla en cada equipo que se vaya a utilizar la app) y generar el TLB y así se pueden utilizar las constantes de CAPICOM

Saludos...


P.D.: Espero no tengas los problemas que estoy experimentando en alqunas máquinas. en el Hilo: https://www.clubdelphi.com/foros/sho...d.php?p=550756

Saludos.
Atención!!
la llamada de carga del certificado es incorrecta...

deberia ser:

Código Delphi [-]
Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_CURRENT_USER_KEY);
Responder Con Cita