Openssl x509 read: примеры (PHP)

Функция openssl_x509_read в PHP 8: примеры и применение
Раздел: Шифрование (OpenSSL)
openssl_x509_read(OpenSSLCertificate|string $certificate): OpenSSLCertificate|false
Функция openssl_x509_read

Функция openssl_x509_read обрабатывает сертификат X.509 и возвращает объект класса OpenSSLCertificate для дальнейших операций. Использование происходит при работе с криптографией, проверке цифровых подписей, аутентификации в SSL/TLS соединениях и обработке цепочек сертификатов.

Аргументы функции
  • certificate – сертификат X.509 в форматах PEM или DER. Передаётся строкой, ресурсом или объектом OpenSSLCertificate.
  • public_key – необязательный параметр. В версиях PHP до 8.0 использовался для указания публичного ключа, сейчас игнорируется.
Примеры применения
Чтение сертификата из строки PEM
$certPem = "-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoRRS7lFZ56MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTIwNTE1MTQ0MzUzWhcNMTMwNTE1MTQ0MzUzWjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAzLQ6cQ/3H1hVrK5Tp1dJNp6vN6KzK6K6K6K6K6K6K6K6K6K6K6K6K6K6
...
-----END CERTIFICATE-----";
$cert = openssl_x509_read($certPem);
var_dump($cert);
object(OpenSSLCertificate)#1 (0) {
}
Загрузка из файла DER
$certDer = file_get_contents('certificate.der');
$cert = openssl_x509_read($certDer);
if ($cert) {
    echo 'Сертификат прочитан';
}
Сертификат прочитан
Похожие функции PHP
  • openssl_x509_parse – извлекает данные сертификата в массив. Используется для получения информации, а не объекта.
  • openssl_x509_checkpurpose – проверяет возможность использования сертификата для определённых задач.
  • openssl_x509_export – преобразует объект сертификата обратно в строку PEM. Применяется для сериализации.
Типичные ошибки
Неверный формат данных
$wrongData = 'invalid certificate';
$cert = openssl_x509_read($wrongData);
if ($cert === false) {
    echo openssl_error_string();
}
error:0909006C:PEM routines:get_name:no start line
Передача несуществующего файла
$cert = openssl_x509_read(file_get_contents('missing.der'));
if ($cert === false) {
    echo 'Файл не найден';
}
Файл не найден
Изменения в PHP

В PHP 8.0.0 функция стала возвращать объект OpenSSLCertificate вместо ресурса. Параметр public_key перестал использоваться. В PHP 8.2.0 добавлены строгие типы для аргументов.

Расширенные примеры
Обработка цепочки сертификатов
Пример php
$pemChain = file_get_contents('chain.pem');
$certs = [];
while ($cert = openssl_x509_read($pemChain)) {
    $certs[] = $cert;
    $pemChain = substr($pemChain, strpos($pemChain, '-----END CERTIFICATE-----') + 25);
}
foreach ($certs as $cert) {
    $parsed = openssl_x509_parse($cert);
    echo $parsed['subject']['CN'] . "\n";
}
Root CA
Intermediate CA
Server Certificate
Валидация подписи сертификата
Пример php
$caCert = openssl_x509_read(file_get_contents('ca.pem'));
$serverCert = openssl_x509_read(file_get_contents('server.pem'));
$valid = openssl_x509_verify($serverCert, $caCert);
echo $valid === 1 ? 'Подпись верна' : 'Ошибка проверки';
Подпись верна
Извлечение публичного ключа
Пример php
$cert = openssl_x509_read($pemData);
$key = openssl_pkey_get_public($cert);
$details = openssl_pkey_get_details($key);
echo $details['key'];
-----BEGIN PUBLIC KEY-----...
Аналоги в других языках

Openssl x509 read в Python

from cryptography import x509
from cryptography.hazmat.backends import default_backend

pem_data = b"-----BEGIN CERTIFICATE-----..."
cert = x509.load_pem_x509_certificate(pem_data, default_backend())
print(cert.subject)
<Name(CN=example.com)>
JavaScript (Node.js)
const crypto = require('crypto');
const certPem = `-----BEGIN CERTIFICATE-----...`;
const cert = new crypto.X509Certificate(certPem);
console.log(cert.subject);
C=US, O=Example, CN=example.com

Openssl x509 read в MySQL

Функции для работы с SSL в MySQL сосредоточены на управлении подключениями, например, CREATE SSL для генерации сертификатов.

PHP openssl_x509_read function comments

En
Openssl x509 read Parses an X.509 certificate and returns an object for it