Openssl x509 parse: примеры (PHP)
openssl_x509_parse(OpenSSLCertificate|string $certificate, bool $short_names = true): array|falseФункция openssl_x509_parse предназначена для анализа и разбора сертификата X.509. Она используется, когда требуется получить структурированную информацию о сертификате: данные о субъекте, издателе, сроках действия, публичном ключе и расширениях.
- certificate (обязательный) – принимает сертификат в формате, поддерживаемом OpenSSL. Это может быть строковый ресурс, содержащий PEM или DER данные, или путь к файлу с сертификатом.
- short_names (опциональный, по умолчанию
true) – булево значение. Если установлено вtrue, поля в результирующем массиве будут иметь короткие имена. Приfalseиспользуются длинные описательные имена.
Функция возвращает ассоциативный массив с данными сертификата или false в случае неудачи.
<?
$cert = '-----BEGIN CERTIFICATE-----
MIIF... (содержимое сертификата)
-----END CERTIFICATE-----';
$parsed = openssl_x509_parse($cert);
print_r($parsed);
?>Array
(
[name] => /C=US/ST=...
[subject] => Array
(
[C] => US
[ST] => ...
)
[hash] => a1b2c3d4
...
)<?
$parsed = openssl_x509_parse($cert, false);
print_r($parsed['subject']);
?>Array
(
[countryName] => US
[stateOrProvinceName] => ...
)<?
$parsed = openssl_x509_parse(file_get_contents('cert.pem'));
echo $parsed['validFrom_time_t'];
?>1698765432
Создает ресурс сертификата для других функций OpenSSL. Используется, когда нужно выполнить несколько операций с одним сертификатом, чтобы не разбирать его повторно.
Проверяет, может ли сертификат использоваться для конкретной цели (например, веб-сервера). Предпочтительнее для валидации назначения.
Проверяет цифровую подпись сертификата с помощью публичного ключа. Применяется для проверки подлинности.
Функцию openssl_x509_parse выбирают для извлечения и анализа метаданных сертификата, тогда как другие функции ориентированы на конкретные операции.
<?
$result = openssl_x509_parse('not a certificate');
var_dump($result);
?>bool(false)
Функция возвращает false, если данные не являются валидным сертификатом.
<?
$parsed = openssl_x509_parse('nonexistent.pem');
if ($parsed === false) {
echo 'Ошибка разбора';
}
?>Ошибка разбора
При передаче пути функция ожидает содержимое файла, а не путь. Нужно сначала прочитать файл.
В PHP 8.0 функция стала возвращать дополнительное поле purposes, содержащее информацию о возможных назначениях сертификата из расширения keyUsage. Также улучшена обработка ошибок.
В PHP 8.1 добавлена более строгая типизация аргументов.
<?
$parsed = openssl_x509_parse($cert);
if (isset($parsed['extensions']['subjectAltName'])) {
echo $parsed['extensions']['subjectAltName'];
}
?>DNS:example.com, DNS:www.example.com
<?
$certs = [$cert1, $cert2]; // массив PEM-сертификатов
foreach ($certs as $pem) {
$parsed = openssl_x509_parse($pem);
echo $parsed['subject']['CN'] . ' - ' . $parsed['issuer']['CN'] . "\n";
}
?>example.com - GlobalSign Root CA GlobalSign Root CA - GlobalSign Root CA
<?
$parsed = openssl_x509_parse($cert);
$now = time();
if ($now > $parsed['validTo_time_t']) {
echo 'Сертификат просрочен';
}
?>Сертификат просрочен
from cryptography import x509
from cryptography.hazmat.backends import default_backend
pem_data = open('cert.pem', 'rb').read()
cert = x509.load_pem_x509_certificate(pem_data, default_backend())
print(cert.subject)<Name(C=US,ST=...)>
Библиотека предоставляет объектно-ориентированный интерфейс.
const crypto = require('crypto');
const pem = fs.readFileSync('cert.pem');
const cert = new crypto.X509Certificate(pem);
console.log(cert.subject);/C=US/ST=...
Встроенный модуль, доступен с Node.js 15.6.0.
Openssl x509 parse в MySQL
Прямого аналога нет. Для извлечения данных из сертификатов используются функции CREATE_ASYMMETRIC_PRIV_KEY и атрибуты, но не для детального разбора.