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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline s.sokolko  
#1 Оставлено : 12 октября 2015 г. 14:42:21(UTC)
s.sokolko

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

Группы: Участники
Зарегистрирован: 23.09.2015(UTC)
Сообщений: 47
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 15 раз
Добрый день, уважаемые участники форума!

Я разрабатываю проект с использованием КриптоПРО ЭЦП browser plugin и CertEnroll. Недавно столкнулся с одной очень странной проблемой: я могу успешно сгенерировать запрос на сертификат
при одном значении subject:

Код:

objDn.Encode("CN=Иванов Иван Иванович", 0);


однако, стоит мне сделать subject сложнее (пример более приближен к реальности), как возникает ошибка: при коде

Код:

objDn.Encode("1.2.643.100.3=12345678909/1.2.643.100.1=1234567890987/1.2.643.3.131.1.1=123456789098/emailAddress=sdf@inbox.ru, C=RU, ST=72 Тюменская область, L=Губкинский, O=ООО ТЕСТ, CN=Иванов Иван Иванович/street=мкр. 1-й, 33/unstructuredName=INN=1234567890/KPP=123456789/OGRN=1234567890987/title=Директор, GN=Иван Иванович, SN=Иванов", 0); // XCN_CERT_NAME_STR_NONE = 0


Текст ошибки:

Цитата:

Error: Error calling method on NPObject!


Я использую браузер Mozilla Firefox под windows с КриптоПРО ЭЦП browser plugin

Вот полный листинг моего кода, который выполняет формирование запроса на сертификат:

Код:

<html>
<head>
    <title>Certificate Request test</title>
</head>
<body> 
<style type="text/css">
    object.hiddenObject
    {
        visibility: hidden;
        width: 0px;
        height: 0px;
        margin: 0px;
        padding: 0px;
        border-style: none;
        border-width: 0px;
        max-width: 0px;
        max-height: 0px;
    }
</style>
<object id="cadesplugin" type="application/x-cades" class="hiddenObject">
</object>  

<object id='certEnrollClassFactory' classid='clsid:884e2049-217d-11da-b2a4-000e7bbb2b09'>
</object>

  
  <script language="javascript">
function isIE() {
    var retVal = (("Microsoft Internet Explorer" == navigator.appName) || // IE < 11
        navigator.userAgent.match(/Trident\/./i)); // IE 11
    return retVal;
}

function isIOS() {
    var retVal = (navigator.userAgent.match(/ipod/i) ||
      navigator.userAgent.match(/ipad/i) ||
      navigator.userAgent.match(/iphone/i));
    return retVal;
}

// Функция активации объектов КриптоПро ЭЦП Browser plug-in
function CreateObject(name) {
    if (isIOS()) {
        // На iOS для создания объектов используется функция
        // call_ru_cryptopro_npcades_10_native_bridge, определенная в IOS_npcades_supp.js
        return call_ru_cryptopro_npcades_10_native_bridge("CreateObject", [name]);
    }
    if (!isIE()) {
        // В Firefox, Opera, Chrome, Safari создаются объекты NPAPI
        var pluginObject = document.getElementById("cadesplugin");
        return pluginObject.CreateObject(name);
    }
    // В Internet Explorer создаются COM-объекты
    if (name.match(/X509Enrollment/i)) {
        try {
            // Объекты CertEnroll создаются через CX509EnrollmentWebClassFactory
            var objCertEnrollClassFactory = document.getElementById("certEnrollClassFactory");
            return objCertEnrollClassFactory.CreateObject(name);
        }
        catch (e) {
            throw("Для создания обьектов X509Enrollment следует настроить веб-узел на использование проверки подлинности по протоколу HTTPS");
        }
    }
    // Объекты CAPICOM и CAdESCOM создаются обычным способом
    return new ActiveXObject(name);
}


var objCSP = CreateObject("X509Enrollment.CCspInformation");
var objCSPs = CreateObject("X509Enrollment.CCspInformations");
var objPrivateKey = CreateObject("X509Enrollment.CX509PrivateKey");
var objRequest = CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
var objObjectIds = CreateObject("X509Enrollment.CObjectIds");
var objObjectId = CreateObject("X509Enrollment.CObjectId");
var objX509ExtensionEnhancedKeyUsage = CreateObject("X509Enrollment.CX509ExtensionEnhancedKeyUsage");
var objExtensionTemplate = CreateObject("X509Enrollment.CX509ExtensionTemplate");
var objDn = CreateObject("X509Enrollment.CX500DistinguishedName");
var objEnroll = CreateObject("X509Enrollment.CX509Enrollment");

