Крипто-про

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Крипто-про

Сообщение Игорь Столяров »

Кстати, да ! Открыл старый код и там запуск VBS скрипта выполняется как:

Код: Выделить всё

  Run('WScript.exe ' & Choose(DSet.VBSError = True,'//I','//B') & ' ' & Clip(Loc:VBSFileName),1)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение finsoftrz »

gopstop2007 писал(а): 26 Январь 2024, 2:12 А как вы запускаете скрипт в RUN? В run.cmd пишите так?

Код: Выделить всё

c:\windows\sysWow64\wscript.exe "полный путь в файлу test.vbs"
Попробовал для очистки совести, тоже не работает и с полным путем до wscript. Проблема не в запуске скрипта, а в том, что блокируется доступ к хранилищу сертификатов при запуске скрипта из приложения. Я еще сейчас проверил, скопировав far и запустив wscript из него. Такая же проблема. То есть, дело и не в кларионе, а в крипто-про, надо их дергать с вопросом. Вчера кучу информации в интернете перелопатил, целый день убил, так ничего и не нашел. Возможно, они запрещают доступ к хранилищу сертификатов, если само приложение не подписано, или отдельно лицензируют доступ из приложения. Наверно, факт, что скрипт запускается из приложения, отследить можно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7377
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Крипто-про

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Январь 2024, 8:56 если само приложение не подписано
Проверьте, какие права на доступ к хранилищу у пользователя Windows:
https://1centerprise8.blogspot.com/2018 ... katov.html
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение finsoftrz »

Варианты запуска из cmd в проводнике, так не работает:
c:\windows\sysWow64\wscript.exe "c:\mark_test\kriptopro_signer2.vbs"
А вот так работает:
c:\windows\system32\wscript.exe "c:\mark_test\kriptopro_signer2.vbs"
Из приложения или фара не работают оба варианта. Возможно, проблема в разрядности...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение finsoftrz »

Игорь Столяров писал(а): 26 Январь 2024, 9:06
finsoftrz писал(а): 26 Январь 2024, 8:56 если само приложение не подписано
Проверьте, какие права на доступ к хранилищу у пользователя Windows:
https://1centerprise8.blogspot.com/2018 ... katov.html
Это я уже проходил, там все нормально.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение finsoftrz »

Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Крипто-про

Сообщение Губин Игорь »

Игорь Столяров писал(а): 25 Январь 2024, 15:55 А через ShellExecute() ?
Немного не по теме, но, если не указано иное, приложение наследует права родителя.
Это я только кажусь дураком! На самом деле я полный идиот!
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Крипто-про

Сообщение gopstop2007 »

finsoftrz писал(а): 26 Январь 2024, 9:45 Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
Все что ранее я написал, для run.cmd - запуск файла в 32-битном wscript.exe
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение finsoftrz »

gopstop2007 писал(а): 26 Январь 2024, 11:58
finsoftrz писал(а): 26 Январь 2024, 9:45 Кажись, понял. Установлена 64 разрядная версия крипто-про, а надо 32 разрядную...
Все что ранее я написал, для run.cmd - запуск файла в 32-битном wscript.exe
Да я понял. Айтишники разбираются с Крипто-Про, там ставили 64 разрядную версию. Надеюсь, разберутся рано или поздно.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4617
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Крипто-про

Сообщение 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
  
C6/C11, ШВС, tps/btrieve.
Ответить