Ver Mensaje Individual
  #2027  
Antiguo 26-10-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 125
Reputación: 3
Ramon88 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
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;
    } 
}
?>

Te refieres a la clave del certificado?
Yo lo hago de forma que tenga que estar instalado, y así puedo sacar la fecha de caducidad, cuando quedan 15 días, ya voy avisando que tienen que renovarlo cagando ostias.
Responder Con Cita