Cita:
Empezado por seccion_31
El usuario garada tiene un codigo ligeramente distinto en:
https://www.clubdelphi.com/foros/showthread.php?t=95356
dale una mirada al hilo.
Este es el codigo, señalo en rojo, lo que puede ser distinto. la carga del pfx la deja libre, sin determinar.
Código:
procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
procedure CheckError(Puntero: Pointer);
begin
if not Assigned(Puntero) then
RaiseLastOSError;
end;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
Pass = 'LaContraseña';
var
pStore: HCERTSTORE;
pCert: PCERT_CONTEXT;
DataBlob: CRYPT_DATA_BLOB;
PFX: AnsiString;
begin
pStore := nil;
pCert := nil;
PFX := FuncionQueLeaElFicheroPFX;
try
DataBlob.cbData := Length(PFX);
DataBlob.pbData := @PFX[1];
// Almacen temporal con el contenido del PFX
pStore := PFXImportCertStore(DataBlob, PWideChar(Pass), {PKCS12_NO_PERSIST_KEY + }PKCS12_INCLUDE_EXTENDED_PROPERTIES);
CheckError(pStore);
// Buscar un certificado con clave privada
// Solo debería haber uno
pCert := CertFindCertificateInStore(pStore,
X509_ASN_ENCODING,
0,
CERT_FIND_HAS_PRIVATE_KEY, //CERT_FIND_ANY,
nil,
nil);
CheckError(pCert);
// Pasarlo al servicio
InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT));
finally
if Assigned(pCert) then
CertFreeCertificateContext(pCert);
if Assigned(pStore) then
CertCloseStore(pStore, 0);
end;
end;
|
Ese codigo en delphi 10.3 me da error aqui
Código Delphi
[-] pStore := PFXImportCertStore(DataBlob, PWideChar(widestring(pass)), PKCS12_INCLUDE_EXTENDED_PROPERTIES);
debido a que cambia
Código Delphi
[-]DataBlob.pbData := @PFX[1];
si lo dejo en
Código Delphi
[-]DataBlob.pbData := @PFX[0];
va bien pero en la linea internetsetoption recibo el mismo error que al principio, "codigo error 6"