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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ei-grad  
#1 Оставлено : 4 марта 2015 г. 20:48:24(UTC)
ei-grad

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

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

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

Код:

[ ei-grad@ei-grad ~ ]
→ ./test_cpro 
First call succeed for 12791
Got error: 8009001d
Second call failed for 12793
Second call succeed for 12791


Код:

Код:

/*
gcc -Wall -g -DUNIX -DSIZEOF_VOID_P=8 -I/opt/cprocsp/include test_cpro.c -c -o test_cpro.o && \
gcc test_cpro.o -L/opt/cprocsp/lib/amd64 -lcapi10 -g -o test_cpro
*/

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <string.h>

#include <cpcsp/WinCryptEx.h>


int acquire_crypto_context(void) {

    HCRYPTPROV *hCryptProv; 

    pid_t current_pid = getpid();

    const char PREFIX[] ="\\\\.\\HDIMAGE\\c";
    char container[sizeof(PREFIX) + 21];
    if(snprintf(container, sizeof(PREFIX) + 20, "%s%d", PREFIX, current_pid) < 0)
        return 1;

    hCryptProv = (HCRYPTPROV*) malloc(sizeof(HCRYPTPROV));
    memset(hCryptProv, 0, sizeof(HCRYPTPROV));

    if(!CryptAcquireContext(hCryptProv, container, NULL, PROV_GOST_2001_DH, CRYPT_SILENT)) {
        // if not exist - try to create
        if(!CryptAcquireContext(hCryptProv, container, NULL, PROV_GOST_2001_DH, CRYPT_SILENT|CRYPT_NEWKEYSET)) {
            printf("Got error: %x\n", GetLastError());
            return 1;
        }
    }

    return 0;
}

int main(void) {

    if(acquire_crypto_context()) 
        printf("First call failed for %d\n", getpid());
    else
        printf("First call succeed for %d\n", getpid());
        
    fork();
    
    if(acquire_crypto_context()) 
        printf("Second call failed for %d\n", getpid());
    else
        printf("Second call succeed for %d\n", getpid());
        
    return 0;
}
Offline Максим Коллегин  
#2 Оставлено : 4 марта 2015 г. 21:41:50(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
В текущей архитектуре нужно использовать КС2 и сервис.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Андрей Куликов оставлено 05.09.2015(UTC)
Offline Андрей Куликов  
#3 Оставлено : 5 сентября 2015 г. 23:03:11(UTC)
Андрей Куликов

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

Группы: Участники
Зарегистрирован: 17.10.2010(UTC)
Сообщений: 128
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 2 раз
Поблагодарили: 9 раз в 8 постах
А есть ли надежды на исправление ситуации?
А то казалось бы - да, после форка хэндл инвалидится, но что мешает создать новый хэндл?
Ведь если контекст не создавать до форка - то после форка он прекрасно создается и в паренте и в чайлде.

А то KC2 - это мееедленно. :(

Отредактировано пользователем 5 сентября 2015 г. 23:10:03(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 5 сентября 2015 г. 23:39:50(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Честно говоря, никто пока убедительно не просил.
Знания в базе знаний, поддержка в техподдержке
Offline Андрей Куликов  
#5 Оставлено : 13 сентября 2015 г. 21:34:57(UTC)
Андрей Куликов

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

Группы: Участники
Зарегистрирован: 17.10.2010(UTC)
Сообщений: 128
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 2 раз
Поблагодарили: 9 раз в 8 постах
Максим, засчитайте мой голос пожалуйста первым.
Все кто пользуются nginx в связве с энджайном к OpenSSL, уверен, выстроятся за мной в очередь.
Offline Максим Коллегин  
#6 Оставлено : 14 сентября 2015 г. 8:55:47(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Хорошо.
К openssl engine пока есть очень много вопросов, если мы решим их фиксить, тогда и с fork, думаю, разберемся.
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.