Статус: Участник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,699   Сказал «Спасибо»: 573 раз Поблагодарили: 2303 раз в 1804 постах
|
Здравствуйте. API - набор функций CSP - криптопровайдер их реализующий для вызова через разные интерфейсы (MS CryptoAPI, COM). Вы тестировали приложение (какое? cryptcp?) и обращение к CAdESCOM через vbs, они могут формировать разные типы подписей, также добавлять разные атрибуты (дату\время подписания, комментарий, название файла), цепочку сертификатов и т.д. Цитата: Получаются разные данные.
Что именно? Подписание одних и тех же данных - всегда приводит к генерации разного значения подписи - это особенность ГОСТ-ов. Проверить можно также - через утилиту или COM, или как вариант - поставить КриптоАРМ |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,699   Сказал «Спасибо»: 573 раз Поблагодарили: 2303 раз в 1804 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 Он не подходит, можно ли подробнее описать в чем различие описанного метода и метода с помощью командной строки.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 19.09.2019(UTC) Сообщений: 28  Откуда: МСК
|
1. Я так понимаю в командной строке происходит осуществление некоторой настройки. Можно ли привести пример этой настройки в COM интерфейсе.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,699   Сказал «Спасибо»: 573 раз Поблагодарили: 2303 раз в 1804 постах
|
SignCades - вызывать с true - для отсоединенной подписи. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 19.09.2019(UTC) Сообщений: 28  Откуда: МСК
|
Проверка "oSignedData.VerifyCades sSignedData, CADES_BES, False" выдает результат False. Как при SignCades - вызывать с true - для отсоединенной подписи, так и при False - для совместной подписи.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,699   Сказал «Спасибо»: 573 раз Поблагодарили: 2303 раз в 1804 постах
|
Пришлите значение sSignedData (полностью) для обоих вариантов. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,699   Сказал «Спасибо»: 573 раз Поблагодарили: 2303 раз в 1804 постах
|
можете так выгрузить результат: Код:
Dim FN : FN = "d:\test.txt"
CreateFile FN, sSignedData
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close