Страница 2 из 2
Крипто-про
Добавлено: 26 Январь 2024, 7:48
Игорь Столяров
Кстати, да ! Открыл старый код и там запуск VBS скрипта выполняется как:
Код: Выделить всё
Run('WScript.exe ' & Choose(DSet.VBSError = True,'//I','//B') & ' ' & Clip(Loc:VBSFileName),1)
Крипто-про
Добавлено: 26 Январь 2024, 8:56
finsoftrz
gopstop2007 писал(а): 26 Январь 2024, 2:12
А как вы запускаете скрипт в RUN? В run.cmd пишите так?
Код: Выделить всё
c:\windows\sysWow64\wscript.exe "полный путь в файлу test.vbs"
Попробовал для очистки совести, тоже не работает и с полным путем до wscript. Проблема не в запуске скрипта, а в том, что блокируется доступ к хранилищу сертификатов при запуске скрипта из приложения. Я еще сейчас проверил, скопировав far и запустив wscript из него. Такая же проблема. То есть, дело и не в кларионе, а в крипто-про, надо их дергать с вопросом. Вчера кучу информации в интернете перелопатил, целый день убил, так ничего и не нашел. Возможно, они запрещают доступ к хранилищу сертификатов, если само приложение не подписано, или отдельно лицензируют доступ из приложения. Наверно, факт, что скрипт запускается из приложения, отследить можно.
Крипто-про
Добавлено: 26 Январь 2024, 9:06
Игорь Столяров
finsoftrz писал(а): 26 Январь 2024, 8:56
если само приложение не подписано
Проверьте, какие права на доступ к хранилищу у пользователя Windows:
https://1centerprise8.blogspot.com/2018 ... katov.html
Крипто-про
Добавлено: 26 Январь 2024, 9:35
finsoftrz
Варианты запуска из cmd в проводнике, так не работает:
c:\windows\sysWow64\wscript.exe "c:\mark_test\kriptopro_signer2.vbs"
А вот так работает:
c:\windows\system32\wscript.exe "c:\mark_test\kriptopro_signer2.vbs"
Из приложения или фара не работают оба варианта. Возможно, проблема в разрядности...
Крипто-про
Добавлено: 26 Январь 2024, 9:37
finsoftrz
Это я уже проходил, там все нормально.
Крипто-про
Добавлено: 26 Январь 2024, 9:45
finsoftrz
Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
Крипто-про
Добавлено: 26 Январь 2024, 10:52
Губин Игорь
Игорь Столяров писал(а): 25 Январь 2024, 15:55
А через ShellExecute() ?
Немного не по теме, но, если не указано иное, приложение наследует права родителя.
Крипто-про
Добавлено: 26 Январь 2024, 11:58
gopstop2007
finsoftrz писал(а): 26 Январь 2024, 9:45
Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
Все что ранее я написал, для run.cmd - запуск файла в 32-битном wscript.exe
Крипто-про
Добавлено: 26 Январь 2024, 12:23
finsoftrz
gopstop2007 писал(а): 26 Январь 2024, 11:58
finsoftrz писал(а): 26 Январь 2024, 9:45
Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
Все что ранее я написал, для run.cmd - запуск файла в 32-битном wscript.exe
Да я понял. Айтишники разбираются с Крипто-Про, там ставили 64 разрядную версию. Надеюсь, разберутся рано или поздно.
Крипто-про
Добавлено: 30 Январь 2024, 11:50
finsoftrz
В итоге переделал на capicom, который 32 разрядный. С cadescom какие-то вопросы с разрядностью, вроде решается, но не совсем понятно, откуда дистрибутив брать. Получить сессионный токен, подписать и зарегистрировать документ в Честном знаке, запрашивать его статус получилось. Если кто будет интегрироваться, смогу подсказать, на какие грабли наступал, времени вникать не мало уходит.
По capicom дистрибутив и инструкцию можно скачать с сайта Сбера по ссылке:
https://www.sberbank-ast.ru/Docs/faq/%D ... apicom.pdf
Рабочий проверенный скрипт (vbscript) для подписи файла выглядит так:
Код: Выделить всё
CURRENT_USER_STORE = 2
MY_STORE = "My"
STORE_OPEN_READ_ONLY = 0
CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0
CertSHA1Hash = "..." 'отпечаток из свойств сертификата
CAPICOM_ENDCODE_BASE64 = 0 'преобразование выходного файла в base64
Set objArgs = WScript.Arguments 'получаем аргументы
InFileName = objArgs(0) 'имя подписываемого файла
OutFileName = objArgs(1) 'имя подписанного файла
bDetached = objArgs(2) '0 - совмещенная, 1 - отделенная подпись
'поиск сертификата в хранилище по отпечатку
Set Store = CreateObject ("CAPICOM.Store")
Store.Open CURRENT_USER_STORE, MY_STORE, STORE_OPEN_READ_ONLY
Set Certs = Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, CStr (CertSHA1Hash))
if Certs.Count > 0 Then
Set GetSigningCert = Certs.Item (1)
else
Set GetSigningCert = Nothing
end if
Store = Unassgned
if not GetSigningCert is nothing Then 'если сертификат найден, то подписываем
set InStream = CreateObject("AdoDB.Stream") 'читаем исходный файл
InStream.Type = 1
InStream.Mode = 3
InStream.Open()
InStream.LoadFromFile(InFileName)
InData = InStream.Read(-1)
Set Signer = CreateObject ("CAPICOM.Signer") 'подписываем
Signer.Certificate = GetSigningCert
Signer.Options = 2
Set SignedData = CreateObject ("CAPICOM.SignedData")
SignedData.Content = InData
OutSignedData = SignedData.Sign(Signer,bDetached,CAPICOM_ENDCODE_BASE64)
set OutStream = CreateObject("AdoDB.Stream") 'сохраняем подписанный файл или подпись
OutStream.CharSet = "US-ASCII"
OutStream.Type = 2
OutStream.Mode = 3
OutStream.Open()
OutStream.WriteText(OutSignedData)
OutStream.SaveToFile OutFileName,2
OutStream.Close()
InStream.Close()
SignedData = Unassgned
Signer = Unassigned
FileIn = Unassigned
FileOut= Unassigned
end if