Как исправить ошибки при публикации базы 1С на веб-сервере IIS и настроить доступ к HTTP-сервисам без авторизации?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Публикация информационной базы «1С:Предприятие» на веб-сервере — стандартная задача, с которой сталкивается практически каждый системный администратор или разработчик 1С. Однако процесс интеграции платформы с веб-сервером Microsoft Internet Information Services (IIS) версии 8.5 под управлением Windows Server 2012 R2 таит в себе множество скрытых нюансов. Неправильное распределение прав доступа, конфликты разрядности пулов приложений и особенности авторизации HTTP-сервисов могут привести к досадным сбоям.

В этой статье мы подробно и пошагово разберем, как избавиться от распространенной ошибки HTTP 403.14 - Forbidden, выясним природу сбоя авторизации HTTP 401.5 при обращении к HTTP-сервисам (например, HealthCheck) и рассмотрим безопасные архитектурные варианты настройки беспарольного доступа к API вашей базы данных.

Часть 1. Устраняем ошибку HTTP 403.14 - Forbidden при публикации 1С на IIS

Типичная ситуация: публикация базы в Конфигураторе проходит штатно и без предупреждений, в целевом каталоге (например, C:\inetpub\wwwroot\buh_test\) создается файл описания публикации default.vrd, но при попытке открыть базу через браузер по адресу http://localhost/buh_test/ сервер выдает ошибку:

«HTTP Error 403.14 - Forbidden. The Web server is configured to not list the contents of this directory».

Эта ошибка означает, что веб-сервер IIS воспринимает ваш запрос как попытку просмотреть физическое содержимое папки на диске. Это происходит из-за того, что IIS не понимает, что входящий запрос предназначен для обработки специальным модулем расширения 1С (wsisapi.dll). Рассмотрим основные шаги, которые помогут решить эту проблему.

Шаг 1. Запуск Конфигуратора от имени Администратора

Основная причина возникновения этой ошибки заключается в недостатке прав у платформы 1С в момент выполнения публикации. Если запустить 1С обычным двойным кликом, у процесса не хватит привилегий для изменения конфигурационных файлов веб-сервера IIS.

Для исправления ситуации выполним следующие действия:

  1. Закроем Конфигуратор и сеансы «1С:Предприятия».
  2. Найдем ярлык запуска 1С (или исполняемый файл 1cv8.exe).
  3. Нажмем на него правой кнопкой мыши и выберем пункт «Запуск от имени администратора».
  4. Откроем Конфигуратор нужной информационной базы.
  5. Перейдем в меню «Администрирование» — «Публикация на веб-сервере».
  6. Нажмем кнопку «Опубликовать» еще раз.

Запуск с повышенными правами позволяет платформе корректно создать конфигурационный файл web.config в каталоге публикации, а также зарегистрировать необходимые обработчики запросов непосредственно в метаданных IIS.

Шаг 2. Проверка ограничений ISAPI и CGI на уровне сервера IIS

Если запуск от имени администратора не помог, веб-сервер может блокировать работу динамической библиотеки 1С по соображениям безопасности. Нам необходимо вручную проверить глобальные разрешения IIS:

  1. Откроем «Диспетчер служб IIS».
  2. В левом дереве подключений выберем корневой элемент — имя вашего сервера.
  3. В центральной части окна найдем и откроем раздел «Ограничения ISAPI и CGI» (ISAPI and CGI Restrictions).
  4. Проверим, присутствует ли в списке путь к файлу модуля 1С wsisapi.dll для используемой версии платформы. Путь должен выглядеть примерно так: C:\Program Files\1cv8\8.3.11.2924\bin\wsisapi.dll.
  5. Убедимся, что для этой записи в колонке «Разрешение» установлено значение «Разрешено» (Allowed). Если записи нет, добавим ее вручную, указав путь к библиотеке и установив флаг «Разрешить выполнение пути расширения».

Шаг 3. Конфигурирование разрядности пула приложений IIS

Разрядность пула приложений IIS, обслуживающего веб-публикацию, должна строго соответствовать разрядности установленной платформы 1С. Если вы используете 64-битную платформу 1С, пул приложений должен работать в 64-битном режиме, и наоборот. Проверим эту настройку:

  1. В «Диспетчере служб IIS» перейдем в раздел «Пулы приложений» (Application Pools).
  2. Определим, какой пул обслуживает вашу публикацию (по умолчанию это DefaultAppPool, либо пул с именем вашей публикации).
  3. Нажмем правой кнопкой мыши на пул и выберем «Дополнительные параметры» (Advanced Settings).
  4. Найдем строку «Разрешить 32-разрядные приложения» (Enable 32-Bit Applications):
    • Если установлена 32-битная платформа 1С (x86) — установим значение True.
    • Если установлена 64-битная платформа 1С (x64) — установим значение False.
  5. Нажмем «ОК» и перезапустим пул приложений.

