Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kuznetsovin  
#1 Оставлено : 30 мая 2017 г. 12:43:41(UTC)
kuznetsovin

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2017(UTC)
Сообщений: 6

Добрый день.

Я пытаюсь программно открыть хранилище сертификатов ROOT на MacOS и Linux.
При вызове функции CertOpenStore я получаю ошибку: Segmentation fault: 11.

Код вызова приведен ниже:
Код:

#include <stdio.h>
#include <stdlib.h>
#include <CSP_WinDef.h>
#include <CSP_WinCrypt.h>
#include <WinCryptEx.h>

# define ROOT_STORE L"ROOT"

int main(int argc, char **argv) {

  HCERTSTORE hCertStore = NULL;
  
  hCertStore = CertOpenStore(
        CERT_STORE_PROV_SYSTEM,
        0,
        0,
        CERT_STORE_OPEN_EXISTING_FLAG,
        ROOT_STORE);

  if (hCertStore) {
    printf("Store was open.\n");
  } else {
    perror("Error open store");
  }

  return 0;
}



Так же я пробовал вместо CertOpenStore использовать CertOpenSystemStoreW, но при этом я получил ошибку: Error open store: No such file or directory

Код вызова привожу ниже:

Код:

#include <stdio.h>
#include <stdlib.h>
#include <CSP_WinDef.h>
#include <CSP_WinCrypt.h>
#include <WinCryptEx.h>

# define ROOT_STORE L"ROOT"

int main(int argc, char **argv) {

  HCERTSTORE hCertStore = NULL;
  
  hCertStore = CertOpenSystemStoreW(
         0,
         ROOT_STORE);

  if (hCertStore) {
    printf("Store was open.\n");
  } else {
    perror("Error open store");
  }

  return 0;
}

Offline Русев Андрей  
#2 Оставлено : 30 мая 2017 г. 21:58:04(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,271

Сказал(а) «Спасибо»: 22 раз
Поблагодарили: 446 раз в 325 постах
В состав дистрибутива входит пакет разработчика (cprocsp-devel), в него также входят примеры использования КриптоПро CSP (см. /opt/cprocsp/src/doxygen). Если проблемы будут продолжаться, присылайте дамп или лучше стек вызова при крэше из gdb.
Официальная техподдержка. Официальная база знаний.
Offline kuznetsovin  
#3 Оставлено : 31 мая 2017 г. 9:17:04(UTC)
kuznetsovin

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2017(UTC)
Сообщений: 6

Пример из документации тоже падают с аналогичной ошибкой.

При крэше gdb выдает следующий стек:

Код:

[New Thread 0x1c03 of process 2306]
Error calling thread_get_state for GP registers for thread 0x1c03
warning: Mach error at "i386-darwin-nat.c:123" in function "void i386_darwin_fetch_inferior_registers(struct target_ops *, struct regcache *, int)": (os/kern) invalid argument (0x4)
[New Thread 0x150b of process 2306]
warning: unhandled dyld version (15)
Error open store: No such file or directory
[Inferior 1 (process 2306) exited normally]


Дамп под MacOS к сожалению снять не получилось.

P. S. Я попробовал на MAcOS посмотреть список серфитикатов через certmgr:

Код:
./certmgr -list -store uroot

на что получил на выходе следующее:
Код:

Certmgr 1.0 (c) "CryptoPro",  2007-2010.
program for managing certificates, CRLs and stores

Failed to open store

The system cannot find the file specified.
[ErrorCode: 0x00000002]
Offline simon  
#4 Оставлено : 1 июня 2017 г. 13:56:38(UTC)
simon

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 11.07.2016(UTC)
Сообщений: 10
Российская Федерация
Откуда: Москва

Попробуйте свой пример с крэшем запустить через gdb --args ./test, затем выполнить run и после крэша вызвать команду where, и отправить, что содержится в стэке. Также было бы полезно знать версию CSP, ОС и её версию, версию компиляторов, использовавшихся при сборке примера.

Отредактировано пользователем 1 июня 2017 г. 13:57:08(UTC)  | Причина: Не указана

Offline kuznetsovin  
#5 Оставлено : 1 июня 2017 г. 14:54:59(UTC)
kuznetsovin

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2017(UTC)
Сообщений: 6

Все на Mac OS заработало, проблема была в том, что при компиляции я не указал
Код:
-lpthread
.

Но теперь у меня возникла проблема, с компиляцией данного кода под Ubuntu 14.05 LTS server, с помощью команды:

Код:

CSP_INCLUDE=/opt/cprocsp/include
CSP_LIB=/opt/cprocsp/lib/amd64
SIZEOF_VOID_P=8

gcc -DUNIX -DHAVE_LIMITS_H -DHAVE_STDIN_H -I$(CSP_INCLUDE) -I$(CSP_INCLUDE)/cpcsp -I$(CSP_INCLUDE)/asn1c/rtsrc -I$(CSP_INCLUDE)/asn1data -DSIZEOF_VOID_P=$(SIZEOF_VOID_P) -g -L$(CSP_LIB) -lssp -lcapi10 -lcapi20 -lrdrsup -lpthread -o cpcsp $(INPUT_FILE)


у меня выпадает ошибка:

Код:

/tmp/cceWXcfM.o: In function `main':
/media/sf_gisee-libsignature/lib/cpcsp.c:46: undefined reference to `CertOpenSystemStoreA'
collect2: error: ld returned 1 exit status
make: *** [all] Ошибка 1


Подскажите, пожалуйста, в чем может быть проблема?

P.S.
На Mac OS с данной командой все компилирует и отрабатывает корректно.
Библиотека lsb-cprocsp-devel_4.0.0-4_all.deb установлена.

Отредактировано пользователем 1 июня 2017 г. 14:59:45(UTC)  | Причина: Не указана

Offline kuznetsovin  
#6 Оставлено : 16 июня 2017 г. 20:07:08(UTC)
kuznetsovin

Статус: Новичок

Группы: Участники
Зарегистрирован: 30.05.2017(UTC)
Сообщений: 6

Проблема компиляции решалась, изменением последовательности параметров. Поставил библиотеки после параметра -o. И все заработало.
Код:
gcc -DUNIX -DHAVE_LIMITS_H -DHAVE_STDIN_H -I$(CSP_INCLUDE) -I$(CSP_INCLUDE)/cpcsp -I$(CSP_INCLUDE)/asn1c/rtsrc -I$(CSP_INCLUDE)/asn1data -DSIZEOF_VOID_P=$(SIZEOF_VOID_P) -g -o cpcsp $(INPUT_FILE) -L$(CSP_LIB) -lssp -lcapi10 -lcapi20 -lrdrsup -lpthread
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.