Openssl x509 export to file: примеры (PHP)
openssl_x509_export_to_file(OpenSSLCertificate|string $certificate, string $output_filename, bool $no_text = true): boolФункция openssl_x509_export_to_file() используется для экспорта сертификата X.509 в файл. Это полезно для сохранения сертификатов, полученных из различных источников, в формате PEM для последующего использования или распространения.
Функция применяется в сценариях работы с шифрованием, SSL/TLS, цифровой подписью, когда требуется сохранить сертификат на диск.
Сигнатура функции:
bool openssl_x509_export_to_file(mixed $certificate, string $output_filename, bool $no_text = true)
Аргументы:
- $certificate – Сертификат X.509. Может быть ресурсом, строкой с данными в формате PEM или DER, или массивом, возвращаемым функциями OpenSSL.
- $output_filename – Путь к файлу, в который будет сохранен сертификат в формате PEM.
- $no_text – Опциональный аргумент. Если установлен в
false, в вывод добавляются человекочитаемые комментарии (например, информация о субъекте и издателе). По умолчаниюtrue– выводятся только данные сертификата.
Возвращаемое значение: true в случае успеха, false при неудаче.
$certData = '-----BEGIN CERTIFICATE-----
MIID... (данные сертификата) ...
-----END CERTIFICATE-----';
$result = openssl_x509_export_to_file($certData, 'certificate.pem');
var_dump($result);bool(true)
$cert = openssl_csr_sign(
openssl_csr_new(["commonName" => "example.com"], $privKey),
null,
$privKey,
$days=365
);
$result = openssl_x509_export_to_file($cert, 'cert_with_text.pem', false);// Файл 'cert_with_text.pem' содержит: // Certificate: // Data: // Version: 3 (0x2) // Serial Number: // 10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6 // ... // -----BEGIN CERTIFICATE----- // MIID... // -----END CERTIFICATE-----
$certResource = openssl_x509_read(file_get_contents('source.crt'));
$result = openssl_x509_export_to_file($certResource, 'exported.crt');bool(true)
- openssl_x509_export() – Экспортирует сертификат в строку вместо файла. Используется, когда результат нужен в переменной для дальнейшей обработки.
- openssl_pkcs12_export_to_file() – Экспортирует сертификат и закрытый ключ в файл PKCS#12 (.pfx или .p12). Предпочтительнее для безопасного хранения пары ключ-сертификат.
- file_put_contents() в комбинации с openssl_x509_export() – Альтернативный способ записи, предоставляющий больше контроля над процессом (например, обработка ошибок записи).
Выбор функции зависит от задачи: для быстрого сохранения в файл подходит openssl_x509_export_to_file(), для работы с данными в памяти – openssl_x509_export().
$result = openssl_x509_export_to_file($cert, '/nonexistent_folder/cert.pem');
var_dump($result); // false
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}bool(false) // Сообщения об ошибках OpenSSL могут отсутствовать. // Ошибка связана с файловой системой.
$invalidCert = 'not a certificate';
$result = openssl_x509_export_to_file($invalidCert, 'bad.pem');
if ($result === false) {
echo openssl_error_string();
}error:0909006C:PEM routines:get_name:no start line
$result = openssl_x509_export_to_file($cert, '/root/cert.pem'); // Запуск скрипта не от root
var_dump($result);bool(false)
Функция была добавлена в PHP 5.2.2. Значительных изменений в ее сигнатуре не происходило. Поведение функции зависит от версии связанной библиотеки OpenSSL.
В PHP 8.0 функция строго типизирована: аргумент $no_text ожидает тип bool. Передача небулевых значений может приводить к предупреждениям.
Рекомендуется использовать актуальные версии PHP и OpenSSL для обеспечения поддержки современных алгоритмов и исправления уязвимостей.
$certs = [
'cert1' => $data1,
'cert2' => $data2
];
foreach ($certs as $name => $data) {
$filename = sprintf("certs/%s_%s.pem", $name, date('Ymd'));
if (openssl_x509_export_to_file($data, $filename)) {
echo "Сертификат {$name} экспортирован в {$filename}\n";
}
}// Предполагаем, что $fullChain - массив сертификатов, где первый - конечный, остальные - цепочка.
$fullChain = [$leafCert, $intermediateCert, $rootCert];
$outputContent = '';
foreach ($fullChain as $cert) {
openssl_x509_export($cert, $pem);
$outputContent .= $pem; // Конкатенация PEM-блоков
}
file_put_contents('fullchain.pem', $outputContent);
// В этом случае openssl_x509_export_to_file не подходит для всей цепочки, нужен обход.$tempFile = tempnam(sys_get_temp_dir(), 'cert');
if (openssl_x509_export_to_file($cert, $tempFile)) {
chmod($tempFile, 0600); // Только для владельца на чтение/запись
echo "Сертификат сохранен в {$tempFile} с правами 0600\n";
}$derData = file_get_contents('certificate.der');
// Конвертация DER в PEM перед экспортом
$pemData = "-----BEGIN CERTIFICATE-----\n" .
chunk_split(base64_encode($derData)) .
"-----END CERTIFICATE-----";
$result = openssl_x509_export_to_file($pemData, 'from_der.pem');function exportValidCert($cert, $filename) {
if (openssl_x509_checkpurpose($cert, X509_PURPOSE_SSL_SERVER)) {
return openssl_x509_export_to_file($cert, $filename);
}
return false;
}
$result = exportValidCert($cert, 'valid_server_cert.pem');from cryptography import x509
from cryptography.hazmat.primitives import serialization
with open("source.crt", "rb") as f:
pem_data = f.read()
cert = x509.load_pem_x509_certificate(pem_data)
with open("exported.pem", "wb") as f:
f.write(cert.public_bytes(serialization.Encoding.PEM))const fs = require('fs');
const crypto = require('crypto');
const pem = fs.readFileSync('source.crt', 'utf8');
const cert = new crypto.X509Certificate(pem);
fs.writeFileSync('exported.pem', cert.toString());Openssl x509 export to file в MySQL
В MySQL нет прямой аналогии, но можно хранить сертификаты в таблицах с типом данных TEXT и использовать функции LOAD_FILE() для импорта из файла.
CREATE TABLE certs (id INT, cert_data TEXT);
INSERT INTO certs VALUES (1, LOAD_FILE('/tmp/certificate.pem'));Отличия: В PHP функция является частью встроенного расширения OpenSSL. Python и Node.js требуют установки дополнительных модулей или используют встроенные библиотеки. PHP функция работает непосредственно с ресурсами OpenSSL, что обеспечивает тесную интеграцию.
PHP openssl_x509_export_to_file function comments
- Php openssl x509 export to file - аргументы и возвращаемое значение
- Функция php openssl_x509_export_to_file - описание
- openssl x509 export to file - примеры
- openssl x509 export to file - похожие методы на php
- openssl_x509_export_to_file на js, python, mysql
- openssl x509 export to file изменения php
- Примеры openssl_x509_export_to_file на php