我需要在SSL证书的网页指纹中显示。 在PHP中有可能吗?功能
openssl_x509_parse
不返回SHA1和MD5指纹。 怎么解决这个问题? 感谢。
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:3)
从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 ] ] )
答案 3 :(得分:1)
我猜最简单的方法是通过系统调用openssl
$fingerprint = str_replace("SHA1 Fingerprint=", '', system('openssl x509 -noout -in /path/to/your/cert.pem -fingerprint'));
是的,我知道,这并不是一种干净的方式 - 但是,这是我能想到的唯一一个我的头脑!
答案 4 :(得分:0)