VerifyData() Linux

Здравствуйте! Подскажите пожалуйста в чем причина!
Я подписал файл через Ezsigner. В своем приложении я получаю массив байтов этого файла и перевожу в base64 строку и извлекаю из этой строки байты, которые буду использовать в VerifyData() .

string base64Str = Convert.ToBase64String(fileDataBytes);
byte[] cms = Encoding.UTF8.GetBytes(base64Str);
int inCertID=1;
byte[] data= new byte[1];
kalkanFlag = (int)KalkanCryptCOMLib.KALKANCRYPTCOM_FLAGS.KC_SIGN_CMS |
(int)KalkanCryptCOMLib.KALKANCRYPTCOM_FLAGS.KC_IN_BASE64 |
(int)KalkanCryptCOMLib.KALKANCRYPTCOM_FLAGS.KC_OUT_BASE64 |
(int)KalkanCryptCOMLib.KALKANCRYPTCOM_FLAGS.KC_WITH_TIMESTAMP;

codeError = VerifyData("", kalkanFlag, ref data[0], data.Length, out cms [0], cms .Length, out outData[0], out outDataLen, out outVerifyInfo[0], out outVerifyInfoLen,inCertID, out outCert[0], out outCertLength);

После вызова метода мое приложение крашится и в оутпуте пишется следующее:
/usr/lib/libkalkanctyptwr-64.so: Undefined symbol: CMS_SignerInfo_get0_sgn

Но если взять пример из sdk , где можно подписать файл с помощью ncaLayer,тогда метод отрабатывает нормально.

Добрый день! Отправьте файл с готовой CMS, на которой рушится на почту knca@pki.gov.kz.

И отправьте полностью код, через который запускаете метод VerifyData()
Проверю и дам знать.

Добрый день!
Я решил проблему просто на отдельный сервер с виртуалки. Но теперь другая проблема подписанный файл с помощью просроченного ключа из sdk , не проходит проверку с добавлением флага KC_NOCHECKCERTTIME.

WARNING! - certificate has expired or is not yet valid.
ERROR 0x8f00042: Load certificate from system store - failed to load root or intermediate certificate. Unable convert to X509

Хотя я поставил корневые сертификаты и тестовые и боевые.
Подскажите куда копать?

Добрый день!

  1. Данная ошибка возникает при вызове метода VerifyData()?
  2. У Вас последнее SDK?
  3. CMS, сформированная не просроченным ключом проверку проходит?
  1. Да при вызове метода verifyData().
  2. sdk последнее.
  3. Если своим личным ключом подписываю, метод отрабатывает нормально
  1. А каким образом Вы установили корневые сертификаты? (В SDK есть инструкция в C\Linux\ca-certs)

А если подписать не просроченным ключом из SDK, каков результат проверки??

1)сертификаты я ставил с C\Linux\ca-certs.
2) Если я подписываю не просроченным ключом то все работает и rsa и gost.Но если я буду подписывать просроченным ключом , который действовал до 27.01.2021 с помощью ncaLayer то ncaLayer с радостью подпишет, да и kalkan под windows c флагом KC_NOCHECKCERTTIME проверит мне эту подпись. С linux мне кидается ошибка:

WARNING! - certificate has expired or is not yet valid.
ERROR 0x8f00042: Load certificate from system store - failed to load root or intermediate certificate. Unable convert to X509

1)Мне интересно может просто нельзя подписывать истекшим ключом?
2) Как же быть если есть подпись сформированная действующим ключом, но к моменту проверки с помощью kalkan ключ этой подписи просрочен?

Все же можно ответить на мои несколько вопросов?

Все же можно ответить на мои несколько вопросов?

На ваши вопросы я ответить не смогу - мы не пользуемся высокоуровневыми вызовами Kalkan, пришлось спуститься на уровень OpenSSL.

  1. Подписывать возможно. Но при проверке будет как раз ошибка о просроченности. На данный момент мы не ставили проверку на просроченность сертификата при формировании CMS. В 2 квартале такая возможность будет.
  2. В методе VerifyData() есть возможность проверки подписей с просроченным сертификатом. А вот в методе X509ValidateCertificate() еще нет возможности отправить флаг. Поэтому в методе X509ValidateCertificate() будет выходить ошибка 0x8f00042 при отправке просроченного сертификата.