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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Setix  
#1 Оставлено : 19 сентября 2019 г. 16:54:36(UTC)
Setix

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

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

1. Есть ли разница если создавать ЭЦП методами КриптоAPI и КриптоPRO.
2. Протестировал создание подписи через командную строку и COM объект. Получаются разные данные. Так и должно быть или нет, как проверить правильность подписанной строки/файла?
3. Что понимается под Службой штампов времени? Используется ли она при подписи через командную строку.

Тестировал следующий код.

Option Explicit
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1

Dim oSigner
Set oSigner = CreateObject("CAdESCOM.CPSigner")
' Укажите правильный серийный номер сертификата.
Dim sSerialNumber : sSerialNumber = "12345678000100000000"
' Укажите правильный адрес службы штампов времени.
Dim sTSAAddress : sTSAAddress = "http://domain/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.Sign(oSigner, False)

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
Online Андрей Писарев  
#2 Оставлено : 19 сентября 2019 г. 19:36:09(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
Здравствуйте.

API - набор функций
CSP - криптопровайдер их реализующий для вызова через разные интерфейсы (MS CryptoAPI, COM).

Вы тестировали приложение (какое? cryptcp?) и обращение к CAdESCOM через vbs,
они могут формировать разные типы подписей, также добавлять разные атрибуты (дату\время подписания, комментарий, название файла), цепочку сертификатов и т.д.

Цитата:

Получаются разные данные.


Что именно?
Подписание одних и тех же данных - всегда приводит к генерации разного значения подписи - это особенность ГОСТ-ов.

Проверить можно также - через утилиту или COM,
или как вариант - поставить КриптоАРМ
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей Писарев  
#3 Оставлено : 19 сентября 2019 г. 19:42:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
Утилита:
Главная > Продукты > Дополнительное ПО > Приложение cryptcp

Через браузер:
Главная > Продукты > КриптоПро DSS > КриптоПро DSS Lite

Для проверки:
http://dss.cryptopro.ru/lite

Snimok ehkrana ot 2019-09-19 20-41-54.png (32kb) загружен 6 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline Setix  
#4 Оставлено : 19 сентября 2019 г. 19:49:42(UTC)
Setix

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

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

В общем в теме очень мало знаю постараюсь описать ситуацию. С 1 января 2020 вводится маркировка лекарственных препаратов. Перед отправкой файлов необходимо их подписывать. В инструкции дан пример подписи через КриптоПро через командную строку:
csptest -sfsign -sign -in <УКАЗАТЬ ПОЛНЫЙ ПУТЬ К ФАЙЛУ>test.txt –out <УКАЗАТЬ ПОЛНЫЙ ПУТЬ К ФАЙЛУ>out.txt -my "АО Фурацилин" -detached -base64 –add
Теперь собственно вопрос: как можно создать подпись с помощью СOM интерфейса.

Если использовать описанный в справке способ:
Option Explicit
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1

Dim oSigner
Set oSigner = CreateObject("CAdESCOM.CPSigner")
' Укажите правильный серийный номер сертификата.
Dim sSerialNumber : sSerialNumber = "12345678000100000000"
' Укажите правильный адрес службы штампов времени.
Dim sTSAAddress : sTSAAddress = "http://domain/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.Sign(oSigner, False)

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
Он не подходит, можно ли подробнее описать в чем различие описанного метода и метода с помощью командной строки.
Offline Setix  
#5 Оставлено : 19 сентября 2019 г. 19:52:54(UTC)
Setix

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

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

1. Я так понимаю в командной строке происходит осуществление некоторой настройки. Можно ли привести пример этой настройки в COM интерфейсе.
Online Андрей Писарев  
#6 Оставлено : 19 сентября 2019 г. 21:04:41(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
в примере добавляется штамп времени,
пример посмотрите


если убрать работу с TSP, подходит?

Код:

 Option Explicit

 Const CADES_BES = 1
 Const CADES_DEFAULT = 0
 Const CAPICOM_ENCODE_BASE64 = 0
 Const CAPICOM_CURRENT_USER_STORE = 2
 
 ' Укажите правильный серийный номер сертификата.
 Dim sSerialNumber : sSerialNumber = "01F349E07AC40CD480E8119BF4C5BB9FE2" 
 

 Dim oSigner
 Set oSigner = CreateObject("CAdESCOM.CPSigner")
 oSigner.Certificate = GetSignerCertificate(sSerialNumber)
 
 Dim oSignedData
 Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
 oSignedData.Content = "Some very significant message"

 Dim sSignedData
 ' Создание и проверка подписи CAdES BES
 sSignedData = oSignedData.SignCades(oSigner, CADES_BES, False, CAPICOM_ENCODE_BASE64)
 oSignedData.VerifyCades sSignedData, CADES_BES, False
  
 MsgBox sSignedData, 0, "signature"
 
 
 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 CreateFile (sFileName, sContent)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   Dim NewFile
   Set NewFile = fso.CreateTextFile(sFileName, True)
   NewFile.WriteLine(sContent)
   NewFile.Close
 End Function


Техническую поддержку оказываем тут
Наша база знаний
Online Андрей Писарев  
#7 Оставлено : 19 сентября 2019 г. 21:06:26(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
SignCades - вызывать с true - для отсоединенной подписи.
Техническую поддержку оказываем тут
Наша база знаний
Offline Setix  
#8 Оставлено : 20 сентября 2019 г. 12:27:09(UTC)
Setix

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

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

Проверка "oSignedData.VerifyCades sSignedData, CADES_BES, False" выдает результат False. Как при SignCades - вызывать с true - для отсоединенной подписи, так и при False - для совместной подписи.
Online Андрей Писарев  
#9 Оставлено : 20 сентября 2019 г. 13:04:44(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
Пришлите значение sSignedData (полностью) для обоих вариантов.
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей Писарев  
#10 Оставлено : 20 сентября 2019 г. 13:11:26(UTC)
Андрей *

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

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

Сказал «Спасибо»: 573 раз
Поблагодарили: 2303 раз в 1804 постах
можете так выгрузить результат:
Код:
  
 Dim FN : FN = "d:\test.txt"
 CreateFile FN, sSignedData
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.