";
} else {
// Sistemas Linux.
$SendaArchsCSD = "sellos_digitales/"; // Directorio en donde se los archivos correspondientes a los "Sellos digitales".
$SendaArchsPEM = "archs_pem/"; // Directorio en donde se crearán los archivos *.cer.pem y *.key.pem
echo "Sistema operativo Linux.
";
}
$CSD_Password = "12345678a";
$CSD_NomArchCER = "EKU9003173C9.cer"; // Nombre del archivo .CER de los "Sellos digitales".
$CSD_NomArchKEY = "EKU9003173C9.key"; // Nombre del archivo .KEY de los "Sellos digitales".
$PEM_NomArchCER = "EKU9003173C9.cer.pem"; // Nombre del archivo .CER.PEM
$PEM_NomArchKEY = "EKU9003173C9.key.pem"; // Nombre del archivo .KEY.PEM
$PEM_NomArchKeyEncrip = "EKU9003173C9.key.enc.pem"; // Nombre del archivo .KEY.ENC.PEM
### A continuación con la función exec() de PHP se ejecutan los comandos de OppenSSL, analizar con detalle. ##############
//==========================================================================
# Obtener el archivo .key.pem del archivo .key
$Comando_key_pem = "pkcs8 -inform DER -in ".$SendaArchsCSD.$CSD_NomArchKEY." -passin pass:$CSD_Password -out ".$SendaArchsPEM.$PEM_NomArchKEY;
exec('openssl '.$Comando_key_pem, $arr, $status);
if ($status===0){
# Dar permisos de lectura y escritura (necesario en sistemas que se ejecuten en Linux).
chmod($SendaArchsPEM.$PEM_NomArchKEY, 0777);
echo 'Archivo .KEY correctamente procesado, busque el archivo resultante en la carpeta: archs_pem/
';
}else{
echo 'Error';
}
//==========================================================================
# Obtener el archivo .cer.pem del archivo .cer
echo "
";
$Comando_cer_pem = "x509 -inform DER -outform PEM -in ".$SendaArchsCSD.$CSD_NomArchCER." -passin pass:$CSD_Password -out ".$SendaArchsPEM.$PEM_NomArchCER;
exec('openssl '.$Comando_cer_pem, $arr, $status);
if ($status===0){
# Dar permisos de lectura y escritura (necesario en sistemas que se ejecuten en Linux).
chmod($SendaArchsPEM.$PEM_NomArchCER, 0777);
echo 'Archivo .CER correctamente procesado, busque el archivo resultante en la carpeta: archs_pem/
';
}else{
echo 'Error';
}
//==========================================================================
# Obtener No. de certificado contenido en el archivo .cer.pem
echo "
";
$Comando_NoCert = "x509 -in ".$SendaArchsPEM.$PEM_NomArchCER." -noout -serial";
$NoCert = exec('openssl '.$Comando_NoCert, $arr, $status);
$NoCert = ConvANum($NoCert);
$NoCert = ExtraeNoCer($NoCert);
if ($status===0){
echo "No. de certificado: ".$NoCert;
}else{
echo 'Error';
}
//==========================================================================
# Obtener la Razon social y RFC
echo "
";
$Comando_DatosContrib = "x509 -in ".$SendaArchsPEM.$PEM_NomArchCER." -noout -subject -nameopt oneline,-esc_msb";
$NomProp = exec('openssl '.$Comando_DatosContrib, $arr, $status);
if ($status===0){
$ArraySubject = explode(",", $NomProp);
$ArrayNom = explode("=", $ArraySubject[1]);
$RazSoc = $ArrayNom[1];
echo $RazSoc;
echo "
";
$ArrayRFC = explode("=", $ArraySubject[3]);
$RFC = substr($ArrayRFC[1],0,14);
echo $RFC;
}else{
echo 'Error';
}
//==========================================================================
# Encriptar con DES3
echo "
";
$Comando_Encriptar = "rsa -in ".$SendaArchsPEM.$PEM_NomArchKEY." -des3 -out ".$SendaArchsPEM.$PEM_NomArchKeyEncrip." -passout pass:".$CSD_Password;
exec('openssl '.$Comando_Encriptar, $arr, $status);
if ($status===0){
# Dar permisos de lectura y escritura (necesario en sistemas que se ejecuten en Linux).
chmod($SendaArchsPEM.$PEM_NomArchKeyEncrip, 0777);
echo 'Proceso de encriptado: correcto.';
}else{
echo 'Error';
}
## FUNCIONES ###################################################################
function ConvANum($str){
$legalChars = "%[^0-9\-\. ]%";
$str = preg_replace($legalChars,"",$str);
return $str;
}
function ExtraeNoCer($Cad){
$Cad1 = $Cad;
$Cad2 = "";
while (strlen($Cad1) > 0){
$Cad2 .= substr($Cad1,1,1);
$Cad1 = substr($Cad1,2,strlen($Cad1)-2);
}
return $Cad2;
}