2011-06-21 94 views
6

我需要在SSL證書的網頁指紋中顯示。 在PHP中可能嗎?功能PHP SSL證書指紋

openssl_x509_parse 

不返回SHA1和MD5指紋。 如何解決這個問題? 謝謝。

回答

1

我猜最簡單的方法將是通過系統

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

調用OpenSSL和是的,我知道,這是沒有像這樣做的乾淨的方式 - 但是,它是唯一一個我能想到我的頭頂!

+0

恐怕如果使用system或exec - works會依賴於OS。爲此,我嘗試僅使用OpenSSL的PHP​​函數 –

13

我想你可以生成SHA指紋用下面的代碼:

$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

非常適合我,謝謝。 –

4

這裏是一個更好的解決方案:

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

從PHP 5.6起,您可以使用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 

這個功能目前無證,但是這將固定在釋放時間;這是函數簽名:

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