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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Дмитрий Писаренко  
#1 Оставлено : 14 декабря 2022 г. 15:04:57(UTC)
Дмитрий Писаренко

Статус: Новичок

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

Здравствуйте!

В нашем веб-приложении мы подписываем некий документ разделенной подписью.

У нас есть два документа:
  1. документ.xls (подписанный документ) и
  2. документ.xls.p7s (подпись).

Если подпись сформирована правильно, то в приложении КриптоПро должно происходить следующее:
  1. Пользователь выбирает подпись.
  2. Приложение «КриптоПро» просить загрузить файл, для которого эта подпись была создана.


В нашем случае шаг 2 не происходит ("КриптоПро" не просит второй файл) и вместо этого выдает ошибку "Неправильный хеш".

Мы формируем подпись следующим кодом:

Код:

signDocument(doc) {
      this.setLoading(true);
      const reader = new FileReader();
      return this.$axios
          .get(this.uri.downloadFiledocument(doc.id), {responseType: "blob"})
          .then((value) => {
            if (!this.cert) {
              this.setLoading(false)
              return
            }
            let thumbprint = this.cert.thumbprint;
            let _this = this
            let result;
            return new Promise((resolve) => {
              reader.readAsArrayBuffer(value.data);
              reader.onload = async function () {
                try {
                  let messageHash = await createHash(reader.result);
                  console.log('сертификат', thumbprint );
                  result = await createDetachedSignature(thumbprint, messageHash);
                  let resultBlob = new Blob([result], {
                    type: "blob",
                  });
                  let formData = new FormData();
                  console.log('сама подпись', result);
                  formData.append("file", resultBlob, doc.name.substr(0, doc.name.lastIndexOf('.')) + '.sgn')
                  const responseBinary = await _this.requestUploadBinaryFiles(formData)
                  _this.$axios.get(`/signature/${responseBinary.data}.p7s`, { responseType: 'blob' } ).then(({ data }) => {
                    saveFile(data, 'backSignature')
                  })
                  resolve({signatureId: responseBinary.data, fileId: doc.id})
                  _this.setLoading(false);
                  return responseBinary
                } catch (e) {
                  _this.signError = true;
                  _this.signErrorMessage = e.message;
                  _this.setLoading(false);
                }
              };
            })
          });
    }


Документ, который мы хотим подписать, возвращается

Код:
.get(this.uri.downloadFiledocument(doc.id), {responseType: "blob"})


и находится в переменной value.

Хэш считается вот так:

Код:
let messageHash = await createHash(reader.result);


Есть ли в этом коде очевидные ошибки?

Заранее благодарен

Дмитрий Писаренко
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.