2011-06-21 14 views
6

Necesito mostrar en la página web las huellas dactilares del certificado SSL. ¿Es posible en PHP? La funciónPHP SSL Certificate Fingerprint

openssl_x509_parse 

no devuelve las huellas dactilares SHA1 y MD5. ¿Cómo resolver este problema? Gracias.

Respuesta

1

supongo que la forma más fácil va a ser para llamar openssl a través del sistema

$fingerprint = str_replace("SHA1 Fingerprint=", '', system('openssl x509 -noout -in /path/to/your/cert.pem -fingerprint')); 

Y sí, lo sé, esto no es nada como una forma limpia de hacer esto - sin embargo, es el único Puedo pensar en la parte superior de mi cabeza!

+0

Me temo que si el sistema de uso o la ejecución dependen del sistema operativo. Para esto trato de usar solo funciones de PHP para OpenSSL –

13

Creo que se puede generar la huella digital SHA con el siguiente código:

$resource = openssl_x509_read($certificate); 

$fingerprint = null; 
$output = null; 

$result = openssl_x509_export($resource, $output); 
if($result !== false) { 
    $output = str_replace('-----BEGIN CERTIFICATE-----', '', $output); 
    $output = str_replace('-----END CERTIFICATE-----', '', $output); 

    $output = base64_decode($output); 

    $fingerprint = sha1($output); 
} 
+0

Me funcionó muy bien, gracias. –

4

Aquí es una solución mejor:

function sha1_thumbprint($file) 
{ 
    $file = preg_replace('/\-+BEGIN CERTIFICATE\-+/','',$file); 
    $file = preg_replace('/\-+END CERTIFICATE\-+/','',$file); 
    $file = trim($file); 
    $file = str_replace(array("\n\r","\n","\r"), '', $file); 
    $bin = base64_decode($file); 
    return sha1($bin); 
} 
1

Desde PHP 5.6 en adelante, puede utilizar openssl_x509_fingerprint():

$cert = openssl_x509_read($certificate); 
$sha1_hash = openssl_x509_fingerprint($cert); // sha1 hash 
$md5_hash = openssl_x509_fingerprint($cert, 'md5'); // md5 hash 

La función está documentada actualmente, pero este problema se solucionará en el momento de la liberación; esta es la firma de la función:

openssl_x509_fingerprint($cert [, $hash_method = "sha1" [, $raw_output = false ] ]) 
Cuestiones relacionadas