Статус: Участник
Группы: Участники
Зарегистрирован: 05.02.2016(UTC) Сообщений: 19  Откуда: Спб Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Вставляем в запрос расширение subjectSignTool: Код:var cObjectId = yield cadesplugin.CreateObjectAsync("X509Enrollment.CObjectId");
yield cObjectId.InitializeFromValue('1.2.643.100.111');
var Extension = yield cadesplugin.CreateObjectAsync("X509Enrollment.CX509Extension");
yield Extension.Initialize(cObjectId, 0x1, base64_Data);
X509Extensions = yield CertificateRequestPkcs10.X509Extensions;
yield X509Extensions.Add(Extension);
В запросе получается Octet string, а нужен UTF8String. Как этого добиться?  test.png (5kb) загружен 24 раз(а).
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 11.03.2013(UTC) Сообщений: 805   Откуда: Оттуда Сказал «Спасибо»: 4 раз Поблагодарили: 148 раз в 144 постах
|
|
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.02.2016(UTC) Сообщений: 19  Откуда: Спб Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Автор: eav  Добрый день. Из указанной Вами темы код на C# мы переписываем на JS: Код:// var objSubjectSignToolBytes = Encoding.UTF8.GetBytes("Домен-КС2").ToList();
// objSubjectSignToolBytes.InsertRange(0, new byte[] { 0x0c, 0x10 });
var objSubjectSignToolBytes = toUTF8Array('Домен-КС2');
objSubjectSignToolBytes.unshift(12, 16);
// Точно такой же массив байт получается в C# и у нас:
// [12, 16, 208, 148, 208, 190, 208, 188, 208, 181, 208, 189, 45, 208, 154, 208, 161, 50]
//var objSubjectSignToolValue = Encoding.Unicode.GetString(objSubjectSignToolBytes.ToArray());
objSubjectSignToolValue = bin2String(objSubjectSignToolBytes);
var cObjectId = yield cadesplugin.CreateObjectAsync("X509Enrollment.CObjectId");
yield cObjectId.InitializeFromValue('1.2.643.100.111');
var Extension = yield cadesplugin.CreateObjectAsync("X509Enrollment.CX509Extension");
yield Extension.Initialize(cObjectId, 0x2, objSubjectSignToolValue);
yield X509Extensions.Add(Extension);
функция bin2String: Код:function bin2String(array) {
return String.fromCharCode.apply(String, array);
}
Но в результате получаем вот такую asn.1 структуру:  test2.png (8kb) загружен 13 раз(а).Подскажите, пожалуйста, что мы делаем не так?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 11.03.2013(UTC) Сообщений: 805   Откуда: Оттуда Сказал «Спасибо»: 4 раз Поблагодарили: 148 раз в 144 постах
|
Добрый день. Уточните, пожалуйста, у Вас имеется Сертификат на годовую техническую поддержку "КриптоПро SDK"? Создайте обращение на нашем портале ТП: https://www.cryptopro.ru/support |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2016(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день Вопрос каким-нибудь образом получилось решить? В каком виде подаётся текст в Initialize. Пробовал разместить код в base64, как предлагалось изначально, ничего не вышло( Код: var Request = CreateObject("X509Enrollment.CX509CertificateRequestPkcs10");
...
var objObjectId = CreateObject("X509Enrollment.CObjectId");
objObjectId.InitializeFromValue('1.2.643.100.111');
var objExt = CreateObject("X509Enrollment.CX509Extension");
objExt.Initialize(objObjectId, 0x1, "dGVzdA==");
Request.X509Extensions.Add(objExt);
В запросе получаю Код:
1.2.643.100.111: Флаги = 0, Длина = 4
Средство электронной подписи владельца
0000 74 65 73 74 test
0000: 74 65 73 74 ; test
================ ОШИБКА РАСШИФРОВКИ! ================
Отредактировано пользователем 29 ноября 2016 г. 11:54:12(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.02.2016(UTC) Сообщений: 19  Откуда: Спб Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Автор: 2ndbrezhnev  Добрый день Вопрос каким-нибудь образом получилось решить? В каком виде подаётся текст в Initialize. Да, вот рабочий код:
function dhex(str) { return (str+0).toString(16).toUpperCase(); }
function dec2hex2 ( argstr ) { var hexequiv = new Array ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"); return hexequiv[(argstr >> 4) & 0xF] + hexequiv[argstr & 0xF]; }
function convertCP2UTF8 ( argstr ) { var outputString = ""; argstr = argstr.replace(/^\s+/, ''); if (argstr.length == 0) { return ""; } argstr = argstr.replace(/\s+/g, ' '); var listArray = argstr.split(' '); for ( var i = 0; i < listArray.length; i++ ) { var n = parseInt(listArray[i], 16); if (i > 0) { outputString += ' ';} if (n <= 0x7F) { outputString += dec2hex2(n); } else if (n <= 0x7FF) { outputString += dec2hex2(0xC0 | ((n>>6) & 0x1F)) + ' ' + dec2hex2(0x80 | (n & 0x3F)); } else if (n <= 0xFFFF) { outputString += dec2hex2(0xE0 | ((n>>12) & 0x0F)) + ' ' + dec2hex2(0x80 | ((n>>6) & 0x3F)) + ' ' + dec2hex2(0x80 | (n & 0x3F)); } else if (n <= 0x10FFFF) { outputString += dec2hex2(0xF0 | ((n>>18) & 0x07)) + ' ' + dec2hex2(0x80 | ((n>>12) & 0x3F)) + ' ' + dec2hex2(0x80 | ((n>>6) & 0x3F)) + ' ' + dec2hex2(0x80 | (n & 0x3F)); } else { outputString += '!erreur ' + dhex(n) +'!'; } } return( outputString ); }
function calstr (str) { var haut = 0; var n = 0; CPstring = ''; for (var i = 0; i < str.length; i++) { var b = str.charCodeAt(i); if (b < 0 || b > 0xFFFF) { CPstring += 'Error ' + dhex(b) + '!'; } if (haut != 0) { if (0xDC00 <= b && b <= 0xDFFF) { CPstring += dhex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' '; haut = 0; continue; } else { CPstring += '!erreur ' + dhex(haut) + '!'; haut = 0; } } if (0xD800 <= b && b <= 0xDBFF) { haut = b; } else { CPstring += dhex(b) + ' '; } } CPstring = CPstring.substring(0, CPstring.length-1);
return convertCP2UTF8(CPstring); }
Код:
var strSubjectSignTool = '"КриптоПро CSP" (версия 3.6)';
var byteSubjectSignTool = calstr(strSubjectSignTool).replace(/\s/g, '');
var lengthSubjectSignTool = (byteSubjectSignTool.length / 2).toString(16);
var cObjectId = cadesplugin.CreateObject("X509Enrollment.CObjectId");
cObjectId.InitializeFromValue('1.2.643.100.111');
var Extension = cadesplugin.CreateObject("X509Enrollment.CX509Extension");
Extension.Initialize(cObjectId, 4, "0C" + lengthSubjectSignTool + byteSubjectSignTool);
CertificateRequestPkcs10.X509Extensions.Add(Extension);
|
 1 пользователь поблагодарил danbka за этот пост.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2016(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Спасибо, всё работает. Только нужно ещё расчёт lengthSubjectSignTool немного подправить - добавить ведущий 0, если lengthSubjectSignTool получился нечётным по количеству символов
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2016(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Появилась проблема с формированием запросов на некоторых машинах. При формировании запроса одним и тем же кодом на одной машине получаю запрос с указанием шаблона и Средством ЭП, на другой нет. Может ли код ниже отработать на машине, но так, что в запросе шаблон не будет указан, но ошибки при формировании запрос не получаю?: <object id="g_objClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object> sTemplate - OID шаблона Код:
Set objRequest = g_objClassFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
...
Set ObjectId = g_objClassFactory.CreateObject("X509Enrollment.CObjectId")
ObjectId.InitializeFromValue(sTemplate)
Set objTemplateExt = g_objClassFactory.CreateObject("X509Enrollment.CX509ExtensionTemplate")
Call objTemplateExt.InitializeEncode(ObjectId, 1, 0)
Call objRequest.X509Extensions.Add(objTemplateExt)
Отредактировано пользователем 26 января 2017 г. 13:44:44(UTC)
| Причина: Не указана
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close