Ver Mensaje Individual
  #24  
Antiguo 03-10-2023
Garada Garada is offline
Miembro
 
Registrado: jul 2004
Posts: 66
Reputación: 20
Garada Va por buen camino
Entiendo. Es lógico, el parche está después de seleccionar el certificado.
Si en el sistema no hay ninguno pues ni siquiera pregunta cual quieres usar.

La solución es cambiarlo todo al lugar donde se crea la lista de certificados y se cambia la lista del sistema por la tuya.

En el System.Net.HttpClient.Win del delphi 10.4 está declarada la siguiente función?
Código Delphi [-]
class function TWinHttpLib.GetCertStore: HCERTSTORE;

Si es así, la sustituyes por esto:

Código Delphi [-]
class function TWinHttpLib.GetCertStore: HCERTSTORE;
const
  Pass = 'LaContraseña';
var
  DataBlob: CRYPT_DATA_BLOB;
  PFX: TBytes;
begin
  FLock.Enter;
  try
    if FStore = nil then
    begin
      PFX := TFile.ReadAllBytes('certificado.pfx');

      DataBlob.cbData := Length(PFX);
      DataBlob.pbData := @PFX[0];

      // Almacen temporal con el contenido del PFX
      FStore := PFXImportCertStore(@DataBlob, PWideChar(Pass), 0);
    end;

    Result := FStore;
  finally
    FLock.Leave;
  end;
end;

Y por supuesto descartas todo lo que se hizo anteriormente en function TWinHTTPClient.DoClientCertificateAccepted

Ya sólo en el evento HTTPRIO1HTTPWebNode1NeedClientCertificate de la unidad del HTTPRIO usas AnIndex para elegir el certificado que te interese de los que leíste

La función que te paso está incompleta pq sólo lee un certificado, tengo que mirar como añadir varios PFX a la misma Store y te amplio. Pero por ahora puedes ir probando.
Responder Con Cita