Google App Engine с поддержкой PHP 8.3 и устаревшим OpenSSL

Вопрос или проблема

Я изменил версию PHP на PHP 8.3 на платформе Google App Engine и заметил, что Google изменил версию OpenSSL, при этом поддержка устаревших функций по умолчанию отключена.

Я использую файл .p12, созданный в Windows, и когда я попытался вызвать openssl_pkcs12_read, появляется ошибка “error:0308010C:digital envelope routines::unsupported”.

Могу ли я включить поддержку устаревших функций?

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

Ответ или решение

Для решения вашей проблемы с использованием PHP 8.3 на платформе Google App Engine и поддержки OpenSSL Legacy, вам потребуется выполнить следующие шаги.

1. Понимание проблемы

Ошибка "error:0308010C:digital envelope routines::unsupported" связана с изменением поведения OpenSSL в версиях, начиная с 3.0. В этой версии поддержки устаревших функций шифрования по умолчанию отключена. Это влияет на функции PHP, которые зависят от этих устаревших методов, таких как openssl_pkcs12_read для обработки файлов .p12.

2. Включение поддержки Legacy в OpenSSL

OpenSSL предоставляет опцию для включения поддержки Legacy, однако данная опция не всегда доступна в стандартной сборке PHP. Проверьте, поддерживает ли ваш веб-сервер использование пользовательского php.ini для установки параметров OpenSSL. Если вы можете его модифицировать, добавьте следующую строку в ваш php.ini:

openssl.cafile="/path/to/cacert.pem"

3. Изменение кода

Если изменение php.ini не доступно или не решает проблему, вам нужно использовать альтернативные подходы для работы с файлами .p12. Например, вы можете воспользоваться сторонними библиотеками, такими как:

  • phpseclib – это библиотека для работы с криптографией, которая поддерживает более старые форматы файлов.

4. Установка phpseclib

Для установки phpseclib, используйте Composer:

composer require phpseclib/phpseclib

Затем вы можете использовать библиотеку для работы с .p12 файлами:

use phpseclib3\File\PKCS12;

$p12Path = '/path/to/your/file.p12';
$password = 'your_password'; // если у файла есть пароль

try {
    $p12 = PKCS12::load($p12Path, $password);

    // Теперь вы можете использовать данные из $p12
    var_dump($p12);
} catch (\Exception $e) {
    echo 'Ошибка: ' . $e->getMessage();
}

5. Заключение

Если вам необходимо использовать функции OpenSSL, которые больше не поддерживаются, используйте альтернативные библиотеки, как указано выше. Временно включить Legacy поддержку может быть невозможно в вашей среде, и использование сторонних решений часто является более надежным и безопасным вариантом.

Как альтернатива, вы можете рассмотреть возможность выполнения вашей PHP-скриптной логики на локальной машине с установленной более старой версией PHP и OpenSSL, а затем развернуть уже обработанные данные на Google App Engine.

Это даст вам гибкость при обработке криптографических операций, которые требуют устаревших функций.

Оцените материал
Добавить комментарий

Капча загружается...