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_cert, 0700, true);
}
$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;
}
}
?>