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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline i25061  
#1 Оставлено : 28 февраля 2013 г. 8:30:20(UTC)
i25061

Статус: Участник

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
КриптоПро CSP, версия ядра СКЗИ: 3.6.5359 КС1, версия продукта: 3.6.6497

#include "stdafx.h"
#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>
#include <process.h>

BOOL fRepeat;

HCERTSTORE CertificateStore;
PCCERT_CONTEXT CertificateContext;

void TestThread( void *arg )
{
HCRYPTPROV CryptoProvider;
BOOL isGetCryptoProvider=FALSE;
DWORD TypeKey;
BOOL b;

CryptoProvider=0;
isGetCryptoProvider = CryptAcquireCertificatePrivateKey(CertificateContext, 0, NULL, &CryptoProvider, &TypeKey, &b);
if(!isGetCryptoProvider)
{
printf( "CryptAcquireCertificatePrivateKey\n" );
exit(1);
}
if( isGetCryptoProvider )
{
b = CryptReleaseContext( CryptoProvider, 0 );
if( !b )
{
printf( "CryptReleaseContext\n" );
exit(1);
}
}
fRepeat = FALSE;
_endthread();
}

int _tmain(int argc, _TCHAR* argv[])
{
CertificateStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER, L"MY");
CertificateContext = CertFindCertificateInStore(CertificateStore, PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0,
CERT_FIND_SUBJECT_STR_A, "testcert", NULL);

while( 1 )
{
fRepeat=TRUE;
_beginthread( TestThread, 0, (void*)NULL);
while( fRepeat ) Sleep(1L);
}

CertFreeCertificateContext(CertificateContext);
CertCloseStore(CertificateStore,CERT_CLOSE_STORE_FORCE_FLAG);
}

Запускаем такую программу. В хранилище MY должен быть установлен сертификат testcert с контейнером закрытого ключа в реестре. Или, другой, имя сертификата ничего не меняет, поправьте параметр в вызове функции CertFindCertificateInStore.
Почему процесс непрерывно потребляет всё больше и больше оперативной памяти?

Причём же здесь КриптоПро?! могут спросить некоторые форумчане...:) Специально, для таких сомневающихся

#include "stdafx.h"
#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>
#include <process.h>

BOOL fRepeat;

void TestThread( void *arg )
{
HCRYPTPROV CryptoProvider;
BOOL isGetCryptoProvider=FALSE;
BOOL b;

CryptoProvider=0;
isGetCryptoProvider=CryptAcquireContext(&CryptoProvider,_T("REGISTRY\\\\b103fffa-551e-42ee-8f4b-873e624953b6"),_T("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"),75,0);
if(!isGetCryptoProvider)
{
printf( "CryptAcquireCertificatePrivateKey\n" );
exit(1);
}
if( isGetCryptoProvider )
{
b = CryptReleaseContext( CryptoProvider, 0 );
if( !b )
{
printf( "CryptReleaseContext\n" );
exit(1);
}
}
fRepeat = FALSE;
_endthread();
}

int _tmain(int argc, _TCHAR* argv[])
{
while( 1 )
{
fRepeat=TRUE;
_beginthread( TestThread, 0, (void*)NULL);
while( fRepeat ) Sleep(1L);
}
}

Поправьте второй параметр в вызове функции CryptAcquireContext, установив его в имя контейнера закрытого ключа. Его можно посмотреть в Пуск/Панель управления/КриптоПро CSP/Сервис/Протестировать, поищите там по имени сертификата.
Результаты аналогичны, процесс растёт...

Если поток не перезапускать в функции main, зациклить получение/освобождение контекста криптопровайдера в одном потоке, утечки не наблюдается.

Тесты запускались на следующих продуктах Microsoft в реальном и/или виртуальном(VMWare)окружении:
Windows XP SP3 32-bit
Windows Server 2003 SP2 32-bit
Windows Server 2008 SP2 32-bit
Windows Server 2003 SP2 64-bit
Windows Server 2008 SP1 64-bit

Поведение теста аналогично на всех системах.
Любые идеи...
Offline Максим Коллегин  
#2 Оставлено : 28 февраля 2013 г. 8:44:27(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Речь о потреблении памяти?
На втором примере на R3 сходу роста частного рабочего набора не замечаю.
Знания в базе знаний, поддержка в техподдержке
Offline i25061  
#3 Оставлено : 28 февраля 2013 г. 9:12:33(UTC)
i25061

Статус: Участник

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: maxdm Перейти к цитате
Речь о потреблении памяти?
На втором примере на R3 сходу роста частного рабочего набора не замечаю.
Подождите, около часа, станет заметно...

