Cita:
Empezado por Garada
Sí, más o menos es a lo que se había llegado durante el hilo.
Como añadido, un problema que tiene el sistema de selección de certificado de un PFX y que me di cuenta hace unos meses:
En la carpeta %appdata%Microsoft\Crypto\RSA\S-1-5-21-algomas se van creado archivos temporales con las claves que no se eliminan y puedes terminar con miles de archivos (o en la carpeta equivalente en %programdata% si se usa el almacén de la máquina en vez del usuario)
La solución pasa por usar este código al terminar el uso del certificado:
Código Delphi [-]
procedure CertContexFree(pCert: PCERT_CONTEXT; pStore: HCERTSTORE);
var
hProv: HCRYPTPROV;
c: Cardinal;
Info: PCRYPT_KEY_PROV_INFO;
ContainerName,
ProvName: WideString;
ProvType: Cardinal;
begin
if Assigned(pCert) then
begin
CertGetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID, nil, c);
Info := AllocMem(c);
CertGetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID, Info, c);
ContainerName := Info.pwszContainerName;
ProvName := Info.pwszProvName;
ProvType := Info.dwProvType;
FreeMem(Info);
CertFreeCertificateContext(pCert);
CryptAcquireContext(hProv, PWideChar(ContainerName), PWideChar(ProvName), ProvType, CRYPT_DELETEKEYSET);
end;
if Assigned(pStore) then
CertCloseStore(pStore, 0);
end;
|
Hola Garada, tienes razón, cada vez que se hace la llamada al OnBeforePost del HTTPRIO se crea un fichero temporal con la clave privada encriptada del certificado y no se borran solos, así que al final del año puedes tener centenares o miles de estos ficheros. No obstante, en mi equipo tenía mas de 500 archivos en dicha carpeta y no ocupaban más de 2MB.
En mi caso, como ya no hago uso de la librería Crypt32.dll para cargar el certificado, pues no tengo manera de borrarlos con el método que has propuesto. Así que lo único que se me ocurre es vaciar la carpeta antes de cerrar el programa o justo tras finalizar la gestión de la respuesta del webservice. La numeración del nombre de esa carpeta es distinta según el equipo, así que si por lo menos siempre empieza por S-1-5-21, tendré que buscar por esa y borrar su contenido.