Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2017
PepCat PepCat is offline
Miembro
 
Registrado: mar 2017
Posts: 96
Poder: 10
PepCat Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Hola a Todos. Ahora voy yo con una duda o problema por si le ha pasado a alguien.

Estomos desarrollando en delphi y a al hora de presentar mostramos todos los certificados disponibles en el equipo. En el equipo teníamos tres certificados, los cuales nos salian a la hora de obtenerlos. Uno de ellos estaba caducado y lo eliminamos del sistema, es decir ahora solo hay dos. Pero a la hora de obtener en delphi cuantos certificados hay me siguen saliendo tres, los dos que me quedan y uno en blanco.

A alguien le ha pasado esto o sabe por que es. La lista de certificados la estamos obteniendo de la siguiente forma.

Código Delphi [-]
   

function ObtenerCertificados(aList:TStringList):integer;
var
  hStore: HCERTSTORE;
  PrevContext, CurContext: PCERT_CONTEXT;
  cbSize: DWORD;
  sNombre: String;
begin
  aList.Clear;
  Result := 0;
  hStore := CertOpenSystemStore(0, PChar('MY'));
  if hStore <> nil then begin
     PrevContext := nil;
     CurContext := CertEnumCertificatesInStore(hStore, PrevContext);
     while CurContext <> nil do begin
       sNombre := '';
       cbSize := CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, nil, 0);
       if cbSize > 0 then
       begin
          SetLength(sNombre, cbSize-1);
          CertGetNameString(CurContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, nil, PChar(sNombre), cbSize);
          aList.Add(sNombre);
       end;
       PrevContext := CurContext;
       CurContext  := CertEnumCertificatesInStore(hStore, PrevContext);
     end;
  end;
  result:=aList.count;
end;

Un Saludo.
Hola Keys,

Después de ver todos los problemas que se han comentado en este foro con el envió de más de 13 facturas con la librería de certificados que incluye Delphi he optado por utilizar la librería CAPICOM y abrir directamente el fichero con el certificado.

Código Delphi [-]

procedure SetCertificate(const FileName, Password: string; var Data: Pointer);
var
  Cert : ICertificate2;
  CertContext : ICertContext;
  PCertContext : PCCERT_CONTEXT;
begin
  try
    Cert := CoCertificate.Create;
  except
    on E: EOleSysError  do
      raise Exception.Create('CAPICOM.DLL is not registered')
  end;

  Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_LOCAL_MACHINE_KEY);
  CertContext := Cert as ICertContext;
  CertContext.Get_CertContext(Integer(PCertContext));
  if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False then
    raise Exception.Create ( 'Error setting "' + FileName + '" certificate in web service' )
end;

procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
  SetCertificate('C:\Cetificados\FicheroConCertificado.p12', '1234', Data);
end;
Responder Con Cita
  #2  
Antiguo 29-03-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.229
Poder: 24
keys Va por buen camino
Lo primero gracias. El problema de las 13 facturas ya esta solucionado hace tiempo, se solucionó con el uso correcto de las CAPICOM, el problema no lo tengo con los envios, los hago correctamente. El problema es que si en el ordenador hay varios certificados hay que indicar con cual de ellos hacer el envío y como ya he dicho la función que los devuelve por lo visto tambien incluye los eliminados.
Responder Con Cita
  #3  
Antiguo 29-03-2017
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 20
Nasca Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Lo primero gracias. El problema de las 13 facturas ya esta solucionado hace tiempo, se solucionó con el uso correcto de las CAPICOM, el problema no lo tengo con los envios, los hago correctamente. El problema es que si en el ordenador hay varios certificados hay que indicar con cual de ellos hacer el envío y como ya he dicho la función que los devuelve por lo visto tambien incluye los eliminados.
Entiendo que los certificados que usas con ese sistema son los del almacén del Sistema Operativo, los que usa Internet Explorer y Chrome.
Con lo cual la eliminación de, por ejemplo, Firefox no elimina el certificado.
Mira que no sea algo así.
Responder Con Cita
  #4  
Antiguo 29-03-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.229
Poder: 24
keys Va por buen camino
Estoy accediendo a los certificados del sistema operativo. Si voy al panel de control ese certificado no sale. Pero si en la funcion de delphi que accede a ellos.
Responder Con Cita
  #5  
Antiguo 29-03-2017
PepCat PepCat is offline
Miembro
 
Registrado: mar 2017
Posts: 96
Poder: 10
PepCat Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Lo primero gracias. El problema de las 13 facturas ya esta solucionado hace tiempo, se solucionó con el uso correcto de las CAPICOM, el problema no lo tengo con los envios, los hago correctamente. El problema es que si en el ordenador hay varios certificados hay que indicar con cual de ellos hacer el envío y como ya he dicho la función que los devuelve por lo visto tambien incluye los eliminados.
Por eso he optado por cargar directamente al fichero y así no hace falta preguntar al usuario que certificado debe escoger.

De todas maneras para ver que certificados del “store” están vigentes, con CAPICOM puedes filtrarlos:


Código Delphi [-]
 for I := 1 to Certs.Count -1 do
  begin
    Cert := IInterface(Certs.Item[i]) as ICertificate;
    if Now <= Cert.ValidToDate  then
    begin
       aList.Add(Cert.SubjectName);
    end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4524 Hace 3 Días 16:17:40
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 15:57:17.


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