Статус: Новичок
Группы: Участники
Зарегистрирован: 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 нет, а корректно работающих я не нашёл
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
подпись в JS + CAPICOM корректно работать не будет в некоторых случаях варианты 1)использовать наш CAdES Plugin вместо CAPICOM 2)использовать vbscript вместо JS (не рекомендует MS) 3)написать свой объект для подписи |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.03.2013(UTC) Сообщений: 7  Сказал(а) «Спасибо»: 1 раз
|
Спасибо за ответ, благодаря экспериментам с CAdES всё таки получилось организовать связку JS + CAPICOM :) Достаточно было убрать Код:oSignedData.Content = oUt.Base64Decode(sPKCS10)
и поставить Код:oSignedData.Content = sPKCS10
Как ни странно, но всё получилось и в base64-виде
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Вообще говоря, подпись юникодной строки base64 вместо бинарного массива приводит к увеличению размера данных, хранимых в БД ЦР, в 8/3 раза, что не есть хорошо. А если Вы будете ставить таким образом еще одну подпись, например для автоматического одобрения, то размер увеличится более чем в 7 раз. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close