php curl сертификат: curlopt_certinfo: где скрывается серийный номер?

Скручиваемость и вывод: не могу найти серийный номер сертификата.

<?php
$curl = curl_init('https://www.comodo.com/');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_CERTINFO, true);
curl_setopt($curl, CURLOPT_VERBOSE, 1);curl_exec($curl);

$info = curl_getinfo($curl);
$certs = $info["certinfo"];
?> <pre><?php echo var_dump($certs) ?></pre>

где скрывается серийный номер сертификата? не могу найти это
в этом примере ответ должен быть:
26: 32: AC: 57: 23: 86: 91: BB: d5: 88: D3: D8: Е9: ДА: 0B: 4E

примечание: извлекаются другие переменные сертификата, за исключением того, что они не содержат серийный номер сертификата.

1

Решение

Вот одно из решений. Curl обеспечивает доступ к оригинальному сертификату в кодировке Base64,
так что вы можете разобрать его с помощью openssl_x509_parse()
чтобы получить серийный номер в виде целой строки:

<?php
$curl = curl_init('https://www.comodo.com/');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_CERTINFO, true);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_exec($curl);

$certInfo   = curl_getinfo($curl, CURLINFO_CERTINFO);
$rawCert    = $certInfo[0]['Cert'];
$parsedCert = openssl_x509_parse($rawCert);
$serialNum  = $parsedCert['serialNumber'];

var_dump($serialNum);

Это выведет:

string(38) "50773774161050170991724859325180152654"

Это слишком велико для dechex() конвертировать в гекс.
Вместо этого вы можете использовать этот код
который требует BCMath расширение:

function bcdechex($dec)
{
$hex = '';
do {
$last = bcmod($dec, 16);
$hex = dechex($last) . $hex;
$dec = bcdiv(bcsub($dec, $last), 16);
} while ($dec > 0);
return $hex;
}

$serialNumHex = bcdechex($serialNum);
$serialNumHex = chunk_split($serialNumHex, 2, ':');
$serialNumHex = trim($serialNumHex, ':');

var_dump($serialNumHex);

Это выведет:

string(47) "26:32:ac:57:23:86:91:bb:d5:88:d3:d8:e9:da:0b:4e"
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]