objCSP.InitializeFromName("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider");
objCSPs.Add(objCSP);
objPrivateKey.Length = 512;
objPrivateKey.KeySpec = 2;
objPrivateKey.Existing = false;
//objPrivateKey.CspInformations = objCSPs;
objPrivateKey.ProviderName = "Crypto-Pro GOST R 34.10-2001 KC1 CSP";
objPrivateKey.ProviderType = 75;
objRequest.InitializeFromPrivateKey(1, objPrivateKey, "");
objObjectId.InitializeFromValue("1.3.6.1.5.5.7.3.2");
        objObjectIds.Add(objObjectId);
        objX509ExtensionEnhancedKeyUsage.InitializeEncode(objObjectIds);
        objRequest.X509Extensions.Add(objX509ExtensionEnhancedKeyUsage);

//objDn.Encode("CN=Иванов Иван Иванович", 0); // XCN_CERT_NAME_STR_NONE = 0

objDn.Encode("1.2.643.100.3=12345678909/1.2.643.100.1=1234567890987/1.2.643.3.131.1.1=123456789098/emailAddress=sdf@inbox.ru, C=RU, ST=72 Тюменская область, L=Губкинский, O=ООО ТЕСТ, CN=Иванов Иван Иванович/street=мкр. 1-й, 33/unstructuredName=INN=1234567890/KPP=123456789/OGRN=1234567890987/title=Директор, GN=Иван Иванович, SN=Иванов", 0); // XCN_CERT_NAME_STR_NONE = 0

        objRequest.Subject = objDn;
objEnroll.InitializeFromRequest(objRequest);
        var pkcs10 = objEnroll.CreateRequest(3);


document.write("<br><pre>" + pkcs10+"</pre>");

  </script>
    
</body>
</html>


Заранее благодарен за помощь и ответы!
Offline Андрей Писарев  
#2 Оставлено : 12 октября 2015 г. 15:31:32(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2214 раз в 1728 постах
Код:
1.2.643.100.3=12345678909/1.2.643.100.1=1234567890987/1.2.643.3.131.1.1=123456789098/emailAddress=sdf@inbox.ru, 


Почему так записано?
Это же отдельные OID-ы, почему через /, а не через разделитель - запятую?
Техническую поддержку оказываем тут
Наша база знаний
Offline s.sokolko  
#3 Оставлено : 12 октября 2015 г. 15:40:02(UTC)
s.sokolko

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

Группы: Участники
Зарегистрирован: 23.09.2015(UTC)
Сообщений: 47
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 15 раз
Это пример из сертификата, который уже был выдан ранее удостоверяющим центром КриптоПРО УЦ. Запрос был почему-то сформирован Центром самостоятельной регистрации КриптоПРО УЦ именно в таком виде. Я пробовал перевести его в более читаемый формат, разделяя все поля запятой, однако, тоже получаю ошибку. Вначале я думал, что строка subject просто слишком длинная, но оказалось, что это не так. Может быть, можно как-то диагностировать проблему? Есть ли способ узнать код и причину ошибки при данном вызове?
Offline s.sokolko  
#4 Оставлено : 13 октября 2015 г. 7:33:53(UTC)
s.sokolko

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

Группы: Участники
Зарегистрирован: 23.09.2015(UTC)
Сообщений: 47
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 15 раз
Сегодня более детально рассмотрел запросы, генерируемые моим кодом из браузера и те, что есть в истории Крипто ПРО УЦ. Заметил, что отличается Public key Parameter Set: у меня получается
Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet, а в правильном запросе Parameter set: id-GostR3410-2001-CryptoPro-XchA-ParamSet. Можно ли как-то изменить Parameter Set из javascript? Какой объект отвечает за данное свойство?
Offline cross  
#5 Оставлено : 15 октября 2015 г. 13:48:50(UTC)
Анатолий Беляев

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
http://cpdn.cryptopro.ru...ades/x509privatekey.html
Вам нужно KeySpec свойство.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 1 пользователь поблагодарил Анатолий Беляев за этот пост.
s.sokolko оставлено 15.10.2015(UTC)
Offline s.sokolko  
#6 Оставлено : 15 октября 2015 г. 14:45:10(UTC)
s.sokolko

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

Группы: Участники
Зарегистрирован: 23.09.2015(UTC)
Сообщений: 47
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 15 раз
Автор: cross Перейти к цитате
http://cpdn.cryptopro.ru/default.asp?url=content/cades/x509privatekey.html
Вам нужно KeySpec свойство.


Спасибо! Именно это и было нужно!

Если кто-то ещё будет реализовывать подобную функциональность: dn нужно передавать в виде имя="значение"; , пары разделять точкой с запятой. Вместо имени лучше использовать цифровое обозначение свойств, например: 2.5.4.3="ООО Вектор";
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.