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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline vadjunik  
#11 Оставлено : 28 сентября 2017 г. 19:26:58(UTC)
vadjunik

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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>
Offline vadjunik  
#12 Оставлено : 1 октября 2017 г. 17:20:17(UTC)
vadjunik

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline cross  
#13 Оставлено : 4 октября 2017 г. 13:32:24(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Internal error. (0x80092002) это ошибка декодирования. А вы что в шаблон передаете?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline vadjunik  
#14 Оставлено : 4 октября 2017 г. 14:02:13(UTC)
vadjunik

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline cross  
#15 Оставлено : 4 октября 2017 г. 15:40:04(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Можете сделать страничку тестовую на которой можно воспроизвести вашу проблему?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline vadjunik  
#16 Оставлено : 4 октября 2017 г. 16:29:26(UTC)
vadjunik

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline cross  
#17 Оставлено : 5 октября 2017 г. 17:27:24(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Да, нашлась ошибка при кодировании шаблона внутри запроса на сертификат. К сожалению данная ошибка была в библиотеке внутри криптопровайдера. В следующем релизе будет исправлена.

Насколько я помню сам УЦ 2.0 не имеет жесткого требования наличия шаблона в запросе...
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline vadjunik  
#18 Оставлено : 5 октября 2017 г. 19:30:52(UTC)
vadjunik

Статус: Активный участник

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

Сказал «Спасибо»: 15 раз
Автор: cross Перейти к цитате
Да, нашлась ошибка при кодировании шаблона внутри запроса на сертификат. К сожалению данная ошибка была в библиотеке внутри криптопровайдера. В следующем релизе будет исправлена.
Т.е. это что-то глубинное и ждать фикса долго?

Цитата:
Насколько я помню сам УЦ 2.0 не имеет жесткого требования наличия шаблона в запросе...
Увы ( Требует жестко. Мне, правда, ваши коллеги уже предложили вариант когда информацию о шаблоне будет добавлять серверная часть. У нас, грубо говоря, трехзвенная структура - запрос от клиента (из браузера) сначала приезжает на наш сервер, а он уже его ретранслирует какому-то ЦС.

Да, а что за беда с InternetExplorer-ом? Или у вас мой пример работает корректно (ну так же падает после добавления шаблона)?

Отредактировано пользователем 6 октября 2017 г. 9:33:13(UTC)  | Причина: Не указана

Offline cross  
#19 Оставлено : 9 октября 2017 г. 11:33:20(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
У нас ваш пример не запустился для IE, он жестко завязан на промисы, с IE без полифилов или специальной обработки они не работают.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline vadjunik  
#20 Оставлено : 9 октября 2017 г. 13:28:51(UTC)
vadjunik

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

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