Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
Здравствуйте. Вы пытаетесь 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();
...
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 117  Откуда: Москва Сказал(а) «Спасибо»: 7 раз Поблагодарили: 49 раз в 35 постах
|
|
 2 пользователей поблагодарили Ситдиков Денис за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
Да, из CAPICOM это всё доступно, другое дело, что он не доступен в браузерах (кроме IE) |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 вообще практически не знаком, но по работе нужно использовать именно его
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
можно посмотреть на д емо-странице, щелкнув - "Получить личный сертификат" - там есть запрос к УЦ, получение сертификата и установка. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 не обойтись в данном случае?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close