Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Все, разобрался. Вызовы плагина синхронные. А вот загрузка таки асинхронная - работает. Код:<script language="javascript">
cadesplugin.then(
function onSuccess(){
var oAbout = cadesplugin.CreateObject("CAdESCOM.About");
var plgVersion = oAbout.PluginVersion;
var ver = oAbout.CSPVersion("");
var fullVerison = ver.MajorVersion + "." + ver.MinorVersion + "." + ver.BuildVersion;
var cspPName = oAbout.CSPName();
DoLog(cspPName + " v." + fullVerison + " [plugin version " + plgVersion.toString() + "]");
},
function onFaile(){
DoLog("CryptoPro browser plug-in load faild!");
}
);
</script>
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Обнаружилась новая напасть - в синхронной версии не работает запрос на сертификат, если в него добавлен шаблон. Вот код: Код:<script type="text/javascript">
cryptoproSync.generateKeyPair = function(requestData, providerType, providerName, success, failure) {
console.log('[cryptoproSync] generateKeyPair, providerType: ' + providerType + ', providerType: ' + providerName);
try
{
var privateKey = cadesplugin.CreateObject("X509Enrollment.CX509PrivateKey");
privateKey.ProviderName = providerName;
privateKey.ProviderType = providerType;
privateKey.KeySpec = ENROLL_X509KEYSPEC.XCN_AT_SIGNATURE;
var certRequest = cadesplugin.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10");
certRequest.InitializeFromPrivateKey(ENROLL_CONTEXT.ContextUser, privateKey, "");
// Формируем имя запроса.
var distinguishedName = cadesplugin.CreateObject("X509Enrollment.CX500DistinguishedName");
var subject = prepareDN(requestData.dn);
distinguishedName.Encode(subject, ENROLL_X500NAME_FLAGS.XCN_CERT_OID_NAME_STR);
certRequest.Subject = distinguishedName;
// Добавлем расширение KeyUsage.
var keyUsageExtension = cadesplugin.CreateObject("X509Enrollment.CX509ExtensionKeyUsage");
keyUsageExtension.InitializeEncode(
ENROLL_X509KEYUSAGE_FLAGS.XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE |
ENROLL_X509KEYUSAGE_FLAGS.XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE |
ENROLL_X509KEYUSAGE_FLAGS.XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE |
ENROLL_X509KEYUSAGE_FLAGS.XCN_CERT_NON_REPUDIATION_KEY_USAGE);
certRequest.X509Extensions.Add(keyUsageExtension);
if ((typeof requestData.template) != "undefined") {
var objectId = cadesplugin.CreateObject("X509Enrollment.CObjectId");
DoLog("requestData.template = " + requestData.template);
DoLog("MAJOR_TPL_VERSION = " + MAJOR_TPL_VERSION);
DoLog("MINIOR_TPL_VERSION = " + MINIOR_TPL_VERSION);
objectId.InitializeFromValue(requestData.template);
var objExtensionTemplate = cadesplugin.CreateObject("X509Enrollment.CX509ExtensionTemplate");
objExtensionTemplate.InitializeEncode(objectId, MAJOR_TPL_VERSION, MINIOR_TPL_VERSION);
certRequest.X509Extensions.Add(objExtensionTemplate);
}
// Формирование запроса на сертификат.
var enroll = cadesplugin.CreateObject("X509Enrollment.CX509Enrollment");
enroll.InitializeFromRequest(certRequest);
var certReq = enroll.CreateRequest(ENROLL_ENCODING_TYPE.XCN_CRYPT_STRING_BASE64);
return success({cert:certReq, containerName:privateKey.ContainerName});
}
catch (e)
{
console.log('[cryptoproSync] generateKeyPair, error: ' + (e.message != "" ? e.message : cadesplugin.getLastError(e)));
return failure(e);
}
return success({cert:certReq, containerName:ContainerName});
};
</script>
Если шаблон не определен, запрос корректно отрабатывает. А если задан, то получаю ошибку: Internal error. (0x80092002)Проблема из разряда сильновторостепенной внезапно переместилась в критические. Указание шаблона в запросе ТРЕБУЕТСЯ при создании запроса к КриптоПро УЦ 2.0 - без шаблона никак, старый самодельный NPAPI\ActiveX плагин про шаблоны ничего не знает, переделывать его не целесообразно. Хорошо бы понять, что не так с синхронной версией cadesplugin. Отредактировано пользователем 3 октября 2017 г. 19:17:40(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Internal error. (0x80092002) это ошибка декодирования. А вы что в шаблон передаете? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Автор: cross А вы что в шаблон передаете? OID в виде строки : 1.2.643.2.2.46.0.8Хочу отметить, что в асинхронной версии все работает корректно. Вот асинхронный код: Код:<script type="text/javascript">
if ((typeof requestData.template) != "undefined") {
var objectId = yield cadesplugin.CreateObjectAsync("X509Enrollment.CObjectId");
yield objectId.InitializeFromValue(requestData.template);
var objExtensionTemplate = yield cadesplugin.CreateObjectAsync("X509Enrollment.CX509ExtensionTemplate");
yield objExtensionTemplate.InitializeEncode(objectId, MAJOR_TPL_VERSION, MINIOR_TPL_VERSION);
yield (yield certRequest.X509Extensions).Add(objExtensionTemplate);
}
</script>
Отредактировано пользователем 4 октября 2017 г. 14:02:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Можете сделать страничку тестовую на которой можно воспроизвести вашу проблему? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Тестовый пример (Safari) падает после завершения процесса генерации. Вариант для IE - все еще печальней - не создается объект X509Enrollment.CX509PrivateKeyКод:
[Log] [cryptoproSync] generateKeyPair, error: Internal error. (0x80092002) (cryptoproSync.js, line 126)
[Log] Error: Internal error. (0x80092002) (rqstTest.js, line 6)
CreateRequest
generateKeyPair — cryptoproSync.js:121
(анонимная функция) — rqstTest.js:64
promiseReactionJob
Отредактировано пользователем 4 октября 2017 г. 18:59:02(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Да, нашлась ошибка при кодировании шаблона внутри запроса на сертификат. К сожалению данная ошибка была в библиотеке внутри криптопровайдера. В следующем релизе будет исправлена.
Насколько я помню сам УЦ 2.0 не имеет жесткого требования наличия шаблона в запросе... |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Автор: cross Да, нашлась ошибка при кодировании шаблона внутри запроса на сертификат. К сожалению данная ошибка была в библиотеке внутри криптопровайдера. В следующем релизе будет исправлена. Т.е. это что-то глубинное и ждать фикса долго? Цитата:Насколько я помню сам УЦ 2.0 не имеет жесткого требования наличия шаблона в запросе... Увы ( Требует жестко. Мне, правда, ваши коллеги уже предложили вариант когда информацию о шаблоне будет добавлять серверная часть. У нас, грубо говоря, трехзвенная структура - запрос от клиента (из браузера) сначала приезжает на наш сервер, а он уже его ретранслирует какому-то ЦС. Да, а что за беда с InternetExplorer-ом? Или у вас мой пример работает корректно (ну так же падает после добавления шаблона)? Отредактировано пользователем 6 октября 2017 г. 9:33:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
У нас ваш пример не запустился для IE, он жестко завязан на промисы, с IE без полифилов или специальной обработки они не работают. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.12.2016(UTC) Сообщений: 127 Откуда: Таганрог Сказал «Спасибо»: 15 раз
|
Автор: cross У нас ваш пример не запустился для IE, он жестко завязан на промисы, с IE без полифилов или специальной обработки они не работают. Я выложил 2 архива, вот этот (test_ie.zip) для ИЕ специально заточен (подключена библиотека ES6). Версию плагина выдает корректно, а при попытке создания объекта X509Enrollment: Для создания обьектов X509Enrollment следует настроить веб-узел на использование проверки подлинности по протоколу HTTPS В UTF-8. Куда копать? Остальные браузеры (с асинхронной версией, правда) работают прекрасно. Отредактировано пользователем 9 октября 2017 г. 13:29:52(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close