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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline soshelsuma  
#1 Оставлено : 15 января 2025 г. 10:19:28(UTC)
soshelsuma

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

Группы: Участники
Зарегистрирован: 10.01.2025(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
День добрый!
Пытаюсь повторить функционал с демо-страницы, добавление сертификата из контейнера (CADESCOM_CONTAINER_STORE) в личные (CAPICOM_CURRENT_USER_STORE) сертификаты на javascript, работаю с КриптоПро ЭЦП Browser plug-in.

Сейчас есть такой код:
Код:

function InstallContainerCertificateToUser(exportedCert) {
  cadesplugin.async_spawn(function* (args) {
    try {
      var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");

      // Открываем хранилище CAPICOM_CURRENT_USER_STORE
      console.log("Opening CAPICOM_CURRENT_USER_STORE...");
      yield oStore.Open(
        cadesplugin.CAPICOM_CURRENT_USER_STORE,
        cadesplugin.CAPICOM_MY_STORE,
        cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
      );

      oStore.Add(exportedCert);

      alert("Certificate installed successfully!");
      // Обновляем список сертификатов
      getKeyInfo();
    } catch (e) {
      alert("Error: " + cadesplugin.getLastError(e));
    }
  });
}

в exportedCert передаю данные, такого формата: var exportedCert = yield oCertificate.Export(0);

В консоли малоподробная ошибка "{message: 'Параметр задан неверно. (0x80070057)', requestid: 36, type: 'error'}"

Отредактировано пользователем 21 января 2025 г. 5:37:38(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 15 января 2025 г. 12:55:36(UTC)
Андрей *

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

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

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

Вы пытаетесь exportedCert (строку передать в base64), а требуется объект Certificate.



Код:


var oCert = cadesplugin.CreateObject("CAdESCOM.Certificate");
    oCert.Import(exportedCert);
...
 var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
                    oStore.Open( ... );
                    oStore.Add(oCert);
                    oStore.Close();
...

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
soshelsuma оставлено 16.01.2025(UTC)
Offline Ситдиков Денис  
#3 Оставлено : 15 января 2025 г. 14:23:44(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 50 раз в 36 постах
Добрый день! Объект CAdESCOM.Store не может добавлять сертификаты в хранилище My (документация).
Для установки сертификата в My нужно использовать Enrollment.InstallResponse.
Пример на демостранице: async_code.js:1398.
thanks 2 пользователей поблагодарили Ситдиков Денис за этот пост.
Андрей * оставлено 15.01.2025(UTC), soshelsuma оставлено 16.01.2025(UTC)
Offline Андрей *  
#4 Оставлено : 15 января 2025 г. 17:04:22(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2304 раз в 1805 постах
Да,
из CAPICOM это всё доступно, другое дело, что он не доступен в браузерах (кроме IE)
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
soshelsuma оставлено 16.01.2025(UTC)
Offline soshelsuma  
#5 Оставлено : 16 января 2025 г. 7:07:16(UTC)
soshelsuma

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

Группы: Участники
Зарегистрирован: 10.01.2025(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей * Перейти к цитате


Код:


var oCert = cadesplugin.CreateObject("CAdESCOM.Certificate");
    oCert.Import(exportedCert);
...
 var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
                    oStore.Open( ... );
                    oStore.Add(oCert);
                    oStore.Close();
...



Сделал вот такой вид:
Код:

function showCertificateDetails(oCertificate, isFromFontainer) {
  cadesplugin.async_spawn(function* (args) {
   try {
...
      var exportedCert = yield oCertificate.Export(0);
      var oCert = yield cadesplugin.CreateObjectAsync("CAdESCOM.Certificate");
      yield oCert.Import(exportedCert);
...
// В этом же методе передается oCert:
      certDetails += `<button onclick="InstallContainerCertificateToUser('${oCert}')">Установить</button>`;
      }
...
}


Теперь тоже ошибка, но уже вот такая:
Код:

        //{message: 'Параметр задан неверно. (0x80070057)', requestid: 45, type: 'error'}
        InstallContainerCertificateToUser('[object Object]')


Цитата:
Пример на демостранице: async_code.js:1398.


Отсюда не совсем понял, как вообще использовать Enrollment.InstallResponse и, должен сказать, с JS вообще практически не знаком, но по работе нужно использовать именно его
Offline Андрей *  
#6 Оставлено : 16 января 2025 г. 9:01:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2304 раз в 1805 постах
можно посмотреть на демо-странице, щелкнув - "Получить личный сертификат" - там есть запрос к УЦ, получение сертификата и установка.
Техническую поддержку оказываем тут
Наша база знаний
Offline soshelsuma  
#7 Оставлено : 16 января 2025 г. 11:44:00(UTC)
soshelsuma

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

Группы: Участники
Зарегистрирован: 10.01.2025(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
В итоге код приобрел такой вид:

Код:

function showCertificateDetails(oCertificate, isFromContainer) {
  cadesplugin.async_spawn(function* (args) {
    try {
      // Получаем информацию о сертификате
      var subjectName = yield oCertificate.SubjectName;
      var issuerName = yield oCertificate.IssuerName;
      var validFrom = yield oCertificate.ValidFromDate;
      var validTo = yield oCertificate.ValidToDate;
      var serialNumber = yield oCertificate.SerialNumber;

      var exportedCert = yield oCertificate.Export(0);
      var oCert = yield cadesplugin.CreateObjectAsync("CAdESCOM.Certificate");
      yield oCert.Import(exportedCert);
      console.log(oCert);

      currentCertificate = oCert;

      // Отображаем информацию о сертификате
      var certDetails = `
                <p><strong>Subject Name:</strong> ${subjectName}</p>
                <p><strong>Issuer Name:</strong> ${issuerName}</p>
                <p><strong>Valid From:</strong> ${validFrom}</p>
                <p><strong>Valid To:</strong> ${validTo}</p>
                <p><strong>Serial Number:</strong> ${serialNumber}</p>
            `;

      if (isFromContainer) {
        currentCertificate = oCert; // Сохраняем текущий сертификат в глобальной переменной
        certDetails += `<button onclick="testAdd()">Установить</button>`;
      }
      document.getElementById("keyInfo").innerHTML = certDetails;

      // Показываем блок с деталями сертификата
      document.getElementById("certificateDetails").style.display = "block";
    } catch (e) {
      alert("Error: " + cadesplugin.getLastError(e));
    }
  });
}

function testAdd() {
  console.log(currentCertificate);
  cadesplugin.async_spawn(function* (args) {
    if (currentCertificate) {
      try {
        var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
        yield oStore.Open(
          cadesplugin.CAPICOM_CURRENT_USER_STORE,
          cadesplugin.CAPICOM_MY_STORE,
          cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
        );
        oStore.Add(currentCertificate);
        oStore.Close();

        alert("Certificate installed successfully!");
        // Обновляем список сертификатов
        getKeyInfo();
      } catch (e) {
        alert("Error: " + cadesplugin.getLastError(e));
      }
    } else {
      console.log("Нет сертификата");
    }
  });
}


Оба console.log выводят именно сертификат, а не что-либо другое. Тем не менее, при попытке добавить через .Add все равно ошибка:

Код:
{message: 'Параметр задан неверно. (0x80070057)', requestid: 37, type: 'error'}


Я так понял, без Enrollment.InstallResponse не обойтись в данном случае?
Offline Андрей *  
#8 Оставлено : 16 января 2025 г. 14:40:35(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2304 раз в 1805 постах
Да, верно.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
soshelsuma оставлено 17.01.2025(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.