Online Андрей Писарев  
#4 Оставлено : 28 февраля 2013 г. 9:17:43(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
Автор: i25061 Перейти к цитате
Автор: maxdm Перейти к цитате
Речь о потреблении памяти?
На втором примере на R3 сходу роста частного рабочего набора не замечаю.
Подождите, около часа, станет заметно...



Можно уточнить, а на сколько станет заметно (в Кб\Мб)?

Техническую поддержку оказываем тут
Наша база знаний
Offline i25061  
#5 Оставлено : 28 марта 2013 г. 11:35:39(UTC)
i25061

Статус: Участник

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Дальнейшие поиски показали, что утечка накапливается из-за С:\Program Files\Crypto Pro\CSP\rtsupcp.dll.
Эта библиотека поставляется компанией "Актив", и в поле комментарий имеет:
"Позволяет пользователям КриптоПро CSP 3.0 и 3.6 использовать Rutoken и Rutoken ECP в качестве ключевых носителей".
В процессе установки криптопровайдера по умолчанию устанавливаются вышеупомянутые носители.
Вероятно, при создании контекста криптопровайдера с установленным закрытым ключом, происходит обращение к драйверу этих носителей, поскольку в теории они могут содержать в себе контейнеры закрытых ключей,...и опа! накапливается утечка.
Если же зайти в Панель управления/КриптоПро CSP/Оборудование/Настроить типы носителей и выбросить оттуда эти носители, происходит чудо! утечки исчезают!

Спасибо всем за помощь.

Автор: Андрей * Перейти к цитате

Можно уточнить, а на сколько станет заметно (в Кб\Мб)?

У Вас проблемы с компилятором C? Если нет, соберите, запустите, посмотрите...
Online Андрей Писарев  
#6 Оставлено : 28 марта 2013 г. 19:43:31(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
Автор: i25061 Перейти к цитате


Автор: Андрей * Перейти к цитате

Можно уточнить, а на сколько станет заметно (в Кб\Мб)?

У Вас проблемы с компилятором C? Если нет, соберите, запустите, посмотрите...


Асхат, не только с компилятором, но и со временем и т.п. еще и CSP R3 сносить, ставить той версии, которая у Вас...
Вопрос был задан, вроде как, достаточно вежливо, можно было промолчать, если нет желания отвечать или данных о потреблении памяти, но поступает предложение лезть к компилятору и отвечать на свой вопрос себе...

Техническую поддержку оказываем тут
Наша база знаний
Offline i25061  
#7 Оставлено : 29 марта 2013 г. 7:14:33(UTC)
i25061

Статус: Участник

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
Автор: i25061 Перейти к цитате

Автор: Андрей * Перейти к цитате

Можно уточнить, а на сколько станет заметно (в Кб\Мб)?

Асхат, не только с компилятором, но и со временем и т.п. еще и CSP R3 сносить, ставить той версии, которая у Вас...

Microsoft Debug Diagnostic Tool v1.2 показывает утечку в 32 байта на вызов функции rutoken_media_get_handle из rtSupCP.dll

Отредактировано пользователем 29 марта 2013 г. 7:42:49(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил i25061 за этот пост.
Андрей * оставлено 29.03.2013(UTC)
Offline Максим Коллегин  
#8 Оставлено : 29 марта 2013 г. 15:09:40(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Спасибо! Пойду поищу разработчика, видел его на Рускрипто.
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#9 Оставлено : 1 апреля 2013 г. 8:36:35(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Очень странно, эта фукнция не может "съедать" память:

Код:
.text:10003FA0                 public rutoken_media_get_handle
.text:10003FA0                 push    ebp
.text:10003FA1                 mov     ebp, esp
.text:10003FA3                 push    offset aRutoken_medi_0 ; "rutoken_media_get_handle"
.text:10003FA8                 call    __initp_misc_winxfltr
.text:10003FAD                 add     esp, 4
.text:10003FB0                 mov     eax, offset unk_10015C84
.text:10003FB5                 pop     ebp
.text:10003FB6                 retn
Знания в базе знаний, поддержка в техподдержке
Offline i25061  
#10 Оставлено : 2 апреля 2013 г. 8:44:50(UTC)
i25061

Статус: Участник

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: maxdm Перейти к цитате
Очень странно, эта фукнция не может "съедать" память:

Код:
.text:10003FA0                 public rutoken_media_get_handle
Действительно, эта функция не может...ошибочка вышла. Но, где-то течёт.
Трудно определить точное место утечки без исходников и отладчика.
Если предоставите необходимую информацию, попробую найти точное место.

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.