Ошибка при поверке подписи. - API - CAPICOM_TLB.ISigner

Добрый день всем.
При попытке получить токен для работы с API, получаю ошибку «Ошибка при проверке подписи». Подпись формирую средствами Delphi через COM.
CAPICOM_TLB.ISigner
Создаю объекты, получаю сертификат, вызываю  
oSignedData.Sign(oSigner, TRUE, CAPICOM_ENCODE_BASE64);
Получаю подпись, которая успешно проходит проверку через Инструменты КриптоПРО.
Но если её скормить сюда
https://markirovka.sandbox.crptech.ru/api/v3/true-api/auth/simpleSignIn
то получается ошибка «Ошибка при поверке подписи».
Для чистоты эксперимента та же строка была подписана через браузерный планиг КриптоПРО. На выходе была получена другая(!) подпись, которая уже нормально воспринимается сервером Честного знака.
В чём может быть проблема? Может у кого-то есть готовый пример для Delphi или любой другой среды?

или  в систему, чтобы получать уведомления с ответами на ваши вопросы

Жирный текст
Прикрепить файл
S
У меня была подобная проблема. Во первых не надо было, как описано людьми в инете полученное data преобразовывать в base64. Надо сразу шифровать. Второе, при подписании поставить флаг False - присоединенная подпись в Dim signedCms As SignedCms = New SignedCms(contentInfo, False).
На vb.net мне удалось получить token следющим образом:
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim token As String = Await GetToketTrueAPI()
End Sub
  Public Class RequestSimpleSignInCZ
      Public Property uuid As String
      Public Property data As String
      Public Property inn As String
  End Class
  Public Class MyRequestData
  End Class
 Public Class ResponseKeyCZ
     Public Property uuid As String
     Public Property data As String
 End Class
Private Function encode_text_detached_CZ(ByVal msg As String) As Byte()
    Dim thumbprint As String = «НОМЕР ОТПЕЧАТКА ЭЛЕКТРОННОГО КЛЮЧА»
    Dim encodedMsg As Byte()
    Try
        Dim msgBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(msg)
        Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
        store.Open(OpenFlags.ReadOnly)
        Dim certs As X509Certificate2Collection = store.Certificates.Find(
                X509FindType.FindByThumbprint, thumbprint , False)
        store.Close()
        encodedMsg = SignMsg(msgBytes, certs(0))
    Catch ex As CryptographicException
        Console.WriteLine(«Information could not be written out for this certificate.»)
        encodedMsg = {0}
    End Try
    Return encodedMsg
End Function
Private Function SignMsg(ByVal msg As Byte(), ByVal signerCert As X509Certificate2) As Byte()
     Dim contentInfo As ContentInfo = New ContentInfo(msg)
     Dim signedCms As SignedCms = New SignedCms(contentInfo, False)
     Dim cmsSigner As CmsSigner = New CmsSigner(signerCert)
     signedCms.ComputeSignature(cmsSigner)
     Return signedCms.Encode()
 End Function
 Private Async Function GetToketTrueAPI() As Task(Of String())
'Отправляем GET auth/key
     Dim transaction As New MyRequestData
     Dim data As New ResponseKeyCZ
     Dim response As String = Await JSON_GET_CZ(«https://markirovka.crpt.ru/api/v3/true-api/auth/key», transaction)
     data = Newtonsoft.Json.JsonConvert.DeserializeObject(Of ResponseKeyCZ)(response)
'Ответ data и uuid
     Console.WriteLine(«Key_data: » & data.data)
     Console.WriteLine(«Key_uuid: » & data.uuid)
'Подписываем полученную строку data
    Dim signed_dataBase64 As String = Convert.ToBase64String(encode_text_detached_CZ(data.data))
     'Отправляем POST на получение токена auth/simpleSignIn
     Dim request As New RequestSimpleSignInCZ With
     {
         .uuid = data.uuid,
         .data = signed_dataBase64
     }
     Dim data2 As New ResponseSimpleSignInCZ
   Dim content As String = Newtonsoft.Json.JsonConvert.SerializeObject(request)
Dim httpClient As New HttpClient()
Dim httpRequestMessage As New HttpRequestMessage(HttpMethod.Post, «https://markirovka.crpt.ru/api/v3/true-api/auth/simpleSignIn»)
httpRequestMessage.Content = New StringContent(content, Encoding.UTF8, «application/json»)
Dim httpResponseMessage As HttpResponseMessage = Await httpClient.SendAsync(httpRequestMessage)
Dim jsonResult As String = Await httpResponseMessage.Content.ReadAsStringAsync()
Dim result As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResult)
'Ответ
     Console.WriteLine(«jsonResult: » & jsonResult)
Return result .token
End function

10.08.2024 18:11
S
 Public Async Function JSON_GET_CZ(ByVal link As String, ByVal transaction As MyRequestData, Optional ByVal token As String = «») As Task(Of String)
     Task.Delay(3000)
     System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls
     System.Net.ServicePointManager.ServerCertificateValidationCallback = (Function(sender, certificate, chain, sslPolicyErrors) True)
     Dim content = Newtonsoft.Json.JsonConvert.SerializeObject(transaction)
     Dim buffer = System.Text.Encoding.UTF8.GetBytes(content)
     Dim bytes = New Net.Http.ByteArrayContent(buffer)
     bytes.Headers.ContentType = New Net.Http.Headers.MediaTypeHeaderValue(«application/json»)
     Dim responseBody = Nothing
     Try
         Using client As New System.Net.Http.HttpClient '(handler)
             client.DefaultRequestHeaders.CacheControl = New Http.Headers.CacheControlHeaderValue()
             Try
                 Using response As HttpResponseMessage = Await client.GetAsync(New Uri(link))
                     If (response.IsSuccessStatusCode) Then
                         response.EnsureSuccessStatusCode()
                         responseBody = Await response.Content.ReadAsStringAsync()
                         responseBody = Replace(responseBody, «}», «,»«responseCode»«:»«» & response.StatusCode & «»«,»«ReasonPhrase»«:»«» & response.ReasonPhrase & «»«}»)
                     Else
                         responseBody = «{»«responseCode»«:»«» & response.StatusCode & «»«,»«ReasonPhrase»«:»«» & response.ReasonPhrase & «»«}»
                     End If
                 End Using
             Catch e As HttpRequestException
                 responseBody = «{»«responseCode»«:»«» & 0 & «»«,»«ReasonPhrase»«:»«» & e.Message & «»«}»
             End Try
         End Using
     Catch e As HttpRequestException
         responseBody = «{»«responseCode»«:»«» & 0 & «»«,»«ReasonPhrase»«:»«» & e.Message & «»«}»
     End Try
     Return responseBody
 End Function
10.08.2024 18:14
Задайте вопрос команде Сообщества

Если у вас есть вопросы, связанные с работой Честного Сообщества или предложения по развитию нашей платформы, то напишите нам!

Если у вас вопросы, связанные с маркировкой, то задайте вопрос тут.

Ваше сообщение отправлено

Ожидайте ответ на электронную почту, указанную в обращении

Наверх
Войти в Cообщество
Впервые в сообществе? Зарегистрироваться
Войти через:
Регистрация в Сообществе
Регистрация участника оборота
Уже зарегистрированы?
или
Войти через GoogleВойти через Vk

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Регистрация Партнера/Интегратора
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация в Сообществе

Редактировать изображение партнера/интегратора
Восстановление пароля
Проверьте почту

На почту отправлено письмо со ссылкой восстановления пароля

Восстановление пароля