Ошибка [SIGSEGV] в KalcanCrypt[php] при вызове X509LoadCertificateFromBuffer

Здравствуйте.
при вызове KalkanCrypt_X509LoadCertificateFromBuffer($cert, $encodeType), php-fpm падает с ошибкой [SIGSEGV]

в $cert передаю содержимое файла сертификата (например root_gost.pem)
в $encodeType передаю флаг кодировки KC_CERT_PEM = 0x102;

текущая версия php 8.0.26 fpm
установлены libltdl-dev libpcsclite-dev
KalcanCrypt [NTS] для php 8.0
версия SDK2.0 от 2023-02-01

поведение индентично на версиях php 7.4 | 8.0 | 8.0.1 | 8.0.2 | 8.0.3 | 8.0.29 | 8.0.30

Если загрузка сертификатов производится из файлов, или из хранилища - ошибок нет.

Только что обновил SDK. Ошибка также присутсвтует.

php: 8.2 fpm

libs:

  • libltdl-dev
  • libpcsclite-dev

KalcanCrypt 2.0.8 [NTS] для php 8.2
SDK version from 2023-07-13

Здравствуйте! Да, имеет место быть такой проблеме. Спасибо за обратную связь! В следующих обновлениях исправим.

печаль.
Если еще ошибки найду отдельными постами публиковать или в эту тему?

думаю, лучше отдельными

2 Симпатий

Кстати, если занимаетесь исправлением этой ошибки.
Подскажите почему в методе загрузки из файла нужно указывать тип сертификата (промежуточный или корневой), а в этом не требуется, но требуется указать кодировку.

В методе загрузки из файле загружаем как промежуточный, корневой или пользовательский. А в этом загружаем только как пользовательский сертификат.

Если загружать корневые и промежуточные сертификаты методом LoadCertificateFromFile с флагом KC_CERT_USER(0x204), то при подписании библиотека не видит эти сертификаты и пытается искать в системе.

В связи с этим вопрос - какое поведение будет в свете отсутствия данного флага у загрузки из буфера и сможет ли KalkanCrypt построит цепь из загруженного?

Для загрузки именно промежуточного сертификата, используется флаг: KC_CERT_INTERMEDIATE
Для корневого же - KC_CERT_CA
Иначе, из файла, сертификаты не попадут в библиотеку KalkanCrypt

Ок. Но если этот метод LoadCertificateFromBuffer загружает всё как пользовательские - то как его использовать?

Метод LoadCertificateFromBuffer загружает только пользовательский сертификат в память.
Не совсем понял вопрос, что имеете ввиду под “как его использовать?”

Ок. Добавьте пожалуйста это в документацию или переименуйте метод (например в LoadUserCertificateFromBuffer) так как это крайне не очевидно.
Я изначально полагал, что просто есть два способа загрузки из файла или из буфера. Но как оказалось есть ньюанс.

Данияр извиняюсь за офтоп но кажется на этом форуме кроме вас никого не бывает, не поможете ли с этим вопросом , благодарю :pray::pray::pray:

Добрый день! Заново выпустить новые ключи ЭЦП.

1 Симпатия