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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sniker  
#1 Оставлено : 13 мая 2015 г. 17:16:44(UTC)
sniker

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

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

Сказал(а) «Спасибо»: 15 раз
Приветствую!
Есть проблема. Прикручиваем к своему сайту систему получения ЭП.
В iframe'е выводим интерфейс получения сертификата по полученному ранее маркеру временного доступа.

На этапе после генерирования закрытого ключа на стороне клиента (файл RegCreateCertRequest.asp) клиент перенаправляется на создание запроса на сертификат (файл RegSubmitCertRequest.asp). Вот здесь и возникает ошибка:

Код RegSubmitCertRequest.asp
Код:
<!-- #include FILE="RegHeader.asp" -->
<% ' $Id: RegSubmitCertRequest.asp,v 1.7 2007/02/16 14:54:47 sobolev Exp $ %>
<%
Dim oCertMan
Dim PKCS10
Dim AddInfo
Dim RequestID
Dim Accepted

' Проверить наличие маркера (его корректность будет проверена далее) в переданных через POST данных.
' Если его нет, то выдать ошибку.
' Отправлять на страницу ввода пароля бессмысленно,
' так как нам нужен параметр PKCS10.
' Резюме: если мы попали сюда не по POST, или в форме нет полей TokenID, Password и PKCS10 - то ошибка.
If Request.Form("TokenID") = vbNullString Or Request.Form("Password") = vbNullString Then
  Response.Redirect "../Error.asp?Error=" & "Ошибка доступа к странице"
End If

PKCS10 = Request.Form("PKCS10")
AddInfo = Request.Form("UserInfo")

If Request.Form("PKCS10") = vbNullString Then
  Response.Redirect "../Error.asp?Error=" & "Ошибка доступа к странице"
End If


Set oCertMan = CreateObject(PROGID_CERTMAN)

' Корректность маркера доступа будет проверена здесь.
oCertMan.SubmitRequest PKCS10, Trim(AddInfo), RequestID, Accepted
...далее еще код


На строке oCertMan.SubmitRequest PKCS10, Trim(AddInfo), RequestID, Accepted внутри функции происходит редирект на Error.php и вылезает ошибка:
Цитата:
Произошла ошибка



Возникла непредвиденная ошибка. Номер: 0x1527 Сообщение: Connector:Connection time out. HRESULT=0x800A1527 - Client:An unanticipated error occurred during the processing of this request. HRESULT=0x800A1527 - Client:Sending the Soap message failed or no recognizable response was received HRESULT=0x800A1527 - Client:Unspecified client error. HRESULT=0x800A1527



Обратитесь к администратору


Как я понимаю, смысл ошибки в том что вышло время ожидания, но не очень понимаю почему?
Причём эта ошибка иногда появляется, а иногда нет.
Поле PKCS10 точно передается - проверено.

Продполагаю, что УЦ "подвисает" и нужно просто попытаться еще раз отправить запрос чуть попозже.
Причём именно так и получается - если попытаться чуть позже отправить запрос, то все нормально проходит без ошибок (а иногда всё повторяется с ошибкой).

Вопрос вот в чём:
Внутри вызываемого метода oCertMan.SubmitRequest при ошибке происходит редирект и никак нельзя обработать исключение.
Код самого метода закрытый - внутрь не попасть.
Может есть какие-нибудь варианты?

"On Error Resume Next" не помогает, т.к. метод не выбрасывает исключений, а сразу редиректит при таймауте соединения.
Offline Kirill Sobolev  
#2 Оставлено : 13 мая 2015 г. 22:29:28(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Здравствуйте.
УЦ может "подвисать" в этом методе, например, из-за проблем связи ЦР-ЦС.
У Вас включена настройка автоматического одобрения запросов, поданных через веб-интерфейс?
В методе SubmitRequest нет никаких редиректов, и тем более в УЦ нет страницы Error.php - у Вас модифицированный веб-интерфейс?
Есть ошибки в журнале УЦ?
Техническую поддержку оказываем тут
Наша база знаний
Offline sniker  
#3 Оставлено : 14 мая 2015 г. 17:31:04(UTC)
sniker

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

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

Сказал(а) «Спасибо»: 15 раз
Цитата:
Здравствуйте.
УЦ может "подвисать" в этом методе, например, из-за проблем связи ЦР-ЦС.
У Вас включена настройка автоматического одобрения запросов, поданных через веб-интерфейс?
В методе SubmitRequest нет никаких редиректов, и тем более в УЦ нет страницы Error.php - у Вас модифицированный веб-интерфейс?
Есть ошибки в журнале УЦ?

Насчет "подвисания" я как раз и подумал в первую очередь, но даже если это так, то очень хотелось бы ловить в коде эту ситуацию и корректно обрабатывать, а не "вываливать" на пользователя сообщение с ошибкой.

Автоматическое одобрение у нас включено. Если все происходит без ошибок, то скрипт автоматически перенаправляется на следующий этап RegInstallCert.asp

Веб-интерфейс модифицирован, но не значительно. Например рассматриваемый в вопросе файл RegSubmitCertRequest.asp вобще не модифицирован.
Но это не особо важно, т.к. ошибка также появляется и в оригинальном веб-интерфейсе.

