Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Добрый день. Есть простейший VBS-скрипт, предназначенный для подписи файлов. Код:
const CURRENT_USER_STORE = 2
const MY_STORE = "My"
const STORE_OPEN_READ_ONLY = 0
const CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0
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, "352ce56fb616c6ccda834da631b3cad5fdd69fd3")
if Certs.Count > 0 Then
FileName = "ON_SFAKT_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Set Cert = Certs.Item (1)
Set FileIn = CreateObject ("ADODB.Stream")
FileIn.Type = 1
FileIn.Mode = 3
FileIn.Open ()
FileIn.LoadFromFile (FileName + ".xml")
BinaryIn = FileIn.Read (-1)
Set Signer = CreateObject ("CAPICOM.Signer")
Signer.Certificate = Cert
Signer.Options = 2
Set SignedData = CreateObject ("CAPICOM.SignedData")
SignedData.Content = BinaryIn
Base64Out = SignedData.Sign (Signer, True, 0)
Set FileOut = CreateObject ("ADODB.Stream")
FileOut.Type = 2
FileOut.Charset = "US-ASCII"
FileOut.Mode = 3
FileOut.Open ()
FileOut.WriteText (Base64Out)
FileOut.SaveToFile FileName + ".bin", 2
FileOut.Close ()
FileIn.Close ()
SignedData = Unassgned
Signer = Unassigned
FileIn = Unassigned
FileOut = Unassigned
End if
Store = Unassigned
Он правильно работает на старых ОС, но не работает на Windows 10 х64 Как я понимаю, в ней CAPICOM уже в принципе не поддерживается. На какие средства можно перейти, чтобы корректно работало на современных ОС? Возможно, на CADESCOM? Каким образом это корректно сделать?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,598   Сказал «Спасибо»: 564 раз Поблагодарили: 2280 раз в 1783 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,598   Сказал «Спасибо»: 564 раз Поблагодарили: 2280 раз в 1783 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Спасибо, понял. Моя ошибка была в том что я не зарегистрировал CAPICOM в десятке, после регистрации все получилось.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Увы, не так-то все легко! Скачал, поместил в SysWOW64 и зарегистрировал как положено под администратором. Но - при попытке выполнить скрипт получаю ошибку
Невозможно создание объекта контейнером AciveX: 'CAPICOM.Signer' Код: 800A01AD
собственно, как и ранее, сбой происходит на попытке создания этого объекта. CAPICOM.Store нормально создается, нормально перечисляет и ищет сертификаты, находит то что надо. Но вот Signer не создается. Гугление по этой проблеме не дает никаких внятных результатов.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Посмотрел примеры, попытался переехать на CADESCOM: Код:
Set Store = CreateObject ("CADESCOM.Store")
Store.Open CURRENT_USER_STORE, MY_STORE, STORE_OPEN_READ_ONLY
Set Certs = Store.Certificates.Find (CAPICOM_CERTIFICATE_FIND_SHA1_HASH, "352ce56fb616c6ccda834da631b3cad5fdd69fd3")
if Certs.Count > 0 Then
FileName = "ON_SFAKT_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Set Cert = Certs.Item (1)
Set FileIn = CreateObject ("ADODB.Stream")
FileIn.Type = 1
FileIn.Mode = 3
FileIn.Open ()
FileIn.LoadFromFile (FileName + ".xml")
BinaryIn = FileIn.Read (-1)
Set Signer = CreateObject ("CADESCOM.CpSigner")
Signer.Certificate = Cert
Signer.TSAAddress = "http://www.cryptopro.ru/tsp/tsp.srf"
Signer.Options = 2
Set SignedData = CreateObject ("CADESCOM.CadesSignedData")
SignedData.Content = BinaryIn
Base64Out = SignedData.Sign (Signer, True, 0)
Set FileOut = CreateObject ("ADODB.Stream")
FileOut.Type = 2
FileOut.Charset = "US-ASCII"
FileOut.Mode = 3
FileOut.Open ()
FileOut.WriteText (Base64Out)
FileOut.SaveToFile FileName + ".bin.1", 2
FileOut.Close ()
FileIn.Close ()
End if
Store = Unassigned
Столкнулся с новой проблемой: подписание запускается, но в процессе него происходит ошибка URL-адрес не использует поддерживаемый протокол Код: 80072EE6 я так понимаю, проблема связана с получением штампа времени. Между тем у машины выход в сеть есть и SRF-файл скачивается, если просто задать строку в браузере. Что может быть не так?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,598   Сказал «Спасибо»: 564 раз Поблагодарили: 2280 раз в 1783 постах
|
Автор: vovick  Увы, не так-то все легко! Скачал, поместил в SysWOW64 и зарегистрировал как положено под администратором. Но - при попытке выполнить скрипт получаю ошибку
Невозможно создание объекта контейнером AciveX: 'CAPICOM.Signer' Код: 800A01AD
собственно, как и ранее, сбой происходит на попытке создания этого объекта. CAPICOM.Store нормально создается, нормально перечисляет и ищет сертификаты, находит то что надо. Но вот Signer не создается. Гугление по этой проблеме не дает никаких внятных результатов. Запускаете vbs из 64x процесса (explorer.exe)? И wscript.exe запускается из c:\windows\system32\ (это можно проверить из диспетчера задач, не закрывая окно с ошибкой или мониторингом процессов)? Сделайте так: test.vbs - файл с кодом. run.cmd - для запуска файла в 32-битном wscript.exe в run.cmd пропишите так: c:\windows\sysWow64\wscript.exe "полный путь в файлу test.vbs" и всё заработает. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
vovick оставлено 12.07.2016(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Спасибо, помогло. Век живи - век учись, не подумал что есть 64-битный интерпретатор wscript отдельно от 32-битного, хотя, конечно, нужно было такое предположить. А все-таки, в порядке обучения - куда посмотреть, чтобы довести до ума работу с CADESCOM? Все-таки будущее, как я понимаю, за ней...
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.07.2016(UTC) Сообщений: 17  Откуда: Липецк Сказал(а) «Спасибо»: 8 раз
|
Подниму ветку. Время идет, CAPICOM давно скорее мертв чем жив, не говоря уже об отсутствии версии х64. Все-таки, чем современным пользоваться в скриптах для подписания документов? Наставьте на путь истинный. Если можно, с примером. Интересует главным образом подписание файлов для электронного документооборота (ЭДО). На капикоме все работает, но уже сейчас процесс его скачивания и установки на новые системы вызывает некоторую озабоченность. Отредактировано пользователем 27 октября 2018 г. 9:54:16(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,598   Сказал «Спасибо»: 564 раз Поблагодарили: 2280 раз в 1783 постах
|
Автор: vovick  Подниму ветку. Время идет, CAPICOM давно скорее мертв чем жив, не говоря уже об отсутствии версии х64. Все-таки, чем современным пользоваться в скриптах для подписания документов? Наставьте на путь истинный. Если можно, с примером. Интересует главным образом подписание файлов для электронного документооборота (ЭДО). На капикоме все работает, но уже сейчас процесс его скачивания и установки на новые системы вызывает некоторую озабоченность. Здравствуйте. Ответ был дан в начале. Ничего не изменилось. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close