---

Часть 2. Разрешение конфликта авторизации (Ошибка HTTP 401.5)

После успешной публикации базы при попытке обратиться к кастомному HTTP-сервису (например, по URL http://localhost/buh_test/hs/HealthCheck) вы можете столкнуться с окном авторизации, а затем со следующей ошибкой:

«The URL you tried to reach has an ISAPI or CGI application installed that verifies user credentials before proceeding. This application cannot verify your credentials».

Технически это код ошибки 401.5, который означает, что IIS попытался взять на себя аутентификацию пользователя для внешней библиотеки, но не смог сопоставить переданные реквизиты со своей внутренней базой учетных записей Windows или Active Directory.

Выясним причину конфликта и устраним ее с помощью правильной настройки подсистем авторизации.

Шаг 1. Отключение лишних методов аутентификации в IIS

Для того чтобы IIS беспрепятственно передавал заголовки авторизации напрямую в платформу 1С (которая сама прекрасно умеет проверять логины и пароли пользователей ИБ), нам необходимо отключить все методы проверки подлинности IIS на уровне виртуального каталога, кроме анонимного доступа.

  1. В «Диспетчере служб IIS» развернем дерево сайтов до нашей публикации: Sites -> Default Web Site -> buh_test.
  2. Выделим имя нашей публикации buh_test и в центральной части откроем раздел «Проверка подлинности» (Authentication).
  3. Включим только «Анонимная проверка подлинности» (Anonymous Authentication) — состояние должно быть «Включено» (Enabled).
  4. Все остальные типы авторизации (Windows, Basic, ASP.NET, Digest) принудительно переведем в состояние «Отключено» (Disabled).

Таким образом, IIS перестанет пытаться проверять учетные данные пользователей своими силами и полностью делегирует авторизацию платформе 1С.

Шаг 2. Настройка NTFS-прав на системные папки 1С

Для стабильной работы модуля расширения веб-сервера необходимо предоставить процессам IIS права на запуск исполняемых файлов платформы 1С. Настроим права доступа к каталогу платформы:

  1. Откроем Проводник Windows и перейдем к папке установки 1С: C:\Program Files\1cv8\ (или к C:\Program Files (x86)\1cv8\ в случае использования 32-битной версии).
  2. Нажмем правой кнопкой мыши на папку версии (например, 8.3.11.2924) и откроем «Свойства», перейдем на вкладку «Безопасность».
  3. Нажмем кнопку «Изменить», затем «Добавить».
  4. В поле ввода имени объектов введем локальную группу пользователей IIS: IIS_IUSRS и нажмем «ОК».
  5. Установим для добавленной группы права: «Чтение и выполнение» (Read & execute), «Список содержимого папки» (List folder contents) и «Чтение» (Read).
  6. Аналогичным образом добавим пользователя IUSR с такими же правами.
  7. Нажмем «Применить» и дождемся завершения наследования прав для всех вложенных файлов, включая нужный нам файл wsisapi.dll.

---

Часть 3. Настройка работы HTTP-сервисов без ввода пароля

Рассмотрим ситуацию, когда к вашему HTTP-сервису HealthCheck обращаются сторонние внешние системы мониторинга или интеграционные вебхуки. Зачастую они не умеют или не должны каждый раз отправлять интерактивные запросы ввода логина и пароля. Мы можем настроить бесшовную авторизацию несколькими способами. Проанализируем каждый из них.

Способ А. Жесткое указание пользователя в файле default.vrd (Решение внутри 1С)

Мы можем отредактировать конфигурационный файл публикации default.vrd, прописав в параметрах подключения имя и пароль пользователя 1С, под которым веб-сервер будет автоматически авторизовать любые входящие анонимные запросы.

Разберем этот процесс по шагам:

  1. Откроем каталог нашей публикации: C:\inetpub\wwwroot\buh_test\.
  2. Найдем файл default.vrd, нажмем правой кнопкой мыши и откроем его с помощью любого текстового редактора (например, Notepad++).
  3. Найдем узел <point> и его атрибут ib, содержащий строку подключения к базе данных.
  4. Добавим параметры Usr (Имя пользователя 1С) и Pwd (Пароль пользователя 1С). Обратите внимание на необходимость использования XML-сущности &quot; вместо обычных двойных кавычек внутри атрибута.

Проанализируем структуру измененного файла для файлового варианта работы:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/buh_test"
       ib="File=&quot;C:\Base&quot;;Usr=&quot;WebMonitor&quot;;Pwd=&quot;SuperSecretPassword&quot;;">
    <ws>
        <point name="WebServices" alias="ws.1c" enable="true"/>
    </ws>
    <httpServices publishByDefault="true"/>
</point>

А теперь посмотрим на пример для клиент-серверного варианта базы данных:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/buh_test"
       ib="Srvr=&quot;Server1C&quot;;Ref=&quot;buh_test_db&quot;;Usr=&quot;WebMonitor&quot;;Pwd=&quot;SuperSecretPassword&quot;;">
    <httpServices>
        <service name="HealthCheck" alias="HealthCheck" enable="true"/>
    </httpServices>
</point>

Важное предупреждение: Данный метод имеет критический недостаток в области безопасности. Если по этой же ссылке http://localhost/buh_test/ вы планируете предоставлять доступ пользователям через веб-клиент 1С, то любой человек, открывший данный адрес в браузере, автоматически зайдет в базу данных под учетной записью WebMonitor без ввода пароля!

Способ Б. Передача данных авторизации по стандарту Basic Auth

Если нам необходимо разграничить доступ к веб-клиенту и к HTTP-сервисам, мы можем использовать встроенный механизм заголовков HTTP Basic Authentication. При этом в файле default.vrd логин и пароль по умолчанию указывать не нужно.

Внешнее приложение при отправке запросов должно передавать авторизационные данные непосредственно в URL-адресе в следующем формате:

http://WebMonitor:SuperSecretPassword@localhost/buh_test/hs/HealthCheck

Либо внешняя система должна сформировать стандартный HTTP-заголовок запроса:

Authorization: Basic V2ViTW9uaXRvcjpTdXBlclNlY3JldFBhc3N3b3Jk

Где строка V2ViTW9uaXRvcjpTdXBlclNlY3JldFBhc3N3b3Jk представляет собой закодированную в Base64 комбинацию Логин:Пароль.

Примечание: для обеспечения безопасности передаваемых данных при использовании Basic Auth настоятельно рекомендуется настроить на IIS шифрование трафика (протокол HTTPS) и получить SSL-сертификат. В противном случае пароли будут передаваться по сети в открытом виде.

Способ В. Использование Nginx в качестве обратного прокси-сервера (Рекомендуемый вариант)

Выясним наиболее гибкий и безопасный способ организации доступа. Если внешнее интегрируемое приложение не умеет работать со стандартной авторизацией, а светить пароли в файле default.vrd или в URL-адресах небезопасно, мы можем развернуть перед веб-сервером IIS быстрый прокси-сервер Nginx.

Схема взаимодействия выглядит следующим образом:

  1. Внешний клиент отправляет абсолютно анонимный запрос на внешний порт Nginx (например, 80 или 443).
  2. Nginx перехватывает этот запрос, локально добавляет в него необходимый служебный заголовок Authorization: Basic ... с зашифрованными учетными данными служебного пользователя 1С.
  3. Nginx перенаправляет модифицированный и авторизованный запрос «внутрь» сервера на IIS.

Рассмотрим пример конфигурационного файла Nginx (nginx.conf) для реализации такой схемы проксирования:


server {
    listen 80;
    server_name monitoring.company.local;

    location /buh_test/hs/HealthCheck {
        # Перенаправляем запрос на локальный IIS
        proxy_pass http://127.0.0.1:8080/buh_test/hs/HealthCheck;
        
        # Подменяем заголовки хоста
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        
        # Автоматически внедряем заголовок авторизации 1С (WebMonitor:SuperSecretPassword)
        # Значение "V2ViTW9uaXRvcjpTdXBlclNlY3JldFBhc3N3b3Jk" получено кодированием в Base64
        proxy_set_header Authorization "Basic V2ViTW9uaXRvcjpTdXBlclNlY3JldFBhc3N3b3Jk";
    }

    # Все остальные запросы (например, к веб-клиенту) проксируем без изменений авторизации
    location /buh_test/ {
        proxy_pass http://127.0.0.1:8080/buh_test/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

В этой конфигурации веб-сервер IIS должен быть перенастроен на работу на альтернативном внутреннем порту (например, 8080), а Nginx займет стандартные внешние порты. При такой архитектуре мы надежно скрываем авторизационные реквизиты 1С внутри защищенной конфигурации Nginx, предоставляя внешнему миру простой, беспарольный и безопасный доступ к конкретной точке интеграции.

← На главную