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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 3 раз
Добрый день!

Установлен TSP Client 2.0. В работе обнаружена проблема похожая на утечку памяти.
По мотивам примера использования CADESCOM (http://cpdn.cryptopro.ru/content/cades/cadescomsamplesigndata.html) реализован пример подписания сообщений в цикле.
В зависимости от количества подписаний различается объем памяти, занимаемой процессом cscript.exe:
после подписания 100 сообщений - 8072 Кб, 1000 сообщений - 8500 Кб, 10000 сообщений - окончания программы не удалось дождаться, процесс упал.

Тестируется следующий код:
Option Explicit
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1
Const CADESCOM_CADES_T = 5

Function GetSignerCertificate(SerialNumber)
Set GetSignerCertificate = Nothing
Dim oCert
Dim oStore
Set oStore = CreateObject("CAdESCOM.Store")
oStore.Open CAPICOM_CURRENT_USER_STORE
For Each oCert In oStore.Certificates
If oCert.SerialNumber = SerialNumber Then
Set GetSignerCertificate = oCert
Exit For
End If
Next
End Function

Function SignCades()
Dim oSigner
Set oSigner = CreateObject("CAdESCOM.CPSigner")
' Укажите правильный серийный номер сертификата.
Dim sSerialNumber : sSerialNumber = "6F90B8E9F2423488E711CE0F9A026304"
' Укажите правильный адрес службы штампов времени.
Dim sTSAAddress : sTSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf"

oSigner.Certificate = GetSignerCertificate(sSerialNumber)
oSigner.TSAAddress = sTSAAddress

Dim oSignedData
Dim oSettings
Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
oSignedData.Content = "Some very significant message"
Dim sSignedData
sSignedData = oSignedData.SignCades(oSigner, CADESCOM_CADES_T, False)
End Function

Dim iCounter
For iCounter = 1 to 10000
SignCades()
Next

MsgBox "Messages was Signed: " & (iCounter - 1), vbOk


В чем причина падения при подписании 10000 сообщений, а также рост занимаемой памяти? Нет ли в CADESCOM утечек памяти?

Отредактировано пользователем 25 сентября 2017 г. 10:30:11(UTC)  | Причина: Не указана

Offline FSI  
#2 Оставлено : 20 сентября 2017 г. 10:50:10(UTC)
FSI

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

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

Сказал(а) «Спасибо»: 3 раз
Имеются все необходимы для работы лицензии в том числе и TSP Client 2.0. Просьба разобраться с нашей проблемой.
Offline afat  
#3 Оставлено : 21 сентября 2017 г. 10:43:02(UTC)
afat

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

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

Здравствуйте
Запустил у себя на машине ваш скрипт, все проходит без падений. Запускал для 100000 подписей. Вот скрипт:


Option Explicit
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1
Const CADESCOM_CADES_T = 5

Function ShowProc()
Dim objWMIService, objProcess, colProcess
Dim strComputer, strList

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process")

Dim strCscript
strCscript = "cscript.exe"
For Each objProcess in colProcess
If strCscript = objProcess.Name Then
strList = objProcess.Name + " | WorkingSetSize:" + CStr(objProcess.WorkingSetSize) + " | PeakWorkingSetSize: " + CStr(objProcess.PeakWorkingSetSize) + " | QuotaPeakPagedPoolUsage: " + CStr(objProcess.QuotaPeakPagedPoolUsage) + " | QuotaPagedPoolUsage: " + CStr(objProcess.QuotaPagedPoolUsage) + " | QuotaPeakNonPagedPoolUsage: " + CStr(objProcess.QuotaPeakNonPagedPoolUsage) + " | QuotaNonPagedPoolUsage: " + CStr(objProcess.QuotaNonPagedPoolUsage) + " | PagefileUsage: " + CStr(objProcess.PagefileUsage) + " | PeakPagefileUsage: " + CStr(objProcess.PeakPagefileUsage)
End If
Next

WSCript.Echo strList
End Function


Function GetSignerCertificate(SerialNumber)
Set GetSignerCertificate = Nothing
Dim oCert
Dim oStore
Set oStore = CreateObject("CAdESCOM.Store")
oStore.Open CAPICOM_CURRENT_USER_STORE
For Each oCert In oStore.Certificates
If oCert.SerialNumber = SerialNumber Then
Set GetSignerCertificate = oCert
Exit For
End If
Next
End Function

Function SignCades()
Dim oSigner
Set oSigner = CreateObject("CAdESCOM.CPSigner")
' Укажите правильный серийный номер сертификата.
Dim sSerialNumber : sSerialNumber = "120020A2D8B6EB5549589FE57300000020A2D8"
' InputBox("Enter")
' Укажите правильный адрес службы штампов времени.
Dim sTSAAddress : sTSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf"

oSigner.Certificate = GetSignerCertificate(sSerialNumber)
oSigner.TSAAddress = sTSAAddress

Dim oSignedData
Dim oSettings
Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
oSignedData.Content = "Some very significant message"
Dim sSignedData
sSignedData = oSignedData.SignCades(oSigner, CADESCOM_CADES_T, False)
End Function

Function LoopFoo()
Dim iCnt
For iCnt = 1 to 100
SignCades()
Next
WScript.Sleep 30000

End Function

Dim iCounter

For iCounter = 1 to 1000
LoopFoo()
WSCript.Echo "Step:"
WSCript.Echo iCounter
ShowProc()
Next

MsgBox "Messages was Signed", vbOk


Можете подсказать на какой системе запускали, характеристики машины? Как измеряли память?
Есть вариант попробовать запустить утилиту gflags.exe из состава Windows Kits. При запуске с правами админа на вкладке Image File ввести имя файла cscript.exe и выставить галки "Enable heap...", после чего перезапустить компьютер и опять запустить скрипт.
Offline FSI  
#4 Оставлено : 25 сентября 2017 г. 10:29:00(UTC)
FSI

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

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

Сказал(а) «Спасибо»: 3 раз
Проблема на Win7 x64.
Спасибо, вы отчасти помогли мне найти верный путь в исследовании.
Для поиска утечек использовал утилиты WDK: https://www.osp.ru/winitpro/2009/01/5889791/
Вероятно проблема все же есть, но не в CADESCOM, а в WINHTTP.
Необходимый ответ на свой вопрос получил.

Отредактировано пользователем 25 сентября 2017 г. 17:15:04(UTC)  | Причина: Не указана

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