8

我需要在 SSL 证书的网页指纹中显示。在PHP中可以吗?功能

openssl_x509_parse

不返回 SHA1 和 MD5 指纹。如何解决这个问题?谢谢。

4

5 回答 5

14

我认为您可以使用以下代码生成 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);
}
于 2011-07-22T08:03:49.970 回答
5

这是一个更好的解决方案:

 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);
 }
于 2012-03-06T23:07:10.707 回答
4

从 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 ] ] )
于 2014-07-30T03:25:46.533 回答
3

我猜最简单的方法是通过系统调用 openssl

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

是的,我知道,这绝不是一种干净的方式——然而,这是我唯一能想到的方式!!!

于 2011-06-21T15:14:40.217 回答
0

根据您的信息,我用 PHP 编写了一个小型证书查看器

用作烘焙您自己的查看器的起点。

于 2013-03-16T19:50:01.147 回答