Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #38  
Antiguo 01-07-2024
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 108
Poder: 10
razorxxx Va por buen camino
Cita:
Empezado por Garada Ver Mensaje
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.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
acceder a Webservice con certificado de cliente iMia Internet 8 13-09-2022 11:20:58
Conectar Webservice con httpRio+Certificado gasal Internet 2 20-07-2018 17:11:08
Como leer un TRemotable que proviene de un webservice apicito Internet 17 02-09-2011 22:48:41
SOAP POST - Webservice con Certificado y SSL JXJ Varios 5 09-05-2011 20:11:08


La franja horaria es GMT +2. Ahora son las 19:02:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi