Openssl x509 fingerprint: примеры (PHP)
openssl_x509_fingerprint(OpenSSLCertificate|string $certificate, string $digest_algo = "sha1", bool $binary = false): string|falseОсновная информация о функции
Функция openssl_x509_fingerprint() вычисляет отпечаток (fingerprint) сертификата X.509. Отпечаток представляет собой хеш-сумму сертификата в удобочитаемом формате и используется для быстрой проверки подлинности или сравнения сертификатов.
Функция применяется для проверки целостности сертификатов, сравнения сертификатов между собой, создания уникальных идентификаторов сертификатов в системах, а также для отладки и логирования SSL/TLS соединений.
$certificate (обязательный) - ресурс сертификата X509 или строка, содержащая сертификат в формате PEM.
$digest_algo (опциональный) - алгоритм хеширования. По умолчанию 'sha1'. Возможные значения: 'sha1', 'sha256', 'sha384', 'sha512', 'md5'.
$binary (опциональный) - если установлено в true, возвращает бинарные данные, иначе возвращает шестнадцатеричную строку. По умолчанию false.
Простые примеры использования
Вычисление SHA1 отпечатка:
$cert = '-----BEGIN CERTIFICATE-----
MIIE... (содержимое сертификата)
-----END CERTIFICATE-----';
$fingerprint = openssl_x509_fingerprint($cert);
echo $fingerprint;b1df3b92a4118388a4c9a5c0c7f5c8e9b1a2b3c4
$cert = openssl_x509_read($certPem);
$sha256 = openssl_x509_fingerprint($cert, 'sha256');
$sha512 = openssl_x509_fingerprint($cert, 'sha512', false);
$md5_bin = openssl_x509_fingerprint($cert, 'md5', true);SHA256: 4f3b2... (64 символа) SHA512: 8c7a6... (128 символов) MD5 бинарный: (бинарные данные 16 байт)
Альтернативные функции в PHP
Извлекает детальную информацию о сертификате, включая отпечаток в поле 'serialNumber'. Используется, когда нужна полная информация о сертификате, а не только отпечаток.
Можно вручную вычислить хеш, прочитав сертификат. Менее удобно, но дает больше контроля над процессом хеширования.
openssl_x509_fingerprint оптимальна для быстрого получения отпечатка. openssl_x509_parse лучше подходит для комплексного анализа сертификата.
Типичные ошибки
$fingerprint = openssl_x509_fingerprint('invalid_cert');Warning: openssl_x509_fingerprint(): supplied parameter cannot be coerced into an X509 certificate!
$fingerprint = openssl_x509_fingerprint($cert, 'sha999');Warning: openssl_x509_fingerprint(): Unknown signature algorithm
$fingerprint = openssl_x509_fingerprint(null);TypeError: openssl_x509_fingerprint(): Argument #1 ($certificate) must be of type OpenSSLCertificate|string, null given
Изменения в версиях PHP
Параметр $certificate теперь принимает union тип OpenSSLCertificate|string вместо ресурса. Усилена типизация аргументов.
Добавлена поддержка алгоритма 'sha384' в параметре $digest_algo.
Улучшены сообщения об ошибках при передаче некорректных алгоритмов хеширования.
Расширенные примеры
function compareCertificates($cert1, $cert2) {
$fp1 = openssl_x509_fingerprint($cert1, 'sha256');
$fp2 = openssl_x509_fingerprint($cert2, 'sha256');
return hash_equals($fp1, $fp2);
}$cert = file_get_contents('certificate.pem');
$id = 'cert_' . openssl_x509_fingerprint($cert, 'sha256', false);
// Использование $id как ключа в базе данных или кэше$chain = [/* массив сертификатов */];
$fingerprints = [];
foreach ($chain as $cert) {
$fingerprints[] = [
'cert' => $cert,
'sha256' => openssl_x509_fingerprint($cert, 'sha256')
];
}$algorithms = ['sha1', 'sha256', 'sha384', 'sha512', 'md5'];
$results = [];
foreach ($algorithms as $algo) {
$results[$algo] = openssl_x509_fingerprint($cert, $algo);
}$binaryFp = openssl_x509_fingerprint($cert, 'sha256', true);
$length = strlen($binaryFp); // 32 байта для SHA256
$hexRepresentation = bin2hex($binaryFp);$expectedFp = 'известный_отпечаток';
$actualFp = openssl_x509_fingerprint($selfSignedCert, 'sha256');
if (hash_equals($expectedFp, $actualFp)) {
// Сертификат доверенный
}Альтернативы в других языках
from cryptography import x509
from cryptography.hazmat.primitives import hashes
cert = x509.load_pem_x509_certificate(pem_data)
fingerprint = cert.fingerprint(hashes.SHA256()).hex()const crypto = require('crypto');
const cert = '-----BEGIN CERTIFICATE-----...';
const hash = crypto.createHash('sha256');
hash.update(cert);
const fingerprint = hash.digest('hex');Openssl x509 fingerprint в MySQL
Прямых аналогов нет. Обычно вычисление происходит на уровне приложения.
В Python библиотека cryptography предоставляет более объектно-ориентированный подход. В Node.js используется стандартный модуль crypto. PHP функция более специализирована для работы именно с X.509.
PHP openssl_x509_fingerprint function comments
- Php openssl x509 fingerprint - аргументы и возвращаемое значение
- Функция php openssl_x509_fingerprint - описание
- openssl x509 fingerprint - примеры
- openssl x509 fingerprint - похожие методы на php
- openssl_x509_fingerprint на js, python, mysql
- openssl x509 fingerprint изменения php
- Примеры openssl_x509_fingerprint на php