А Error.php всё-таки есть среди скриптов УЦ и появляется в коде скриптов очень часто. Хотябы даже в приведенном листинге Error.php встречается не раз
Код:
If Request.Form("TokenID") = vbNullString Or Request.Form("Password") = vbNullString Then
  Response.Redirect "../Error.asp?Error=" & "Ошибка доступа к странице"
End If

Код:
If Request.Form("PKCS10") = vbNullString Then
  Response.Redirect "../Error.asp?Error=" & "Ошибка доступа к странице"
End If


А где журнал УЦ искать?

Ктати, вот так выглядит таблица запросов на сертификат (при входе в веб-интерфейс) после многих попыток:

Таблица

Видимо, неудачные попытки, по которым скрипт так и не дождался ответ имеют статус "В ожидании обработки".

Отредактировано пользователем 14 мая 2015 г. 17:46:58(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#4 Оставлено : 14 мая 2015 г. 22:55:20(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Насчет "подвисания" я как раз и подумал в первую очередь, но даже если это так, то очень хотелось бы ловить в коде эту ситуацию и корректно обрабатывать, а не "вываливать" на пользователя сообщение с ошибкой.

Перехватывайте в коде asp с помощью On Error, если Вы используете vbscript либо try..catch в случае javascript.
Цитата:
А Error.php всё-таки есть среди скриптов УЦ и появляется в коде скриптов очень часто. Хотябы даже в приведенном листинге Error.php встречается не раз

Возможно, Вы имеете ввиду Error.asp?
Цитата:
А где журнал УЦ искать?

В АРМ Администратора.
Техническую поддержку оказываем тут
Наша база знаний
Offline sniker  
#5 Оставлено : 15 мая 2015 г. 12:11:37(UTC)
sniker

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

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

Сказал(а) «Спасибо»: 15 раз
Цитата:
Перехватывайте в коде asp с помощью On Error, если Вы используете vbscript либо try..catch в случае javascript.

Уже пробовал:
Код:
On Error Resume Next
' Корректность маркера доступа будет проверена здесь.
oCertMan.SubmitRequest PKCS10, Trim(AddInfo), RequestID, Accepted
If Err.Number <> 0 Then
  Response.Redirect "../Error.asp?Error=" & Err.Description
End If


Всёравно ошибка с таймаутом вылезает.

Цитата:
Возможно, Вы имеете ввиду Error.asp?

Liar Да, конечно. Опечатался.

Журнал нашёл, но там такая же ошибка.
Offline Kirill Sobolev  
#6 Оставлено : 15 мая 2015 г. 12:21:08(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Пробовали менять Response.Redirect на свою обработку?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
sniker оставлено 15.05.2015(UTC)
Offline sniker  
#7 Оставлено : 15 мая 2015 г. 12:56:53(UTC)
sniker

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

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

Сказал(а) «Спасибо»: 15 раз
Спасибо! Dancing
Разобрался. "On Error Resume Next" прекрасно работает и ловит эту ошибку.

Вместо
Код:
If Err.Number <> 0 Then
  Response.Redirect "../Error.asp?Error=" & Err.Description
End If


надо было что-то типа такого делать
Код:
Response.Write "<br>Попытка 1 ..."
On Error Resume Next

' Корректность маркера доступа будет проверена здесь.
oCertMan.SubmitRequest PKCS10, Trim(AddInfo), RequestID, Accepted

If Err.Number <> 0 Then
  Response.Write "<br>Не получилось: (" & Err.Number & ") " & Err.Description
  Err.Clear
  Response.Write "<br>Попытка 2 ..."
  
  ' Корректность маркера доступа будет проверена здесь.
  oCertMan.SubmitRequest PKCS10, Trim(AddInfo), RequestID, Accepted
  
  If Err.Number <> 0 Then
    Response.Write "<br>Не получилось: (" & Err.Number & ") " & Err.Description
	Response.End
  End If
  
End If


Со второй попытки без ошибок всё прошло, даже если с первой не получилось
Offline Kirill Sobolev  
#8 Оставлено : 15 мая 2015 г. 13:41:41(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Пожалуйста.
Учтите только, что при таком подходе первый запрос, отправленный при неудавшимся вызове SubmitRequest так и останется висеть на ЦР.
Обойти это не получится.
Техническую поддержку оказываем тут
Наша база знаний
Offline sniker  
#9 Оставлено : 15 мая 2015 г. 13:59:14(UTC)
sniker

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

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

Сказал(а) «Спасибо»: 15 раз
Интересно, а можно ли где-нибудь в настройках увеличить таймаут для ожидания ответа от ЦС?
Тогда ничего и придумывать не надо будет.
Только пользователь будет ждать подольше.
Offline Kirill Sobolev  
#10 Оставлено : 15 мая 2015 г. 15:39:03(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Да, можно в настройках ЦР.
Файл на ЦР \Documents and Settings\All Users\Application Data\Crypto Pro\RA\Inetpub\<номер веб узла модуля доступа>\RA\web.configuration, параметр RaSoapClientTimeout (секунды).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Кирилл Соболев за этот пост.
sniker оставлено 15.05.2015(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.