Статус: Активный участник
Группы: Участники
Зарегистрирован: 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>
Заранее благодарен за помощь и ответы!
|