Ошибка при выполнении запросов GET к ресурсу в 1С

Публикация 1СДобрый день! Уважаемые читатели и гости IT блога Pyatilistnik. В предыдущей статье мы успешно устранили ошибку "0x00002740: only one usage of each socket address" в 1С. Сегодня так же поговорим про данное ПО и рассмотрим ситуацию, что в момент работы клиента появляется ошибка. о потере соединения по причине, невыполненного запроса GET к ресурсу. Давайте я поделюсь с вами данным практическим опытом.

Описание ошибки

Есть публикация БД 1С на веб сервере, к данной публикации подключаются клиенты на RDS ферме. В какой-то момент работы у пользователя выскакивает вот такая ошибка:

Потеряно соединение по причине: Ошибка выполнения запросов. Ошибка при выполнении запроса GET к ресурсу. Ошибка HTTP при обращении к серверу. Failure when receiving data from the peer.

В 1Ске все очень информативные журналы, по которым вы сразу можете понять причину, конечно же это шутка.

 

Ошибка при выполнении запросов GET к ресурсу в 1С

Диагностика ошибки и ее устранение

  • Первое, что нужно делать, это изучить логи. Данную ошибку я ловил на многих хостах, поэтому раз они все шли к публикации, то логично изучать логи IIS. Там я особо ничего интересного не нашел.
  • Далее я вам советую включить трассировку в IIS, как это делать смотрите по ссылке. На выходе вы будите получать более детальные отчеты с кодами, это сильно помогает при диагностике.

Failed Request Tracing Rules

После того как у вас вновь появятся ошибки, вам необходимо пройти в папку C:\inetpub\logs\FailedReqLogFiles\W3SVC1. Откройте нужный XML файл, я для этого использую Notepad++.

appPoolId="DefaultAppPool"
processId="11172"
verb="POST"
authenticationType="NOT_AVAILABLE" activityId="{40039E7C-0006-0000-0000-84710C7967BB}"
failureReason="STATUS_CODE"
statusCode="401.2"
triggerStatusCode="401.2"
timeTaken="563"

В результате я вижу ошибку 401.2, с которой я сталкивался в статье "Вечная авторизация на certsrv Certificate Authority". Суть ее сводится к NTLM протоколу (Windows аутентификации).

IIS 402.1

Как устранить ошибку при выполнении запроса GET к ресурсу

Откройте IIS, выберите основной сайт, где опубликована база. Откройте методы аутентификации "Authentication".

Методы аутентификации IIS

Включите анонимную аутентификацию, все остальное выключите.

Включение анонимной аутентификации

Теперь откройте вкладку "Authentication", но уже для опубликованной базы. Там выключите все, кроме "Windows Authentication".

Включение Windows Authentication

Далее выберите "Windows Authentication" и выберите в контекстном меню "Providers".

Провайдеры IIS

Выберите первым типом "Negotiate" он в себе уже будет нести и kerberos и NTLM.

Negotiate — это механизм аутентификации, который позволяет клиенту и серверу выбрать наиболее подходящий метод аутентификации из доступных. Обычно это Kerberos или NTLM. Когда клиент подключается к серверу, сервер отправляет запрос на аутентификацию. Клиент отвечает, предоставляя информацию о поддерживаемых методах аутентификации. Если обе стороны поддерживают Kerberos, используется этот протокол; если нет — используется NTLM.

NTLM может быть уязвим к некоторым атакам, например, к атакам "человек посередине" (MITM). Также он не поддерживает механизмы защиты, такие как Kerberos, что делает его менее безопасным по сравнению с более современными методами.

NTLM — это протокол аутентификации, который используется для проверки подлинности пользователей в сетях Windows. Он был разработан Microsoft и является частью более ранних версий Windows. При аутентификации NTLM клиент отправляет учетные данные на сервер, который затем использует эти данные для проверки подлинности. NTLM использует хеширование паролей и не передает пароли в открытом виде.

Использование механизма Negotiate позволяет повысить безопасность за счет выбора более безопасного протокола (Kerberos), если он доступен. Kerberos обеспечивает более надежную защиту и поддержку взаимной аутентификации.

В некоторых случаях NTLM может быть быстрее, поскольку не требует взаимодействия с контроллером домена для каждой аутентификации, в отличие от Kerberos.

Включение negotiate

Далее на уровне публикации выберите правила авторизации "Authorization Rules". После чего разрешите всем пользователям доступ, как показано на картинке.

Правила авторизации в IIS

То же самое можно сделать и через конфиг данной публикации, в файле web.config, добавив туда код:

 <security>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
</security>

Пример работающего конфига:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<security>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
<authentication>
<windowsAuthentication enabled="true" useKernelMode="true">
<providers>
<clear />
<add value="Negotiate" />
<add value="NTLM" />
</providers>
<extendedProtection tokenChecking="Allow" />
</windowsAuthentication>
<basicAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
<add name="1C Web-service Extension" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files (x86)\1cv8\8.3.25.1445\bin\wsisapi.dll" resourceType="Unspecified" requireAccess="None" />
</handlers>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="400-413,500" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>

Если будите менять через конфигурационный файл, то не забудьте, что по умолчанию изменения секции web.config <authentication> заблокированы на уровне IIS в файле:

%windir%\system32\inetsrv\config\applicationHost.config

Откройте его и поменяйте для секции "Authentication" значение Deny на Allow.

<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
<section name="basicAuthentication" overrideModeDefault="Allow" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Allow" />
</sectionGroup>

Отключение галки в 1С

Еще сто процентное решение избавиться от галочки "Использовать аутентификацию операционной системы" в свойствах публикации на 1ске.

Использовать аутентификацию операционной системы

Избавляйтесь от NTLM. На этом у меня все, надеюсь, что вам удалось устранить ошибку 402.1 при работе с публикациями 1С. С вами был Иван Сёмин. автор и создатель IT портала Pyatilistnik.org.

Дополнительные ссылки

  • https://www.centrel-solutions.com/media/xiaconfiguration/adminguideweb/InvalidAuthenticationHeaders.html
  • https://www.bizkit.ru/2013/05/24/1722/
  • https://www.e-du.ru/2019/05/iis-401-unauthorized-error.html?m=1
  • https://forum.infostart.ru/forum9/topic263891/
Оцените статью
Настройка серверов windows и linux
Добавить комментарий