Ver Mensaje Individual
  #9  
Antiguo 23-09-2010
Rom@n Rom@n is offline
Miembro
 
Registrado: oct 2007
Posts: 25
Reputación: 0
Rom@n Va por buen camino
Cambiar .cer a .pem y obtener fecha de caducidad del certificado

Hola quetal programadores quiero aportar un poco al tema de facturacion electronica voy a explicar brevemente este codigo esperando que le sirva a mas de uno:
1:Primero Busco con dialogExecute el archivo .cer
2:ejecuto el openssl con shellexecute y paso los parametros para convertir a formato pem y creo un archivo de texto.
3:con una funcion de escaneo busco la palabra not after y copio solo la fecha con copy y la proceso para lograr un formato de echa valido
4:la funcion LongDateStrToShortDateStr me rotorna el numero de mes ya que en el archivo caduca aparece el mes abreviado ejem:ene,feb,mar....dic

Código Delphi [-]
procedure Tfrm_datos_empresa.BitBtn5Click(Sender: TObject);
var
Rutacerti,nombrecerti:string;
position: integer;
dia,mes,yy,h,m,s:string;
begin
if Opencerti.Execute then
  begin
    Rutacerti := Opencerti.FileName ;
    if Rutacerti <> '' then
    begin
      nombrecerti:=ExtractFileName(opencerti.FileName);
      CopyFile(PChar(rutacerti), PChar('C:\SAT\'+nombrecerti), false);
      certi.Text:=nombrecerti;
      ShellExecute(Handle, nil, pchar('C:\openssl\openssl.exe'), pchar('x509 -inform DER -outform PEM -in '+PChar('C:\SAT\'+nombrecerti)+' -out C:\SAT\'+nombrecerti+'.pem'),nil,SW_SHOW);
      Sleep(1000);
      ShellExecute(Handle, nil, pchar('C:\openssl\openssl.exe'), pchar('x509 -in C:\SAT\'+nombrecerti+'.pem -text -out C:\SAT\caduca.txt'),nil,SW_SHOW);
      Sleep(1000);
      //proceso para sacar la fecha de caducidad
      position := ScanFile('C:\SAT\caduca.txt', 'Not After', true);
      if position <> -1 then
      begin
        //showmessage(archivo_caduca);
        dia:=Copy(archivo_caduca,17,2);
        mes:=LongDateStrToShortDateStr(Copy(archivo_caduca,13,3));//(Copy(archivo_caduca,13,3)));
        yy:=Copy(archivo_caduca,29,4);
        h:=Copy(archivo_caduca,20,8);
        if date>=strtodatetime(dia+'/'+mes+'/'+yy+' '+h) then
         showmessage('Este certificado ya esta caducado:'+ dia+'/'+mes+'/'+yy+' '+h)
        else
        showmessage('Certificado Vigente hasta:'+ dia+'/'+mes+'/'+yy+' '+h);
        caduca.DateTime:= strtodatetime(dia+'/'+mes+'/'+yy+' '+h);
      end
      else
      begin
        ShowMessage('No se econtro Fecha de caducidad (Not After)');
      end;
    end;
end//fin del dialog1 execute
else
begin
    showmessage('no se ejecuto');
end;

Última edición por Rom@n fecha: 23-09-2010 a las 22:15:20. Razón: no resalte sintaxis
Responder Con Cita