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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 23-10-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 899
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por unomasmas Ver Mensaje
¿Cómo lo has hecho? ¿Podemos tener los pasos que has dado (o directamente el código)? Gracias

Supongo que ya todos estais teniendo en cuenta donde estais dejando los php, firmador, anulador,,,
Por si acaso, os advierto que seais cuidadosos pueden sacar las claves facilmente, no lo tengais en servidores públicos, lo lógico es que esté en redes privadas.

Aquí os dejo un ejemplo Curl para llamar al php
Código:
curl.exe --connect-timeout 1  http://xxxx/Caducidad.php?fichero==[NombreCertificado.xxx]=[Clave]=  --data-binary @[path completo donde esta alojado el certificado..xxx]  -o [path donde quereis los datoscertificado ejemplo c:\certs\datos_certificado.txt]
Respetad todos los signos igual que los uso para separar los campos, ya que no he encontrado otra forma de mandarlos(que seguro que la hay)
Intentad que las claves de certificado no contengan signos "=","+",",",solo letras numeros guiones bajos y medios y cualquier signo que no necesite traducirlo a codigo uri(podeis investigar un poco mas si quereis para mandar mas signos, yo me he plantado aqui)


En el php, no solo compruebo el certificado si no que lo dejo alojado en el servidor y machaco el que hubiera, esto es muy bueno para actualizar certificados.
Aquí teneis el Caducidad.php

Código PHP:
<?php 
$p 
file_get_contents('php://input'); // $p stands for params
$datos $_GET['fichero'];
$varias=explode("=",$datos);
$xml=file_get_contents("php://input");
$Clave=$varias[2];
$dir_cert =($_SERVER['DOCUMENT_ROOT'].'/certs');
if (!
file_exists($dir_cert)) {
    
mkdir($dir_cert0700true);
}

$dir_cert $dir_cert.'/'.$varias[1] ;
file_put_contents($dir_cert$p);

    
$fac = new Comprobador();
    
$CompruebaF $fac -> comprobar($dir_cert,$Clave);
    exit;

?>

<?php 
class Comprobador{
    public function 
comprobar($certificadop12$clavecertificado)
    {
    if (!
$pfx file_get_contents($certificadop12))
    {
        echo 
"Error: No se puede leer el fichero del certificado o no existe en la ruta especificada";
       exit;
    }
    if (
openssl_pkcs12_read($pfx$key$clavecertificado))
    {
    
$this->publicKey    $key["cert"];
    
$this->privateKey   $key["pkey"];
    }
    else
    {
        echo 
"Error: No se puede leer el almacén de certificados o la clave no es la correcta.";
           exit;
    }
    
$Comprueba1                       $this->insertaComprobacion();
    return 
$Comprueba1;
    }
    public function 
insertaComprobacion(){
        
$certData   openssl_x509_parse($this->publicKey);
$validFromd1 date('d-m-Y H:i:s'$certData['validFrom_time_t']);
                
$validFromd date('d-m-Y'$certData['validFrom_time_t']);
        
$validFromh date('H:i:s'$certData['validFrom_time_t']);
$validTod1 date('d-m-Y H:i:s'$certData['validTo_time_t']);
                
$validTod date('d-m-Y'$certData['validTo_time_t']);
        
$validToh date('H:i:s'$certData['validTo_time_t']);
    
    echo 
"<FechaDesde>".$validFromd."</FechaDesde>";
    echo 
"\r\n<HoraDesde>".$validFromh."</HoraDesde>";
    echo 
"\r\n<FechaHasta>".$validTod."</FechaHasta>";
    echo 
"\r\n<HoraHasta>".$validToh."</HoraHasta>";
        if (!empty(
$certData['name'])){
        echo 
"\r\n<Nombre>".$certData['name']."</Nombre>";
        }
    if (!empty(
$certData['hash'])){
    
    echo 
"\r\n<Hash>".$certData ['hash']."</Hash>";
    }
    if (!empty(
$certData['C'])){
        
        echo 
"\r\n<Pais>".$certData['C']."</Pais>";
       }
    if (!empty(
$certData['subject']['ST'])){
        
        echo 
"\r\n<Estado>".$certData['subject']['ST']."</Estado>"
       }
    if (!empty(
$certData['subject']['L'])){
        
           echo 
"\r\n<Municipio>".$certData['subject']['L']."</Municipio>";
    }       
    if (!empty(
$certData['subject']['CN'])){
        
        echo 
"\r\n<RazonSocial>".$certData['subject']['CN']."</RazonSocial>";
    } 
    if (!empty(
$certData['extensions']['subjectAltName'])){

        
$variosemails=explode(",",$certData['extensions']['subjectAltName']);
          if (!empty(
$variosemails[0])){
            
$vemails=explode(":",$variosemails[0]);
              if (!empty(
$vemails[1])){
            
                echo 
"\r\n<Email>".$vemails[1]."</Email>";   
             }                
            else
            {
                 echo 
"\r\n<EmailSinFormateo>".$vemails."</EmailSinFormateo>";
        
            }
        if (!empty(
$variosemails[1])){

        echo 
"\r\n<SubjectEmail1>".$variosemails[1]."</SubjectEmail1>";   
        }
        if (!empty(
$variosemails[2])){

        echo 
"\r\n<SubjectEmail2>".$variosemails[2]."</SubjectEmail2>";   
        }

        if (!empty(
$variosemails[3])){

        echo 
"\r\n<SubjectEmail3>".$variosemails[3]."</SubjectEmail3>";   
        }
        if (!empty(
$variosemails[4])){

        echo 
"\r\n<SubjectEmail4>".$variosemails[4]."</SubjectEmail4>";   
        }
        if (!empty(
$variosemails[5])){

        echo 
"\r\n<SubjectEmail5>".$variosemails[5]."</SubjectEmail5>";   
        }
        if (!empty(
$variosemails[6])){

        echo 
"\r\n<SubjectEmail6>".$variosemails[6]."</SubjectEmail6>";   
        }
        }
    }       
    if (!empty(
$certData['extensions']['authorityKeyIdentifier'])){
    
        echo 
"\r\n<KeyAutorizacion>".$certData['extensions']['authorityKeyIdentifier']."</KeyAutorizacion>"
    }      
    if (!empty(
$certData['issuer']['OU'])){
        echo 
"\r\n<Emisor>".$certData['issuer']['OU']."</Emisor>"
    }       
    echo 
"\r\n<ClavePublica>"$this->publicKey ."</ClavePublica>"

    echo 
"\r\n<ClavePrivada>".$this->privateKey."</ClavePrivada>"


    echo 
"\r\n";
    echo 
"\r\n// --- Datos con nombres de campos Originales ---";
    
    echo 
"\r\n<validFrom_time_t>".$validFromd1."</validFrom_time_t>";
    echo 
"\r\n<validTo_time_t>".$validTod1."</validTo_time_t>";
    if (isset(
$certData['subject'])){
        
        foreach (
$certData['subject'] as $item=>$value)
            {
                   echo 
"\r\n<".$item.">"$value."</".$item ">";
            }
        }
        if (isset(
$certData['extensions'])){
         foreach (
$certData['extensions'] as $item=>$value)
            {
                   echo 
"\r\n<".$item.">"$value."</".$item ">";
            }
        }
    
$Comprueba='';
    return 
$Comprueba;
    } 
}
?>
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
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3557 Hace 3 Semanas 17:42:47
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 14:27:32.


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