Ejemplo openssl_x509_checkpurpose

Ejemplo 1

Descripción

El siguiente programa muestra cómo puede utilizarse la función openssl_x509_checkpurpose para verificar que el certificado recuperado de un archivo es, en efecto un certificado X509 válido. Además comprueba de manera individual la respuesta que genera esta función para cada uno de los indicadores posibles.

Aunque openssl_x509_checkpurpose podría leer el certificado directamente del archivo, puesto que va a invocársele varias veces en el interior de un bucle, y se leería múltiples veces, se ha optado por recuperarla previamente y almacenarla en una variable.

x509checkpurpose.png

Código

<?php
   // Array con los distintos propósitos y una descripción
   $Fines = array(
      X509_PURPOSE_SSL_CLIENT => "Uso en extremo cliente de conexión SSL",
      X509_PURPOSE_SSL_SERVER => "Uso en extremo servidor de conexión SSL",
      X509_PURPOSE_NS_SSL_SERVER => "Uso en conexiones SSL de servidor Netscape",
      X509_PURPOSE_SMIME_SIGN => "Uso para firmar mensajes S/MIME",
      X509_PURPOSE_SMIME_ENCRYPT => "Uso para cifrar mensajes S/MIME",
      X509_PURPOSE_CRL_SIGN => "Uso para firmar listas de revocación"
   );
 
   // Se recupera el certificado almacenado previamente en un archivo
   $Certificado = openssl_x509_read('file:///home/francisco/Publico/MiCertificado.x509');
 
   // Con el indicador X509_PURPOSE_ANY comprobamos si es un certificado válido
   if(openssl_x509_checkpurpose($Cerficiado, X509_PURPOSE_ANY)) {
      print "El certificado es un certificado X509 válido<hr />";
 
      print '<table border="1"><tr><th>Finalidad</th><th>Respuesta</th></tr>';
 
      // Si es válido se verifican los distintos fines paras los que puede usarse
      foreach($Fines as $F => $Descripcion) {
        $Respuesta = openssl_x509_checkpurpose($Certificado, $F);
        $Respuesta = $Respuesta == FALSE ? "No" : $Respuesta == TRUE ? "" : "Error";
        print "<tr><td>$Descripcion</td><td>$Respuesta</td></tr>";
      }
 
      print "</table>"; 
   } else
     print "El certificado no es un certificado X509 válido";
 
   // Liberación del certificado
   openssl_x509_free($Certificado);
?>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License