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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline bsam  
#1 Оставлено : 5 мая 2014 г. 6:32:17(UTC)
bsam

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 7
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Здравствуйте!
Помогите, пожалуйста, с проблемой:
Пытаюсь организовать продление сертификатов посредством генерации ключей локально у клиентов и передачи строки запроса на УЦ
Реализую всё на javascript используя библиотеку CAPICOM
При попытке помещения запроса на УЦ ошибка CryptDecodeObjectEx(0x80093102), в xml:
Код:
mserror:returnCode>-2146881278</mserror:returnCode>
<mserror:serverErrorInfo>
<mserror:description>CryptDecodeObjectEx</mserror:description>
<mserror:source>CPICom.CertRequest.1</mserror:source>
</mserror:serverErrorInfo>

Судя по всему проблема с функцией GenerateRenewalCertRequest
Код:
function GenerateRenewalCertRequest(SubjectName, oSignerCertificate ,sEKU,ContainerName){
var sDN  = RevDN(SubjectName)	
var sPKCS10 =  GenerateSelfSignedCertRequest(sDN, sEKU, ContainerName)
var oSignedData = new ActiveXObject("CAPICOM.SignedData")
var oUt  = new ActiveXObject("CAPICOM.Utilities")
oSignedData.Content = oUt.Base64Decode(sPKCS10) 
var oSigner = new ActiveXObject("CAPICOM.Signer")
oSigner.Certificate = oSignerCertificate
oSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
return oSignedData.Sign(oSigner, false, CAPICOM_ENCODE_BASE64)
}

Похоже, oSignedData.Content = oUt.Base64Decode(sPKCS10) при декодировании обрезает последние символы
(Проверил так: закодировал обратно oSignedData.Content и сравнил с sPKCS10)
Находил решения типа
Код:
oSignedData.Content = oUt.ByteArrayToBinaryString(System.Text.Encoding.UTF8.GetBytes(sPKCS10));
, но такие функции в js не работают
Помогите, пожалуйста, с проблемой, т.к. на js встроенных функций для работы с base64 нет, а корректно работающих я не нашёл
Offline Kirill Sobolev  
#2 Оставлено : 5 мая 2014 г. 10:08:26(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
подпись в JS + CAPICOM корректно работать не будет в некоторых случаях
варианты
1)использовать наш CAdES Plugin вместо CAPICOM
2)использовать vbscript вместо JS (не рекомендует MS)
3)написать свой объект для подписи
Техническую поддержку оказываем тут
Наша база знаний
Offline bsam  
#3 Оставлено : 7 мая 2014 г. 7:01:24(UTC)
bsam

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 7
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Спасибо за ответ, благодаря экспериментам с CAdES всё таки получилось организовать связку JS + CAPICOM :)
Достаточно было убрать
Код:
oSignedData.Content = oUt.Base64Decode(sPKCS10) 

и поставить
Код:
oSignedData.Content = sPKCS10 

Как ни странно, но всё получилось и в base64-виде
Offline Kirill Sobolev  
#4 Оставлено : 7 мая 2014 г. 11:12:29(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Вообще говоря, подпись юникодной строки base64 вместо бинарного массива приводит к увеличению размера данных, хранимых в БД ЦР, в 8/3 раза, что не есть хорошо.
А если Вы будете ставить таким образом еще одну подпись, например для автоматического одобрения, то размер увеличится более чем в 7 раз.
Техническую поддержку оказываем тут
Наша база знаний
Offline bsam  
#5 Оставлено : 20 августа 2014 г. 10:54:58(UTC)
bsam

Статус: Новичок

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 7
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Здравствуйте!
Чтобы не создавать новую тему в продолжении этой напишу здесь
Проблемы возникли при переносе сервиса в боевой режим
На тестовом УЦ все работало, на боевом запрос на сертификат публикуется, а вот во время запроса на одобрения запроса на сертификат следующая ошибка:
Код:
<faultcode xmlns:SOAPSDK4="http://schemas.microsoft.com/soap-toolkit/faultdetail/error/">SOAPSDK4:SOAP-ENV:Server</faultcode>
<faultstring>BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.</faultstring>
<faultactor>https://amur-ra/RA/RA.asp</faultactor>
-<detail>
-<mserror:errorInfo xmlns:mserror="http://schemas.microsoft.com/soap-toolkit/faultdetail/error/">
<mserror:returnCode>3021</mserror:returnCode>
-<mserror:serverErrorInfo>
<mserror:description>BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.</mserror:description>
<mserror:source>ADODB.Field</mserror:source>
</mserror:serverErrorInfo>
</mserror:errorInfo>
</detail>
</SOAP-ENV:Fault>

Грешу на длину SOAP-запроса, выходит около 35000 символов, поменял на IIS макс размер до 50000, проблема осталась, на этом идеи кончились. Может с БД что не так? используется SQL 2005 Express
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.