Ejemplo openssl_csr_sign, openssl_x509_export y openssl_x509_export_to_file

Ejemplo 1

Descripción

Este ejemplo utiliza la función openssl_csr_new para generar un nuevo CSR, obteniendo al tiempo un nuevo par de claves pública/privada. La pública queda en la propia solicitud de certificado, mientras que la privada se obtiene en una variable. Ésta se utiliza a continuación para auto-firmar el CSR, mediante la función openssl_csr_sign, obteniendo un certificado X509 válido durante 120 días.

A continuación se usan las funciones openssl_x509_export y openssl_pkey_export para mostrar en la página tanto el certificado X509 como la clave privada asociada. Finalmente se guardan ambos elementos en sendos archivos, usando las funciones openssl_x509_export_to_file y openssl_pkey_export_to_file.

csrsign.png

Código

<?php
   // Generamos la solicitud de certificado
   $MiCSR = openssl_csr_new(array(
      "countryName" => "ES",
      "stateOrProvinceName" => "Jaen",
      "localityName" => "Jaen",
      "organizationName" => "Universidad Jaen",
      "organizationalUnitName" => "Criptografia",
      "commonName" => "www.ujaen.es",
      "emailAddress" => "fran@ujaen.com"), $ClavePrivada);
 
   // Al firmar la solicitud con nuestra propia clave privada
   // obtenermos un certificado X509
   $CertX509 = openssl_csr_sign($MiCSR, null, $ClavePrivada, 120);
 
   // Exportamos a una cadena tanto el certificado como la clave privada
   openssl_x509_export($CertX509, $CadCertificado);
   openssl_pkey_export($ClavePrivada, $CadClave, 'micontrasena');
 
   print "<h1>Certificado X509</h1><pre>$CadCertificado</pre><h1>Clave privada</h1><pre>$CadClave</pre";
 
   // Exportamos certificado y clave a un archivo
   openssl_x509_export_to_file($CertX509, '/home/francisco/Publico/MiCertificado.x509');
   openssl_pkey_export_to_file($ClavePrivada, '/home/francisco/Publico/MiClave.priv');
 
   // Se libera la clave y el certificado
   openssl_pkey_free($ClavePrivada);
   openssl_x509_free($CertX509);
?>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License