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];
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.