Настройка поддержки аутентификации ОС на веб-клиенте 1С через Apache 2.4 (Linux)

03.08.25

Администрирование - Администрирование веб-серверов

Проблема: При переходе с Windows на Linux многие сталкиваются с затруднениями при настройке аутентификации ОС в веб-клиенте 1С через Apache 2.4 (Debian). Решение: Команда Magnit Tech (Центр экспертизы 1С и Сопровождение 1C) разработала готовую инструкцию по настройке веб-клиента 1С на Debian 12 с поддержкой как Windows, так и Linux-серверов. Экономьте время — внедряйте проверенное!

Cодержание

 

  • 1 Введение
  • 2 Как к этому пришли?
  • 3 Полная инструкция по настройке доменной аутентификации 1C веб-сервера Apache на ОС Debian
    • 3.1 Подготовка окружения
    • 3.2 Настройка сервисной УЗ веба в Active Directory
    • 3.3 Установка 1C и Веб-сервера Apache
    • 3.4 Публикация базы на веб-клиент с поддержкой веб-сервисов на Apache с ОС Debian через webinst
    • 3.5 Настройка Веб-сервера Apache для поддержки аутентификации ОС
  • 4 Заключение
  • 5 Вопросы и ответы
  • 6 Ссылки

 

Введение

Всем большой привет, Инфостарт!

В Magnit Tech в отделе Центра экспертизы 1C мы осуществляем проект по переводу информационных систем 1C с ОС Windows на ОС LInux. Так как для каждого дистрибутива Linux своя инструкция по настройке 1C веб-сервера Apache с поддержкой доменной аутентификации ОС, то мы решили, что будет правильно поделиться этими знаниями по многочисленным вопросам от участников прошлых конференций.

В нашем кейсе схема веб публикации базы: один веб-сервер - одна платформа. То есть через веб-клиент с 8.3.24 мы можем зайти только на базу с 8.3.24. Темы установки и настройки СП 1C, на котором будет опубликована база, мы не касались, поскольку подобных инструкций много, а инструкций по настройке доменной аутентификации на Веб-сервере с ОС Debian почти что и нет.

Наша цель: настроить доменную аутентификацию через SSO на Веб-сервере Apache 2.4 с ОС Debian 12, при 1C Платформе 8.3 с компонентой адаптера веб-клиента ws.

Краткое описание задачи: интеграция аутентификации ОС (Active Directory) в веб-клиент 1С через веб-сервер Apache 2.4 на ОС Debian 12.

Для чего это нужно: единый вход (SSO), повышение безопасности, удобство пользователей.

Основные технологии:

  • Контроллер домена: Windows Active Directory
  • Веб-сервер: 

    • ОС Debian 12
    • 1С:Предприятие (адаптер веб-клиента ws) 8.3.24.1624
    • Веб-сервер Apache 2.4.62
    • Модуль доменной аутентификации apache2: mod_auth_gssapi 1.6.4-3
  • Сервер приложений 1C:
    • ОС Debian 11/12
    • 1C:Предприятие (СП) 8.3.24.1624

Используется ВМ для СП 1C и ВМ для Веб-сервера apache.

 

 

Как к этому пришли?

Мы долго бились с проблемой не рабочей доменной аутентификации ОС на веб-сервере Apache 2.4 Debian 11, так как инструкция с ИТС (2.8.1.3. Аутентификация операционной системы при использовании веб-сервера Apache - https://its.1c.ru/db/v8322doc/bookmark/adm/TI000000063) не давала результата.

Изначально, наш стэк технологий был:

  • Контроллер домена: Windows Active Directory
  • Веб-сервер:

    • ОС Debian 11
    • 1С:Предприятие (адаптер веб-клиента ws) 8.3.22.1851
    • Веб-сервер Apache 2.4.62
    • Модуль доменной аутентификации apache2: mod_auth_gssapi 1.6.3
  • Сервер приложений 1C:
    • ОС Debian 11
    • 1C:Предприятие (СП) 8.3.22.1851

В ходе переписки с представителями 1C мы узнали, что есть доп подводные камни, например:

  • Полной официальной документации для настройки Apache для аутентификации ОС при входе в 1С с использованием gssapi нет.
  • Была найдена ранее зарегистрированная и уже исправленная ошибка '60008315' препятствующая аутентификации на платформе до 8.3.22.2208.
  • Для браузера клиента требуется выполнять настройку согласно инструкции (Глава 9. Настройка веб-браузеров для работы в веб-клиенте (1c.ru))
  • Для изучения логов требуется собирать ТЖ при входе веб-клиентом (из браузера), тонким клиентом через веб-публикацию и тонким клиентом при прямом подключении.

Эти рекомендации тоже не давали результата.
При изучении логов мы упирались в сообщения об постоянном подключении без результата. 

В какой-то момент наш коллега из отдела cопровождения 1С решил, что надо самому поиграться с настройкой, и тут мы наконец получили результат!

Проблема была в версии ОС Debian 11 для веб-сервера, а именно пакет модуля доменной аутентификации apache2 mod_auth_gssapi 1.6.3 не давал работать аутентификации ОС согласно инструкции (ИТС). Только версия модуля 1.6.4-3 решила проблему. Тем самым решением было обновление ОС веб-сервера до Debian 12, чтобы доменная аутентификация начала работать.

В итоге мы пришли к тому стеку технологий, который указан в самом начале.

 

Полная инструкция по настройке доменной аутентификации 1C веб-сервера Apache на ОС Debian

Подготовка окружения

Предварительно должно быть следующее:

  • Требования для Веб-сервера:
    • ОС Debian 12.
    • Доступ к контроллеру домена Active Directory.
  • Требования для СП:
    • Заведена служебная УЗ СП в Active Directory.
    • ОС Debian 11 - 12.
    • Установленная 1C Платформа 8.3.24.1624 с компонентами server, server_admin, additional_admin_functions.
    • Выпущенный для него Keytab файл.
    • Доступ к контроллеру домена Active Directory.

 

Настройка сервисной УЗ веба в Active Directory

Настройка привязанных SPN

У доменной сервисной УЗ веба должны быть определены привязанные к ней SPN. Стоит помнить правило, что SPN может принадлежать только к одной УЗ.

 

 

Помимо этого требуется еще и настройка доступа к веб-серверу (обратитесь к своим коллегам предоставляющим ВМ).

 

Установка 1C и Веб-сервера Apache

1.  Устанавливаем 1C Платформу только с компонентой адаптера веб-клиента

Качаем с официального сайта программу установщик 1C Платформы 8.3.24.1624,

Ссылка на программу установщик: https://releases.1c.ru/project/Platform83.

8.3.24.1624 → Linux (x64) → Технологическая платформа 1С:Предприятия (64-bit) для Linux → Скачать дистрибутив

Далее распаковываем и перекидываем файл setup-full-8.3.24.1624-x86_64.run на веб-сервер

Запускаем установку:

./setup-full-8.3.24.1624-x86_64.run --mode unattended --disable-components client_full --enable-components ws

Примечание 1:

Как видно из программы установщика мы используем версию 1C платформы 8.3.24.1624, архитектура сервера x86-64, устанавливаем только нужную нам компоненту адаптера веб-клиента - ws, строго указывая, что нам не требуется полный клиент - client_full.

Примечание 2:

В качестве инструкции ИТС предлагает краткий обзор вариантов установки 1C Платформы под ОС Linux с обзором компонентов.
Чтобы стало возможным сделать публикацию веб-клиента надо установить компоненту ws. В качестве способа установки предлагается 2 варианта - через программу установщик или через Deb-пакеты. Выбор способа установки далее повлияет на способ удаления платформы, поэтому мы рекомендуем вариант с программой установщиком, где достаточно указать необходимые флаги с аргументами.

Главная::Инструкции по разработке на::1С Платформа::1С:Предприятие. Документация::Платформа 1С:Предприятие 8.3.24::Клиент-серверный вариант. Руководство администратора::Глава 3. Установка компонентов системы::3.1.3. Установка в ОС Linux -  https://its.1c.ru/db/v8324doc/bookmark/cs/TI000000292

ws - адаптер для публикации веб-клиента и Интернет-сервисов «1С:Предприятия» на веб-сервере Apache HTTP Server (поддерживаемых версий)

 

2. Устанавливаем веб-сервер apache версии 2.4.62 или выше

sudo apt install apache2

3. Устанавливаем модуль аутентификации apache2: libapache2-mod-auth-gssapi

sudo apt install libapache2-mod-auth-gssapi

4. Добавляем поддержку SSL-сертификатов

Включаем модули для работы с SSL

sudo a2enmod ssl

sudo a2enmod headers

sudo a2enmod rewrite

Полученный файл сертификата для сервера и приватный ключ помещаем в созданный нами в каталог Apache:

sudo mkdir /etc/apache2/ssl && chmod755 /etc/apache2/ssl

sudo cp ~/<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>.cer /etc/apache2/ssl/<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>.cer && sudo cp ~/private.key /etc/apache2/ssl/private.key && sudo chmod 755 /etc/apache2/ssl/*

Конфиг по умолчанию с виртуальным хостом можем смело удалить из включенных
sudo rm /etc/apache2/sites-enabled/000-default.conf 

Прописываем пути в конфигурационном файле виртуального хоста:

sudo nano /etc/apache2/sites-enabled/default.conf

SSLCertificateFile    /etc/apache2/ssl/<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>.cer
SSLCertificateKeyFile /etc/apache2/ssl/private.key

 

Примечание 1:

 
 Для копирования останется только поменять имя файла сертификата .cer

 

5. Перезапустить службу, чтобы настройки веб-сервера вступили в силу

sudo systemctl restart apache2

В итоге получили подобный вывод при заходе на веб-сервер через браузер по ссылке https://<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>.your.corp.ru/:

 

 

Ура у нас есть Веб-сервер apache2 с поддержкой SSL-сертификатов и 1C платформой с адаптером для публикации веб-клиента!

Далее остается дело за малым:

1) Сделать веб-публикацию базы с поддержкой веб-сервисов

2) Настроить доменную аутентификацию на веб-сервере Apache с ОС Debian 12

 

Публикация базы на веб-клиент с поддержкой веб-сервисов на Apache с ОС Debian через webinst

Для создания веб-публикаций от 1С предоставляется утилита webinst. Она позволяет публиковать базу под apache, но без поддержки веб-сервисов. Чтобы она выполняла публикацию с поддержкой веб-сервисов потребуется применять вместе с ней файл-шаблон (apache-template.vrd), который создается через 1C Конфигуратор.

1. Создаем файл-шаблон (apache-tamplate.vrd) публикации через 1C Конфигуратор

Заходим в 1C Конфигуратор сервера СП и выбираем вкладку "Администрирование" → "Публикация на веб-сервере"

 

 

Указываем флаг "Публиковать Web-сервисы" и выбираем параметры публикуемых Web-сервисов
Нажимаем кнопку сохранить и указываем имя файла "apache-template".

 

 

Таким образом, мы получили файл-шаблон apache-template.vrd, который позволит нам добавить поддержку Web-сервисов к веб-клиенту на Apache.
 

Примечание 1:

По поводу публикации базы для веб-клиента с поддержкой веб-сервисов есть много инструкций на ИТС для Apache, поскольку он кроссплатформенный (Windows и Linux), структура и конфигурация в основном схожа.
Вот полезные ссылки c ИТС по публикации базы на веб-клиент с поддержкой веб-сервисов для платформы 8.3.24:

  • Главная::Инструкции по разработке на 1С Платформа::1С:Предприятие. Документация::Платформа 1С:Предприятие 8.3.24::Руководство администратора::8.5 Настройка поддержки Web-сервисов::8.5.2 Для ОС Linux::8.5.2.4 Apache версии 2.4::8.5.2.4.2. Утилита webinst - https://its.1c.ru/db/v8324doc/bookmark/adm/TI00000063
  • Главная::Инструкции по разработке на 1С Платформа::1С:Предприятие. Документация::Платформа 1С:Предприятие 8.3.24::Руководство администратора::8.3.1. Общая схема публикации - https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000525

Для публикации базы на веб-клиент с поддержкой веб-сервисов требуется использовать утилиту webinst (стандартная и входит в каждую платформу с веб-компонентой)

Сам по себе webinst для Apache позволяет создать default.vrd файл публикации только для веб-клиента без поддержки веб-сервисов.
Чтобы была включена поддержка веб-сервисов необходимо вручную создать файл-шаблон apache-template.vrd через конфигуратор 1C.

Для выполнения публикации из конфигуратора - создания файла-шаблона, необходимо воспользоваться диалогом публикации (Администрирование -> Публикация на веб-сервере…) (ссылка).

Далее можно его использовать для публикации/удаления баз:

Пример:

webinst -publish -apache24 -wsdir demo-ws -dir /var/www/demo-ws -connstr "Srvr=server:1741;Ref=demo;" -descriptor apache-template.vrd

 

2. Теперь создаем публикацию базы через утилиту webinst на веб-сервере

Примечание 1:

Публикация базы с поддержкой веб-сервисов:

/opt/1cv8/x86_64/8.3.24.1624/webinst -publish -apache24 -wsdir base_wc -dir /var/www/1C/base -connstr "Srvr=v00serv1c01lnx;Ref=base" -descriptor <path>/apache-template.vrd -confpath /etc/apache2/apache2.conf

(Альтернатива)

Публикация базы без поддержки веб-сервисов, то есть без файла-шаблона:

/opt/1cv8/x86_64/8.3.24.1624/webinst -publish -apache24 -wsdir base_wc -dir /var/www/1C/base -connstr "Srvr=v00serv1c01lnx;Ref=base" -confpath /etc/apache2/apache2.conf

(Если потребуется)
Удаление публикации:

/opt/1cv8/x86_64/8.3.24.1624/webinst -delete -apache24 -wsdir base_wc -dir /var/www/1C/base -connstr "Srvr=v00serv1c01lnx;Ref=base" -confpath /etc/apache2/apache2.conf

-publish - флаг публикации по-умолчанию
-delete - флаг удаления публикации
-apache24 - версия веб-сервера (apache2, apache22 или iis)
-dir - имя физического каталога, куда будет отображен виртуальный каталог веб-сервера. Каталог должен существовать.
-descriptor - позволяет выполнить публикацию по шаблону, заданному существующим файлом, который задается в данном параметре (включая путь к файлу). Имя файла-шаблона не обязательно должно быть default.vrd. При выполнении публикации существующий файл default.vrd полностью замещается файлом-шаблоном. Если одновременно с данным параметром указаны параметры -wsdir или -connstr, то значения этих    параметров замещают собой значения атрибутов base и ib (соответственно) элемента point.

-wsdir - alias в описании виртуального хоста в конфиге веб-сервера apache2, например, в apache2.conf в строке 'Alias "/base_wc" "/base"' и значение параметра 'base=' в новом vrd файле '/var/www/base/default.vrd', например, в default.vrd будет следующая подстрока 'base="/base_wc"'
-connstr - основная информация для подключения базы в default.vrd, например, "Srvr=v00serv1c01lnx;Ref=base", где 'Srvr=' указывает на СП 1C (можно и по IP), где по умолчанию порт rmngr - 1541, если порт не стандартный, то указываем явно "v00serv1c01lnx:3541", 'Ref=' указывает на базу
-confpath - файл в котором будет произведено добавление публикации после тэга </Directory> или на следующую строку/удаление публикации с идентичным именем физического и виртуального каталога базы
Флаг включающий аутентификацию через ОС -osauth работает только для IIS веб-сервера

Примечание 2:

  • После удаления публикации не удаляются vrd файлы и физические каталоги, например, /var/www/1C/base, куда должен быть отражен виртуальный каталог веб-сервера. Поэтому чистка каталогов тоже выполняется в ручную. Например, полное удаление будет включать rm -rf /var/www/1C/base
  • Хорошим тоном будет заведение отдельного пути для физических каталогов публикаций баз, например /var/www/1C/*
  • Если имя базы содержит пробелы, то заключаем в бинарные кавычки дополнительно (""), если содержит сам символ ", то вместо "" для выделения текста можно использовать ординарные кавычки (').

 

Выполнение публикации на веб-сервер с поддержкой веб-сервисов:

 

 

После того как выполнили публикацию базы с поддержкой Web-сервисов получили следующие папки и конфиги:

В /etc/apache2/apache2.conf добавился блок с публикацией базы:

 

 

Появился физический каталог /var/www/1C/ad_test_2_wc и файл default.vrd:

 

 

 

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

Проверка работы веб-клиента https://<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>/<ВИРТУАЛЬНЫЙ КАТАЛОГ>

 

 

 

Проверка работы Web-сервиса Exchange через браузер по ссылке типа https://<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>/<ВИРТУАЛЬНЫЙ КАТАЛОГ>/ws/Exchange?wsdl

 

 

Гип-гип ура! Публикация прошла успешно! Веб-клиент работает и поддерживает веб-сервисы.

А теперь самое интересное.

 

Настройка Веб-сервера Apache для поддержки аутентификации ОС

Вот именно тут многие отпадают)

Чтобы мы имели доступ к СП, нам требуется иметь:

  • Заведенную сервисную УЗ веба с привязанными к ней ее SPN.
  • Установленный Apache 2.4.62

  • 1С Платформа 8.3.24.1624 только с компонентой адаптера веб-клиента ws.

Чтобы иметь доменную аутентификацию ОС на веб-сервере Apache 2.4.62 на ОС Debian 12 нам дополнительно требуется:

  1. Настроенное делегирование указанных служб СП у сервисной УЗ веба в Active Directory
  2. (Опционально) Включенная поддержка 256-разрядного типа шифрования у сервисной УЗ в Active Directory
  3. Выпущенный Keytab файл для сервисной УЗ веба, где будет указан его принципал
  4. Настроенный конфиг /etc/krb5
  5. Установленная библиотека libapache2-mod-auth-gssapi 1.6.4-3
  6. Виртуальный каталог публикации базы в конфиге /etc/apache2/apache2.conf с добавленными директивами модуля libapache2-mod-auth-gssapi 

Примечание 1:

  • Во первых требуется установить apache2, библиотеку для доменной аутентификации, чтобы работать с протоколом Kerberos
  • В файле /etc/krb5 должен быть указан REALM компании, который будет указывать на контроллер домена, например, YOUR.CORP.RU

Поехали по пунктам!

1. Настройка делегирования

При настройке доменной сервисной учетной записи веб-клиента нам требуется в настройках Делегирование → Поставить флаг Доверять этому пользователю делегирование указанных служб → Поставить флаг только Kerberos → Добавить принципал сервера СП по имени службы СП, например, по имени svc_sp1clnx, к базе которого необходимо иметь доступ.

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

 

 

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

 

 

 

 

2. (ОПЦИОНАЛЬНО) Настройка поддерживаемых типов шифрования

Keytab файл будет содержать принципалы с паролем от УЗ веба, поэтому, стоит подумать и об защите с помощью шифрования.

В зависимости от ваших требований ИБ потребуется, чтобы Windows администратор указал для УЗ поддержку вашего типа шифрования, например, поставил флаг на поддержку 256-разрядного типа.

Зайти в свойства УЗ <ИМЯ УЗ ВЕБА> -> Учетная запись -> Параметры учетной записи Включить опцию:

Данная учетная запись поддерживает 256-разрядное.

 

 

3. Создание Keytab файла и его размещение

Keytab файл хранит таблицу ключей и principal.

От того, какой тип шифрования и какой пароль от доменной сервисной УЗ мы укажем, зависит работа доменной аутентификации (работоспособность Keytab).

Keytab стоит размещать в тот путь, где к нему будет иметь доступ пользователь, от имени которого работает веб-сервер www-data в путь /etc/apache2/HTTP.keytab. Также требуется выдать все права (чтение, запись) для пользователя владельца www-data и убрать все права для остальных пользователей.

Примечание 1:

  • В случае смены пароля от УЗ потребуется менять Keytab тоже. Так что согласуйте создание Keytab
  • Для записи с ktutil не так важен KVNO (Key Version Number), тем не менее лучше его ставить таким как на сервере
  • Лучше сделать защищенные типы шифрования для principal, например, AES-256
  • От типа шифрования который указан в для principal в Keytab и списка поддерживаемых типов шифрования для УЗ в Active Directory зависит будет ли Keytab рабочим.

Есть два способа выпустить Keytab файл:

Создание Keytab через ktpass (Windows)/ Создание Keytab через ktutil (Linux)

 

Создание Keytab через ktpass (Windows):

Создать файл можно, попросив вашего Windows админа прописать команды в контроллере домена:

На каком контроллере домена выписываем keytab – тот и будет KDC

1) Для начала зададим атрибут servicePrincipalName. Действие необязательное, так как далее утилита KTPASS сама это сделает, но рекомендуемое

SETSPN -S HTTP/<ДОМЕННОЕ ИМЯ СЕРВЕРА 1>your.corp.ru@YOUR.CORP.RU <ИМЯ УЗ ВЕБА>

SETSPN -S HTTP/<ДОМЕННОЕ ИМЯ СЕРВЕРА 2>your.corp.ru@YOUR.CORP.RU <ИМЯ УЗ ВЕБА>

Данный SPN указывает, что под учетной записью <ИМЯ УЗ ВЕБА> может быть запущен веб-сервер HTTP на машинах с FQDN <ДОМЕННОЕ ИМЯ СЕРВЕРА 1>your..corp.ru, <ДОМЕННОЕ ИМЯ СЕРВЕРА 2>your.corp.ru

2)  Формируем keytab файл

KTPASS -princ HTTP/<ДОМЕННОЕ ИМЯ СЕРВЕРА 1>your.corp.ru@YOUR.CORP.RU -mapuser <ИМЯ УЗ ВЕБА>@YOUR.CORP.RU -pass !!!!PASSWORD!!!! -setpass -ptype KRB5_NT_PRINCIPAL -out C:\<ИМЯ KEYTAB 1>.keytab

   -mapuser - указывается имя учётной записи, к которой будет привязываться принципал сервиса.

   -princ - указывается имя принципала сервиса, который мы собираемся привязывать, и для которого будет сформирована keytab-запись.

   -ptype - указывается тип принципала.

   -pass - задаётся пароль сразу и для учётной записи, и для формирования ключа в keytab-записи с использованием нужного алгоритма шифрования.

   -out - указан keytab-файл

   -setpass - не переназначаем пароль для УЗ (чтобы не повышать KVNO)

3) Если нужно выписать keytab для двух и более принципалов сервиса

KTPASS -princ HTTP/<ДОМЕННОЕ ИМЯ СЕРВЕРА 1>your.corp.ru@YOUR.CORP.RU -mapuser <ИМЯ УЗ ВЕБА>@YOUR.CORP.RU -pass !!!!PASSWORD!!!! -setpass /kvno 3 -ptype KRB5_NT_PRINCIPAL -in C:\<ИМЯ KEYTAB 1>.keytab -out C:\<ИМЯ KEYTAB 2>.keytab -setupn

   -mapuser - указывается имя учётной записи, к которой будет привязываться принципал сервиса.

   -princ - указывается имя принципала сервиса, который мы собираемся привязывать, и для которого будет сформирована keytab-запись.

   -ptype - указывается тип принципала.

   -pass - задаётся пароль сразу и для учётной записи, и для формирования ключа в keytab-записи с использованием нужного алгоритма шифрования.

   -setpass - не переназначаем пароль для УЗ (чтобы не повышать KVNO - это важно). Если KVNO изменится - все кейтабы с отличными значениями KVNO будут недействительны. Таким образом, пароль из аргумента -pass будет использован только для создания keytab-записи

   -kvno - явно указываем номер KVNO. Должен быть такой же, как на предыдущем шаге. Его значение можно посмотреть в выводе команды на предыдущем шаге.

   -in - указывается файл, из которого необходимо импортировать уже имеющиеся keytab-записи (keytab-файл, созданный на предыдущем шаге)

   -out - указан итоговый keytab-файл

      -setupn - указывается, что переназначать имя принципала пользователя учётной записи не требуется

Помещаем Keytab на веб-сервер cp ~/bmc1.keytab /etc/apache2/HTTP.keytab

 

Создание Keytab через ktutil (Linux)

Альтернативный вариант создать Keytab лично на сервере Linux, но есть нюанс так как для создания потребуется пароль от сервисной УЗ веб-клиента, поэтому проконсультируйтесь заранее с вашим сотрудником ИБ и с владельцем.

После зайдите на веб-сервер, который привязан к доменной УЗ веба, например, <ИМЯ УЗ ВЕБА>, и вводите команды по очереди:

ktutil

addent -password -p HTTP/<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>your.corp.ru@YOUR.CORP.RU -k 3 -e aes256-cts-hmac-sha1-96 -f

<вводим пароль от сервисной УЗ веба>

wkt /etc/apache2/HTTP.keytab

quit

Примечание 1:

  • -p указывает на SPN привязанный к доменной УЗ
  • -k указывает на номер версии ключа KVNO (Key Version Number)
    -e указывает на тип шифрования. Требуется знать какой тип поддерживает доменная УЗ. Если 256 или 128 разрядный, то требуется запросить у вашего Windows админа информацию по поддерживаемым типам шифрования доменной УЗ
  • -f - обязательный флаг

  • wkt <путь к keytab> - создать keytab файл

Произвести проверку Keytab

  • посмотреть список principals в keytab с KVNO и типом шифрования: klist -e -k -t /etc/apache2/HTTP.keytab
  • получить билеты с помощью keytab по principal: kinit -Vk -t /etc/apache2/HTTP.keytab HTTP/<ДОМЕННОЕ ИМЯ ВЕБ-СЕРВЕРА>your.corp.ru@YOUR.CORP.RU
  • просмотреть список полученных билетов: klist -e
  • удалить полученные билеты: kdestroy

Примечание 2:

  • Надо, чтобы в ней предварительно был заведен пользователь с корпоративным доменом.
  • Окончательной проверкой является попытка входа через веб-клиент в базу.

 

На выпушенный Keytab выдаем права

sudo chown www-data:www-data /etc/apache2/HTTP.keytab

sudo chmod 600 /etc/apache2/HTTP.keytab

4. Настройка Kerberos (для Active Directory)

Конфигурация /etc/krb5.conf должна содержать следующие строки:

[libdefaults]

    default_realm = YOUR.CORP.RU

    default_keytab_name =  /etc/apache2/HTTP.keytab

    default_client_keytab_name = /etc/apache2/HTTP.keytab

    dns_lookup_kdc = true

    dns_lookup_realm = true

    forwardable = true

    ticket_lifetime = 24h

    renew_lifetime = 7d

 

[domain_realm]

    .your.corp.ru = YOUR.CORP.RU

    your.corp.ru = YOUR.CORP.RU

    .YOUR.CORP.RU = YOUR.CORP.RU

    YOUR.CORP.RU = YOUR.CORP.RU

5. Установка модуля доменной аутентификации Kerberos для apache2: libapache2-mod-auth-gssapi 1.6.4-3
Выполнили еще в самом начале установки веб-сервера)

6. Добавляем в виртуальный каталог публикации базы в /etc/apache2/apache2.conf необходимые директивы модуля для поддержки работы аутентификации ОС

Примечание 1:

  • Начиная с версии ОС Debain 11 пакет mod_auth_kerb больше не доступен в репозитории, но именно его демонстрируют в инструкции с ИТС (тут), а в качестве замены для Apache предлагается любой схожий модуль, например, libapache2-mod-auth-gssapi.
  • Чтобы выполнить настройку виртуального окружения на свой вкус вот ссылка на официальный README.md из GitHub репозитория проекта libapache2-mod-auth-gssapi.
  • Описание стандартных директив Apache можно прочитать здесь - https://httpd.apache.org/docs/2.4/mod/quickreference.html

Как было:


 

Как должно стать:


 

Примечание 2:

Настройка виртуального окружения для копирования:

# 1c publication

Alias "/base_wc" "/var/www/1C/base/"

<Directory "/var/www/1C/base/">

   AuthType GSSAPI

   AuthName "Kerberos Login"

   Require valid-user

 

   GssapiCredStore keytab:/etc/apache2/HTTP.keytab

   GssapiCredStore client_keytab:/etc/apache2/HTTP.keytab

   GssapiCredStore ccache:FILE:/var/krb/ktk123

   GssapiUseS4U2Proxy On

   GssapiImpersonate On

   GssapiLocalName On

   GssapiDelegCcacheDir /var/cred/

 

   AllowOverride All

   Options SymLinksIfOwnerMatch

   Require valid-user

   SetHandler 1c-application

 

   ManagedApplicationDescriptor "/var/www/1C/base/default.vrd"

</Directory>

 

Выполняем перезапуск apache2, чтобы настройки вступили в силу

systemctl restart apache2

Проверяем, что доменная аутентификация ОС работает:

 

 

Наконец-то! Теперь наши пользователи могут использовать как тонкий клиент, так и веб-клиент, так и вариант через тонкий клиент по веб-публикации с аутентификацией ОС.

Поздравляю! Теперь мы можем использовать стандартные механизмы 1C для этой настройки без использования сторонних решений типа KeyCloak.

Самое главное, что мы поняли основные причины проблем при настройке аутентификации ОС на веб-сервере Aapache:

  • неправильная настройка УЗ веба в Active Directory, то есть делегирование служб СП
  • неправильно выпущенный Keytab файл
  • нерабочая версия модуля аутентификации через протокол Kerberos под ОС Debian - libapache2-mod-auth-gssapi < 1.6.4-3
  • неверно подключенные директивы модуля аутентификации в конфиге apache2
  • неверно выполненная публикация на Apache через webinst без поддержки Web-сервисов

 

Заключение

Итого: нам удалось сделать интеграцию аутентификации ОС (Active Directory) в веб-клиент 1С через веб-сервер Apache 2.4.62 на ОС Debian 12.

Что мы из этого получили?

Теперь можно предлагать пользователям информационных систем 1C использовать веб-клиент в браузере, если будут проблемы по запуску приложения Платформы, например, при использовании в качестве клиента ОС MacOS.

Через строку публикации мы можем получать доступ к Web-сервисам, что несомненно потребуется при интеграции 1C с другими системами.

Также аутентификация ОС позволяет нам усилить защиту, чтобы не светить логином и паролем при каждом входе. Пользователи также скажут спасибо за то, что нет лишних вводов данных: один вход (Single Sing On) через ОС и все.

Надеемся, что данная инструкция сэкономит вам и вашей компании драгоценное время)

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

В конце стандартная глава вопросы и ответы, где можно найти ответ на популярный вопрос.

 

Вопросы и ответы

 

Вопрос: А можно ли развернуть несколько публикаций баз с разными версиями 1C Платформы?

Ответ:

В общем, поискав в интернете, узнал, почему же в Apache я не могу подключить несколько модулей _1сws_module для одного сервера apache2

Дело в том, что модули хранятся в .so файлах (C динамические библиотеки). В них указывается структура, имя которой и есть имя модуля - _1cws_module. И знаете в чем весь прикол? Директива ManagedApplicationDescriptor одна на все модули, то есть даже при разных именах модулей мы бы не смогли использовать на одном apache сервере несколько модулей из разных платформ. Было бы круто-если бы в других версиях это учли и добавили бы разные имена директив и модулей под apache, а так только несколько служб apache2 под разными портами под каждую платформу. Как вариант: хоть через Docker контейнеры, хоть рассматривать внедрение nginx для изменения портов.

Вопрос: Работают ли схемы, где СП с ОС Windows, а веб-сервер с ОС Linux?

Ответ:

Да, наш главный специалист сопровождения 1C проверял. Эта схема тоже работает.

Вопрос: Где мне узнать что делает каждая директива модуля mod-auth-gssapi для настройки?

Ответ:

Очень просто - через официальный репозиторий проекта libapache2-mod-auth-gssapi в их README.md файле: https://github.com/gssapi/mod_auth_gssapi?tab=readme-ov-file. Описание полностью на английском языке.

Вопрос: Можно ли как-то автоматизировать процесс публикации с поддержкой Web-сервисов и с поддержкой аутентификации ОС?

Ответ:

Да, это можно легко реализовать с помощью Ansible. Так как webinst входит в поставку, то будет достаточно делать его вызов для публикации базы, а после подставлять директивы в виртуальный каталог публикации в /etc/apache2/apache2.conf через регулярное выражение. Проверкой того что это именно та публикация в конфиге будут выступать строки Alias .. и <Directory ..>, </Directory>. Сам webinst будет удалять публикацию именно по этим строкам в конфигурации apache2. Чтобы не плодить лишние папки и vrd можно также при удалении добавить вызов удаления физического каталога после вызова webinst -delete.

Вопрос: Если я запущу утилиту публикации webinst другой версии, то будут проблемы?

Ответ:

Да, так как webinst добавит в конфигурацию apache2 директиву загрузки модуля адаптера веб-клиента LoadModule _1cws_module определенной версии 1C Платформы из-за чего будет конфликт версий, при попытке войти в базу.
 

Ссылки

1C ИТС 8.3.24 "..3.1.3. Установка в ОС Linux" -  https://its.1c.ru/db/v8324doc/bookmark/cs/TI000000292

1С ИТС 8.3.24 "..2.8.1.3. Аутентификация операционной системы при использовании веб-сервера Apache" -  https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000063

1C ИТС 8.3.24 "..8.5. Настройка поддержки Web-сервисов::8.5.2. Для ОС Linux::8.5.2.4. Apache версии 2.4" - https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000635

1C ИТС 8.3.24 "..8.3.1. Общая схема публикации" - https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000525

1C ИТС 8.3.24 "..8.5 Настройка поддержки Web-сервисов::8.5.2 Для ОС Linux::8.5.2.4 Apache версии 2.4::8.5.2.4.2. Утилита webinst" - https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000637

GitHub репозиторий модуля libapache2-mod-auth-gssapi - https://github.com/gssapi/mod_auth_gssapi?tab=readme-ov-file

APACHE "Directive Quick Reference" - https://httpd.apache.org/docs/2.4/mod/quickreference.html

1C ИТС 8.3.24 "..Глава 9. Настройка веб-браузеров для работы в веб-клиенте" - https://its.1c.ru/db/v8324doc/bookmark/adm/TI000000250

Вступайте в нашу телеграмм-группу Инфостарт

1C веб-клиент Linux Аутентификация ОС Apache Debian 1C и Linux 1C веб-клиент Apache Linux SSO доменная аутентификация Kerberos Active Directory GSSAPI libapache2-mod-auth-gssapi Linux Keytab аутентификация веб-сервер веб-клиент Debian 12 Платформа 8.3.24.1624 ktpass и ktutil

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Разработка Администрирование веб-серверов Программист Бизнес-аналитик 1С 8.3 Платные (руб)

Устали искать зависимости в конфигураторе? «Поиск ссылок на объект» в ERP — это минуты ожидания. А если объект затронут расширениями — конфигуратор вообще не покажет полную картину. Analyzer 1C — веб-инструмент, который парсит выгрузку конфигурации (основную + все расширения) и строит граф зависимостей в ArangoDB. Любой запрос — за доли секунды. Что внутри: — Граф вызовов и ссылок между объектами, в том числе запросы в коде и СКД — Анализ ролей с учётом РольДоступна() в коде — Конструктор профилей: выбрали роли — увидели итоговые доступы — Заимствования и переопределения расширений, всё в одном месте — Поиск по всей конфигурации с мгновенными результатами. Разворачивается за минуту через Docker не требуя опыта работы с контейнерами и интернета. Работает с любой конфигурацией 1С:Предприятие 8.3 и выше.

12200 руб.

17.04.2026    5327    22    25    

36

Linux Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Графическое приложение на базе PyQt6, которое предоставляет простой интерфейс для очистки локального кэша баз данных 1С Предприятие для ОС Linux. Простая, понятная для пользователей утилита, не требующая прав администратора Скомпилированная в исполняемый файл

06.04.2026    678    capitan    0    

2

Администрирование веб-серверов Системный администратор Программист Россия Абонемент ($m)

PowerShell-скрипт автоматической установки Apache HTTP Server 2.4 на Windows. Поддерживает несколько экземпляров на разных портах, бэкап, брандмауэр, логирование. Компилируется в exe. Две версии: RU и EN.

7 стартмани

27.03.2026    702    1    imiron_ru    3    

5

Администрирование веб-серверов Системный администратор Программист Россия Абонемент ($m)

Apache HTTP Server на Windows. Установка и настройка вручную — пошаговое руководство.

5 стартмани

27.03.2026    1479    imiron_ru    0    

8

Архивирование (backup) Linux Системный администратор Программист Россия Абонемент ($m)

Сценарий предназначен для восстановления баз данных PostgreSQL в Linux под учетной записью postgres из резервных копий, сформированных программой pg_dump в формате plain или custom.

1 стартмани

20.02.2026    715    0    Магнат    2    

2

Архивирование (backup) Администрирование СУБД Linux Системный администратор Программист 1С:Предприятие 8 Россия Абонемент ($m)

Сценарий предназначен для избирательного создания ротационных резервных копий баз данных по дисциплине 2-1 (2 копии, одна на другом физическом диске, другая на компьютере вне серверной комнаты) в форматах custom и/или plain кластера PostgreSQL, а также глобальных свойств кластера: пользователи, пароли и т.д.

2 стартмани

19.02.2026    714    0    Магнат    1    

3

Разработка внешних компонент Администрирование СУБД Linux Обновление 1С Системный администратор Программист Россия Абонемент ($m)

Cценарий python предназначен для автоматизации процессов установки СУБД PostgreSQL, клиентского приложения и сервера 1С, службы RAS а также  и деинсталляции последних в cреде операционной системы Astra Linux. Полный режим работы выполняет деинсталляцию предшествующей версии 1С и установку последующей.  Возможны также только деинсталляция или только установка. Сценарий тестирован в среде ОС Astra Linux SE v.1.7.x,v.1.8.x  

2 стартмани

03.02.2026    1023    4    Магнат    1    

2

Информационная безопасность Архивирование (backup) Linux Администрирование СУБД Системный администратор Программист Россия Абонемент ($m)

В публикации рассматриваются не только принципы проектирования IT инфраструктуры малого и среднего предприятия в фокусе последних требований законодательства о защите ПДн, но и дается пошаговая инструкция по установке и настройке полного пакета ПО на основе использования Российских компонентов. Данная структура программ полностью покрывает все потребности организации по использованию, архивированию и защите IT инфраструктуры. Практическое применение протестировано на различных предприятиях в течении 5 лет. Все программы протестированы на Astra Linux 1.8 Пример формы описания процессов установки пункт 20.9

10 стартмани

29.01.2026    1365    8    Магнат    16    

2
Отзывы
3. aidar_safin 115 29.07.25 08:31 Сейчас в теме
Всем привет! Статья результат сражения целый год с доменной аутентификацией для веб клиента. Надеюсь все кто бился с этим смогут наконец настроить)
SpartakM; EliasShy; biryukmikh; +3 Ответить
20. G_102814273319549585172 06.10.25 11:32 Сейчас в теме
Спасибо Вам большое за Ваш труд. У меня получилось по Вашей статье. Некоторые моменты подробно не объяснены(За счет базовых знаний Linux, поскольку я Windows администратор, не сразу получилось всё завести, пришлось анализировать логи), но в целом это действительно рабочий сценарий.

Например в конфиге /etc/krb5 это избыточно:

    default_keytab_name =  /etc/apache2/HTTP.keytab

    default_client_keytab_name = /etc/apache2/HTTP.keytab


Мы указали в apache это. Тут либо глобально указываем, либо локально в конфиге apache2.

Так же не указано, но важно не забыть создать каталог ccache и дать права Apache, и пользователю службы 1С (usr1cv8)

mkdir -p /var/krb
chown www-data:grp1cv8 /var/krb
chmod 770 /var/krb


Иначе кеширующий билет Apache не создастся и не передастся на уровень приложения 1С.

Без этого в топологическом журнале 1С, Вы будете видеть ошибку:

36:39.846004-0,EXCP,1,level=INFO,process=rphost,OSThread=375530,Descr='GSS-API error acquire credentials: Credentials cache permissions incorrect (filename: /var/krb/krb5cc_usr1cv8)


P.S - самое грустное, что поддержка 1С тут не поможет, для них это не поддерживаемый сценарий, всё, что они могут ответить, одной фразой: Документация: https://its.1c.ru/db/v8327doc#bookmark:adm:TI000000063

Поддерживают только не актуальное старье. Почему же так больно с ними...Вашим трудом я восхищен.
biryukmikh; +1 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Lars Ulrich 637 28.07.25 20:40 Сейчас в теме
Норм. Можно ещё adfs + keykloack + настройка opened id connect провайдера в публикации. Сопоставление учеток, например, по email
biryukmikh; +1 Ответить
2. biryukmikh 29 29.07.25 08:23 Сейчас в теме
(1) Спасибо за совет. Посмотрим тоже на этот вариант настройки аутентификации.
18. G_102814273319549585172 26.09.25 18:53 Сейчас в теме
(2) Здравствуйте. Вы бы не могли подсказать.

Для тонкого клиента я делаю привязку по хосту KRB5_NT_SRV_HST

ktpass -princ usr1cv8/t03-1c11.fd.local@FD.LOCAL -mapuser usr1cv8 -pass "hg4FT%#7" -ptype KRB5_NT_SRV_HST -crypto AES256-SHA1 -setpass -out C:\Temp\usr1cv8.keytab

С KRB5_NT_PRINCIPAL для тонкого клиента не работает.

А для апача нужен KRB5_NT_PRINCIPAL

Если делаю так, пытаясь объединить:

ktpass -princ "usr1cv8/t03-1c11.fd.local@FD.LOCAL" -mapuser usr1cv8 -pass "<пароль>" -ptype KRB5_NT_SRV_HST -crypto AES256-SHA1 -setpass -out "C:\Temp\usr1cv8.keytab"
ktpass -princ "HTTP/t03-1c11.fd.local@FD.LOCAL" -mapuser usr1cv8 -pass "<пароль>" -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -setpass -in "C:\Temp\usr1cv8.keytab" -out "C:\Temp\usr1cv8_merged.keytab"

Я получаю: kinit: Client 'usr1cv8/t03-1c11.fd.local@FD.LOCAL' not found in Kerberos database while getting initial credentials

Отдельно только придется делать кейтабы?

Вопрос в общем в том, возможно ли объединить кейтабы под 1 уз с разными SPN?
23. biryukmikh 29 27.10.25 15:41 Сейчас в теме
(18)
ktpass
Добрый день.

Способов входа в тонкий клиент несколько
Мы осуществляли настройку с отдельными кейтабами для Apache2 и для СП
Схема действует так, что мы де-факто попадаем в 1C веб-клиент через Apache2 как тут можно увидеть
И с тонким клиентом также через Apache2
Мы используем ссылку на этот веб-клиент при попытке подключения
В типе расположения информационной базы указываете ссылку на веб-клиент.
Возможно для вашего кейса требуется именно TCP/IP?

Тут можно детальнее посмотреть, как это должно быть устроено на схемах от 1C: https://v8.1c.ru/platforma/klient-servernyy-variant-raboty/
Прикрепленные файлы:
3. aidar_safin 115 29.07.25 08:31 Сейчас в теме
Всем привет! Статья результат сражения целый год с доменной аутентификацией для веб клиента. Надеюсь все кто бился с этим смогут наконец настроить)
SpartakM; EliasShy; biryukmikh; +3 Ответить
4. Yogik991 01.08.25 06:23 Сейчас в теме
День добрый, спасибо за информацию!

Стояла задача аутентификации только через web-сервер?
Не пробовали победить аутентификацию только чрез прямое подключение к кластеру серверов?
biryukmikh; +1 Ответить
5. biryukmikh 29 01.08.25 11:00 Сейчас в теме
(4) Добрый день!
Спасибо за вопросы

Стояла задача аутентификации только через web-сервер?

Нет, есть требования наличия аутентификации ОС как при подключении через тонкий клиент напрямую к кластеру, так и через веб-клиент (браузер, тонкий клиент через веб-сервер) посредством веб-сервера к кластеру.
Прикрепил фотку с примером нескольких вариантов подключения в настройке приложений 1C

Не пробовали победить аутентификацию только чрез прямое подключение к кластеру серверов?

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

Тут можно детальнее посмотреть, как это должно быть устроено на схемах от 1C: https://v8.1c.ru/platforma/klient-servernyy-variant-raboty/
Прикрепил фотку конкретного примера схемы)
Прикрепленные файлы:
6. Yogik991 04.08.25 03:11 Сейчас в теме
(5) Да, было бы очень интересно почитать.
biryukmikh; +1 Ответить
7. biryukmikh 29 04.08.25 13:19 Сейчас в теме
Хочу обратить внимание на ВАЖНЫЙ момент
Во время публикации через webinst надо указать порт, если он не стандартный (1541) в строке флага -connstr
/opt/1cv8/x86_64/8.3.24.1624/webinst -publish -apache24 -wsdir base_wc -dir /var/www/1C/base -connstr "Srvr=v00serv1c01lnx:2641;Ref=base" -descriptor <path>/apache-template.vrd -confpath /etc/apache2/apache2.conf

В примере выше я публикую базу base, которая подключена к v00serv1c01lnx:2641, где 2641 - порт rmngr на сервере приложений.
8. biryukmikh 29 16.08.25 09:28 Сейчас в теме
В скором времени выпустим продолжение (мультиплатформенность публикаций баз + настройка через Ansible ОС Debian 12), так что советую добавить данную статью в избранное, чтобы получить уведомление об изменении.
Как только выпустим продолжение, то добавим ссылку в текст статьи.
9. user1339565 09.09.25 18:26 Сейчас в теме
В процессе настройки, вы не сталкивались с тем, что при обновлении страницы в браузере (F5) у вас менялся пользователь? Как будто apache рандомно из кэша отдает авторизованные учетки.
10. biryukmikh 29 10.09.25 10:36 Сейчас в теме
(9)
user1339565 09.09.25 18:26
В процессе настройки, вы не сталкивались с тем, что при обновлении страницы в браузере (F5) у вас менялся пользователь? Как будто apache рандомно из кэша отдает авторизованные учетки.


Добрый день!
С подобным не сталкивались.
Сегодня проверил работу веб-клиента Apache. Два пользователя заходили в условно тоже время 8:19.
Вход происходил по Аутентификации ОС по тому пользователю базы, который имел у себя включенную опцию Аутентификация операционной системы и у которого совпадала строка "//CORP.DOMAIN.RU/user_name".
Как добавить пользователя в базу

Если сможем воспроизвести дадим обратную связь.
Так первое, что напрашивается:
- Очистить билеты на клиентском ПК klist purge
- Посмотреть на логи ТЖ на веб-сервере и у клиента и на логи веб-сервера Apache, логи Kerberos trace.
11. user1339565 10.09.25 14:39 Сейчас в теме
(10)
Опишу чуть подробнее свой сценари. Также подняты отдельно сервер 1С и веб сервер Apache. Оба сервера на Ubuntu 24. Для обоих серверов созданы keytab принципалы и настроен krb5.conf. В apache подключен модуль libapache2-mod-auth-gssapi версии 1.6.4-3.
Конфиг публикации:
LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.25.1374/wsap24.so"

# 1c publication
Alias "/do" "/etc/apache2/dirs/do/"
<Directory "/etc/apache2/dirs/do/">
    AllowOverride All
    Options None
    SetHandler 1c-application
    ManagedApplicationDescriptor "/etc/apache2/dirs/do/default.vrd"
    AuthType GSSAPI
    AuthName "1C:Enterprise web client"
    GssapiCredStore keytab:/etc/apache2/apache1.keytab
    GssapiDelegCcacheDir /var/www/tmp
    GssapiImpersonate On
    GssapiAllowedMech krb5
    GssapiLocalName On
    GssapiNegotiateOnce Off
    Require valid-user
    GssapiSSLonly off
    LogLevel auth_gssapi:debug
</Directory>
Показать

Тест проводил в нескольких RDP сессиях на одном сервере от разных доменных пользователей.
Открывал в каждой сессии базу через firefox и по очереди ходил по RDP сессиям и обновлял вкладку. Спустя 10 итераций, в какой-то момент пользоваль которым залогинился, менялся на пользователя который залогинился в соседней RDP сессии.
В логах apache явно видно что браузер посылает верные креды, со стороны ТЖ вижу, что прилетает авторизация не от того пользователя с которым пришел к apache браузер. Если работать тонким клиентом, то замены пользователя не заметил в процесе работы. Но если открыть несколько сеансов, в тонких клиентах, то они могут также запуститься от разных пользователей.
Относительно корректную работу удалось получить добавив в конфиг параметр GssapiDelegCcacheUnique on, по умолчанию он off. Пока тестировал замены пользователей не происходит, но в какой-то момент появляется окно 1С в которое нужно ввести пользователя и пароль (как это бывает когда доменная учетка не настроена ни в какой учетке 1С).
Билеты на клиенте точно нет, я их просматривал через klist
Про логи и ТЖ написал. Логи kerberos не смотрел, спасибо посмотрю.
biryukmikh; +1 Ответить
12. biryukmikh 29 10.09.25 15:38 Сейчас в теме
(11)
Спасибо, что подробно описал проблему и решение!
В ближайшие дни протестирую и внесу правки в статью.
15. user1339565 23.09.25 10:21 Сейчас в теме
(12)
Написал в ТП 1С, сначала сказали что в ИТС описан модуль mod_auth_kerb и ни про какой mod_auth_gssapi они не знают. Проверил на mod_auth_kerb и получил идентичное поведение. Продолжил переписки с ТП и все таки получил от них ценную информацию. Оказыается это баг, но его нет в публичном багтрекере. Ориентироваться можно вот по этому ошибке
https://bugboard.1c.ru/?navLink=data/szgol7slnrakpavw7n5zakwh5e/d35s4drja5sb3kjfp64u­fex3sm
хотя вроде как ее описание противоречит описанию проблемы. По итогу в последней версии 25 платформы все работает как нужно.
Из интересного. В процессе найти решение менял mpm модули apache и на модуле prefork ошибки авторизации не возникали, если используется исключительно kerberos авторизация, а если включить опцию basic, то она возвращает ошибку.
66. asid2006 20.02.26 11:40 Сейчас в теме
(9) Говорят, что проблема в режиме работы модуля MPM для Apache. Должен быть prefork. Посмотреть какой сейчас можно так:
apachectl -V | grep MPM
biryukmikh; +1 Ответить
13. G_101236070757873401750 11.09.25 19:27 Сейчас в теме
Приветствую, много здоровья вам за статью!
Подскажите, сталкивались ли с такой ситуацией, пользователи находятся в AD домене AD.COM, сам веб-сервер (с названием web.ipa.ipa) находится в FreeIPA домене IPA.IPA который односторонне доверяет AD.COM и аутентифицирует пользователей из AD.COM (по SSH например). Выпускаю кейтаб на IPA.IPA с помощью команд ipa service-add HTTP/web.ipa.ipa
ipa-getkeytab -p HTTP/web.ipa.ipa@IPA.IPA -k web.keytab ,настраиваю apache, с использованием этого кейтаба - пользователи (из домена AD.COM) открывающие браузер на centos - успешно проходят авторизацию в веб-публикации, но если браузер открыт тем же пользователем с винды - возникает ошибка 401, в логах апача вместо имени пользователя ' - '
Если выпускаю кейтаб на AD.COM c помощью команды KTPASS -princ HTTP/web.ipa.ipa@AD.COM -mapuser web@AD.COM -pass !!!!PASSWORD!!!! -setpass -ptype KRB5_NT_PRINCIPAL -out C:\web_ad.keytab и подсововыаю апачу этот кейтаб файлик - у того же пользователя с винды - проходит авторизация, у пользователя с centos - 401 и ситуация в логах апач таже.
Была подобная ситуация на самом сервере 1С, но это решилось с помощью ktutil и объединением двух кейтабов в 1, здесь же при таком же подходе - 401 с обеих ОС.
Ещё осталась идея выпустить на FreeIPA домене кейтаб командой ipa-getkeytab -p HTTP/web.ipa.ipa@AD.COM -k web.keytab и попробовать объединить, отпишусь, получится или нет, но чтото сомневаюсь что вообще даст выполнить команду.
biryukmikh; +1 Ответить
14. G_101236070757873401750 18.09.25 18:45 Сейчас в теме
Решил вопрос так
Рассмотрим на примерем ИБ с названием docflow файл настройки /etc/apache2/apache2.conf

Для Linux клиентов используется алиас /docflow (адрес обращения будет https://web.ipa.ipa/docflow), кейтаб файл используется /etc/apache2/web.keytab (выпущен в домене FreeIPA с названием ipa.ipa) обращение будет к файлу /var/www/docflow/default.vrd

# Docflow для Linux-клиентов
Alias "/docflow" "/var/www/docflow/"
<Location "/docflow">
AuthType GSSAPI
AuthName "GSSAPI SSO 1С Login (Linux)"
GssapiCredStore keytab:/etc/apache2/web.keytab
GssapiAllowedMech krb5
GssapiDelegCcacheDir /tmp
GssapiDelegCcacheUnique On
Require valid-user
AllowOverride All
Options None
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/docflow/default.vrd"
</Location>


Для WIN пользователей алиас будет /docflow_w (адрес обращения будет https://web.ipa.ipa/docflow_w) кейтаб файл используется /etc/apache2/web_ad.keytab (выпущен в домене AD с названием ad.com) обращение будет к файлу /var/www/docflow/default_w.vrd, единcтвенное его отличие от файла /var/www/docflow/default.vrd в строке base="/docflow_w"

# Docflow для Windows-клиентов
Alias "/docflow_w" "/var/www/docflow/"
<Location "/docflow_w">
AuthType GSSAPI
AuthName "GSSAPI SSO 1С Login (Windows)"
GssapiCredStore keytab:/etc/apache2/web_ad.keytab
GssapiAllowedMech krb5
GssapiDelegCcacheDir /tmp
GssapiDelegCcacheUnique On
Require valid-user
AllowOverride All
Options None
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/docflow/default_w.vrd"
</Location>

У меня пользователи обращаются к виртуальному сетевому адаптеру с именем https://web.ipa.ipa , на это же имя и нужно выпускать кейтаб

на FreeIPA домене
ipa service-add HTTP/web.ipa.ipa
ipa-getkeytab -p HTTP/web.ipa.ipa@IPA.IPA -k web.keytab

На AD домене
KTPASS -princ HTTP/web.esc.ipa@AD.COM -mapuser web@AD.COM -pass !!!!PASSWORD!!!! -setpass -ptype KRB5_NT_PRINCIPAL -out C:\web_ad.keytab

Б-же храни разработчиков FreeIPA, qwen их инженеров и писателей документации.
biryukmikh; +1 Ответить
16. biryukmikh 29 23.09.25 14:08 Сейчас в теме
(14) Спасибо большое за инструкцию.
Данный случай заслуживает отдельной статьи)
Особенно использование связки AD и FreeIPA для публикации базы
По поводу публикации могу посоветовать выносить в отдельные виртуальные хосты (VirtualHost), чтобы разделять публикации для AD и FreeAPI на отдельные файлы.

Пример виртуальных хостов
17. savil 24.09.25 15:39 Сейчас в теме
Добрый день, спасибо за статью
Можно ли использовать авторизацию через ОС для http-сервисов, и какой вид авторизации будет в этом случае?
20. G_102814273319549585172 06.10.25 11:32 Сейчас в теме
Спасибо Вам большое за Ваш труд. У меня получилось по Вашей статье. Некоторые моменты подробно не объяснены(За счет базовых знаний Linux, поскольку я Windows администратор, не сразу получилось всё завести, пришлось анализировать логи), но в целом это действительно рабочий сценарий.

Например в конфиге /etc/krb5 это избыточно:

    default_keytab_name =  /etc/apache2/HTTP.keytab

    default_client_keytab_name = /etc/apache2/HTTP.keytab


Мы указали в apache это. Тут либо глобально указываем, либо локально в конфиге apache2.

Так же не указано, но важно не забыть создать каталог ccache и дать права Apache, и пользователю службы 1С (usr1cv8)

mkdir -p /var/krb
chown www-data:grp1cv8 /var/krb
chmod 770 /var/krb


Иначе кеширующий билет Apache не создастся и не передастся на уровень приложения 1С.

Без этого в топологическом журнале 1С, Вы будете видеть ошибку:

36:39.846004-0,EXCP,1,level=INFO,process=rphost,OSThread=375530,Descr='GSS-API error acquire credentials: Credentials cache permissions incorrect (filename: /var/krb/krb5cc_usr1cv8)


P.S - самое грустное, что поддержка 1С тут не поможет, для них это не поддерживаемый сценарий, всё, что они могут ответить, одной фразой: Документация: https://its.1c.ru/db/v8327doc#bookmark:adm:TI000000063

Поддерживают только не актуальное старье. Почему же так больно с ними...Вашим трудом я восхищен.
biryukmikh; +1 Ответить
21. biryukmikh 29 08.10.25 17:04 Сейчас в теме
(20) Спасибо большое за такой развернутый ответ и за оценку работы.
Сами сто раз получали ответы от поддержки 1С, что эта настройка Аутентификации ОС не является вопросом, связанным с 1C.
Постараемся в свободное время обновить инструкцию по всем тем нюансам, что были перечислены в комментариях (про создание каталога cache и установку прав usr1cv8 и пользователю apache2 важное замечание спасибо отдельное)
У нас есть еще некоторые решения, которые собирается опубликовать мой коллега на эту тему
Так что потихоньку получаем рабочую инструкцию по универсальной настройке Аутентификации ОС на веб-клиенте и веб-сервисах на Apache2 с Debian 12)
22. morgot999 22.10.25 12:09 Сейчас в теме
Добрый день!

Спасибо за статью.
У нас через 1С клиент работает сквозная авторизация как через прямое подключение, так и через публикацию. А через браузеры сквозной авторизации нет. Апачи принимает доменную учетку. Но потом все равно выходит окно Авторизации 1С. Не подскажите, куда можно копать? В журналах Апачи и 1с ничего такого нет.
И еще вопрос, у вас срабатывает авторизация с различными UPN пользователя? То есть user@test.local все ок, а если user@test.ru уже нет.
xenus206; +1 Ответить
24. G_102814273319549585172 28.10.25 10:08 Сейчас в теме
(22) здравствуйте !

Для успешной аутентификации через браузер, требуется:

1. Сконфигурировать ключи AuthServerAllowlist и AuthNegotiateDelegateAllowlist для браузера. Я тестировал Edge браузер. Chrome так же должен работать.
2. Добавить в доверенные сайты адрес подключения( Если тестируете с локальными именами, это не требуется, так как по умолчанию будет доверие ).

Например, моя страница с вэб публикацией(Powershell):

$WEBHOST = 't03-1c11.lab.local'    # хост, куда ходит браузер


# Chrome
$C = 'HKLM:\SOFTWARE\Policies\Google\Chrome'
New-Item $C -Force | Out-Null
New-ItemProperty $C -Name AuthServerAllowlist            -Type String -Value $WEBHOST -Force | Out-Null
New-ItemProperty $C -Name AuthNegotiateDelegateAllowlist -Type String -Value $WEBHOST -Force | Out-Null

# Edge
$E = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
New-Item $E -Force | Out-Null
New-ItemProperty $E -Name AuthServerAllowlist            -Type String -Value $WEBHOST -Force | Out-Null
New-ItemProperty $E -Name AuthNegotiateDelegateAllowlist -Type String -Value $WEBHOST -Force | Out-Null
Показать


AuthServerAllowlist — политика Chrome/Edge, которая определяет список узлов, для которых браузер может использовать встроенную аутентификацию (Integrated Authentication) по схеме Negotiate (Kerberos/NTLM). По умолчанию браузер не отправляет Kerberos-токены сайтам в интернете. При совпадении хоста целевого URL с элементом allowlist браузер:

1. Запрашивает ваш TGT из локального кэша/LSA.
2. Получает сервисный билет для SPN веб-сервера (например, HTTP/t03-1c11.lab.local@LAB.LOCAL).
3. Отправляет заголовок Authorization: Negotiate <token>.

Если вместе с этим включена AuthNegotiateDelegateAllowlist и сайт попадает в список, браузер также разрешает делегирование (передачу TGT), что необходимо для схем с S4U2Proxy/KCD на стороне сервера.

Шаблоны поддерживают точные FQDN или маски (например, *.fd.local), но в этой инструкции целенаправленно используется точный FQDN t03-1c11.lab.local.

Проверка через интерфейс браузера:
В Chrome: chrome://policy
В Edge: edge://policy

Ищем AuthServerAllowlist и AuthNegotiateDelegateAllowlist со значением t03-1c11.lab.local.

* конфигурации:

# Удалить значения
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Google\Chrome'  -Name AuthServerAllowlist            -ErrorAction SilentlyContinue
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Google\Chrome'  -Name AuthNegotiateDelegateAllowlist -ErrorAction SilentlyContinue
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' -Name AuthServerAllowlist            -ErrorAction SilentlyContinue
Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' -Name AuthNegotiateDelegateAllowlist -ErrorAction SilentlyContinue


- Далее, если Вы видите в логе: cat /var/log/apache2/access.log, свою уз, значит всё корректно. Далее Apache должен получить кеш кредов.

Рассказывайте, помогу.
biryukmikh; morgot999; +2 Ответить
25. morgot999 28.10.25 14:46 Сейчас в теме
(24) Добрый день!
Сквозная взлетела. Спасибо.
А насчет авторизации с различными UPN не подскажите, сталкивались?
biryukmikh; +1 Ответить
26. G_102814273319549585172 28.10.25 16:15 Сейчас в теме
(25) Я добавляю уз в 1С так: \\FQDN\УЗ

Это вроде не должно противоречить различным UPN. Возможно если Вы покажете логи Apache и технологического журнала 1С, что-то проясниться.
27. morgot999 28.10.25 16:46 Сейчас в теме
(26) Апачи вот это выдает при попытки авторизоваться с другим UPN
GSS ERROR In Negotiate Auth: gss_accept_sec_context() failed: [An unsupported mechanism was requested (Unknown error)]
До 1с в принципе еще ничего не доходит, так что в журнале ничего нет
28. G_102814273319549585172 29.10.25 11:34 Сейчас в теме
(27) здравствуйте. Уточните пожалуйста, мы говорим в рамках одного домена, но с разными суффиксами ?

Можете выполнить под рабочим и не рабочим UPN? Пример: kinit user@LAB.LOCAL
29. G_102814273319549585172 29.10.25 12:27 Сейчас в теме
(27) можете ли Вы так же показать /etc/krb5.conf и /etc/apache2/apache2.conf с публикацией и SSO?
30. morgot999 29.10.25 13:25 Сейчас в теме
(29) Добрый день!
Да, домен один, но разные суффиксы у пользователей.

При kinit user@TEST.LOCAL все ок.

kinit user@TEST.SU
kinit: Cannot find KDC for realm "TEST.SU" while getting initial credentials

Добавить домен TEST.SU в realms krb5.conf я не могу, потому что это просто UPN в домене TEST.LOCAL


Alias "/zup_test_ad" "/var/www/test_ad/"
<Directory "/var/www/test_ad/">
AuthType GSSAPI
AuthName "Kerberos Login"
Require valid-user
GssapiCredStore keytab:/opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
GssapiCredStore client_keytab:/opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
GssapiCredStore ccache:FILE:/var/krb/1c
GssapiUseS4U2Proxy On
GssapiBasicAuth Off
GssapiImpersonate On
GssapiLocalName On
GssapiDelegCcacheDir /var/krb/
AllowOverride All
Options SymLinksIfOwnerMatch
Require valid-user
GssapiPublishMech On
GssapiPublishErrors On
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/test_ad/default.vrd"
</Directory>





[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = TEST.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
default_tgs_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
default_tkt_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
permitted_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
forwardable = true
udp_preference_limit = 0

[realms]
TEST.LOCAL = {
kdc = dc02.test.local:88
default_domain = test.local
}


[domain_realm]
test.local = TEST.LOCAL
.test.local = TEST.LOCAL
TEST.LOCAL = TEST.LOCAL
.TEST.LOCAL = TEST.LOCAL

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
pam = {
debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = false
krb4_convert = false
}
31. G_102814273319549585172 30.10.25 14:22 Сейчас в теме
(30) здравствуйте. Я тоже столкнулся с этой проблемой. В итоге у меня вроде заработало, пожалуйста проверьте.

- Я подогнал конфиги под Ваш тестовый домен, измените в случае необходимости:

1. Приведите конфиг /etc/krb5.conf к минимально рабочему:

[libdefaults]
  default_realm = TEST.LOCAL
  dns_lookup_kdc = true
  dns_lookup_realm = true
  rdns = false
  forwardable = true
  ticket_lifetime = 24h
  renew_lifetime = 7d
  default_ccache_name = KEYRING:persistent:%{uid}

[realms]
  TEST.LOCAL = {
    kdc = TEST.local
    admin_server = TEST.local
  }

[domain_realm]
  .test.local = TEST.LOCAL
  test.local  = TEST.LOCAL
Показать


2. Приведите свою публикацию к виду по умолчанию:

# 1c publication
Alias "/zup_test_ad" "/var/www/test_ad/"
<Directory "/var/www/test_ad/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/test_ad/default.vrd"
</Directory>
Показать


Добавьте ниже отдельный блок:

# Kerberos для любого wsdir первого уровня: /<wsdir>/...
# исключаем служебные пути Apache и ACME

<LocationMatch "^/(?!server-status|server-info|icons/|.well-known/(?:acme-challenge/)?)([^/]+)(?:/|$)">
  AuthType GSSAPI
  AuthName "Kerberos Login"
  Require valid-user

  GssapiCredStore keytab:/etc/1C/http/http1cv8.keytab
  # client_keytab не нужен; удалите строку:
  # GssapiCredStore client_keytab:/etc/1C/http/http1cv8.keytab

  # Передача билета в 1С (оставляем как есть)
  GssapiDelegCcacheDir /var/krb/
  GssapiDelegCcacheUnique On

  # Ключевое — отдавать полноe имя (user@REALM)
  GssapiLocalName Off

  # Диагностика
  Header always set X-Remote-User "expr=%{REMOTE_USER}"
  Header always set X-GSS-Name "%{GSS_NAME}e"
</LocationMatch>
Показать


3. Перезапустите Apache сервис и 1С.

- Проверьте аутентификацию с суффиксом.

4. Дополнительно с помощью powershell на win10\11 Вы можете получить диагностику:

curl.exe -sS --negotiate -u : -D - -o NUL http://srv-1c.test.local/test/ru/ | findstr /R /C:"^X-Remote-User:" /C:"^X-GSS-Name:"


# Ожидаемое:
# X-Remote-User: Учетная запись
# X-GSS-Name: Учетная запись@TEST.LOCAL

Видишь X-Remote-User: Учетная запись→ значит REMOTE_USER = Учетная запись - 1С получит именно его.
Видишь X-GSS-Name: Учетная запись@TEST.LOCAL → Kerberos прошёл, principal распознан.


- Далее проверьте, что в Apache Вы видите свою уз: cat /var/log/apache2/access.log
- И посмотрите на предмет ошибок: cat /var/log/apache2/error.log

Далее посмотрите топологический журнал 1С.

- Конфиг расположить по пути: ./opt/1cv8/conf/logcfg.xml

Минимальный необходимый конфиг:

<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="/var/log/1c" history="7">
    <event><eq property="name" value="CONN"/></event>
    <event><eq property="name" value="AUTH"/></event>
    <event><eq property="name" value="AUTHM"/></event>
    <event><eq property="name" value="EXCP"/></event>

    <!-- Явно указываем важные поля для аутентификации -->
    <property name="p:processName"/>
    <property name="p:port"/>
    <property name="p:host"/>
    <property name="p:clientID"/>
    <property name="p:connectID"/>
    <property name="p:userName"/>      <!-- Имя пользователя -->
    <property name="p:dbUser"/>        <!-- Пользователь БД -->
    <property name="p:authID"/>        <!-- ID аутентификации -->
    <property name="p:sessionID"/>
    <property name="p:exception"/>
    <property name="p:descr"/>

    <!-- И остальные поля -->
    <property name="all"/>
  </log>
</config>
Показать


- Если у Вас есть конфиг прямо в директории 1С, удалите его и обновите по моей инструкции, найти можете так: find ./ -name logcfg.xml

- Мой конфиг пишет лог в /var/log/1c. Создайте директорию и дайте права:

mkdir -p /var/log/1c
chown usr1cv8:grp1cv8 /var/log/1c
chmod 0770 /var/log/1c


Смотрите лог: cat /var/log/1c/rphost_319801/25103014.log (Номер лога будет отличаться.)

Для последующего анализа я обычно удаляю всё там для удобства:

rm -fr /var/log/1c/*


И перезапускаю сервис для обновления логов.


Папку для кэша делегированных билетов под Apache, которые передаются на уровень приложения 1С должна иметь доступ под пользователем Apache:

install -d -m 700 -o www-data -g www-data /var/krb


Скорей всего у Вас это есть, но стоит проверить.
morgot999; +1 Ответить
32. morgot999 31.10.25 09:26 Сейчас в теме
(31) Добрый день!
Спасибо за развернутый ответ.
Авторизоваться под UPN получается только, если машина в домене.

curl.exe -sS --negotiate -u : -D - -o NUL http://srv-1c.test.local/test/ru/ | findstr /R /C:"^X-Remote-User:" /C:"^X-GSS-Name:"
выдает правильный ответ. Только если машина в домене

Если прописать curl.exe -sS --negotiate -u user@test.su:password прописать на машине, которая не в домене, то выходит
X-Remote-User:
X-GSS-Name: (null)

Если прописать user@test.local:password, то все ок.

А так ошибка (та же самая) сохраняется в апачи при попытки авторизации через UPN

Загвоздка в том, что авторизация через UPN нам необходима именно на машинах, которые не в домене.
33. G_102814273319549585172 31.10.25 12:32 Сейчас в теме
(32) Добрый день !) Я понял Вашу задачу, Вы хотите аутентифицировать в 1С клиентов, которые не в домене, через логин и пароль Active Directory, без встроенной аутентификации самой 1С.

В своем стенде, мне удалось это реализовать.

- Вам потребуется включить Basic аутентификацию.
- Мини-хуковая правка Basic заголовка через mod_lua.

1. Включить модуль: a2enmod lua headers
2. Создайте конфиг(Адаптировал под Вас):

install -d /etc/apache2/lua

cat >/etc/apache2/lua/normalize_basic.lua <<'LUA'
local b64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012­3456789+/'
local function b64dec(s)
  s=(s or ''):gsub('[^'..b64..'=]','')
  return (s:gsub('.',function(x)
    if x=='=' then return '' end
    local r,f='',(b64:find(x)-1)
    for i=6,1,-1 do r=r..(((f>>(i-1))&1)==1 and '1' or '0') end
    return r
  end):gsub('%d%d%d?%d?%d?%d?%d?%d?',function(x)
    if #x~=8 then return '' end
    local c=0; for i=1,8 do if x:sub(i,i)=='1' then c=c+2^(8-i) end end
    return string.char©
  end))
end

local function b64enc(s)
  local bits=(s:gsub('.',function(x)
    local b=x:byte(); local r=''
    for i=8,1,-1 do r=r..(((b>>(i-1))&1)==1 and '1' or '0') end
    return r
  end)..'0000')
  local out=(bits:gsub('%d%d%d?%d?%d?%d?',function(x)
    if #x<6 then return '' end
    local c=0; for i=1,6 do if x:sub(i,i)=='1' then c=c+2^(6-i) end end
    return b64:sub(c+1,c+1)
  end))
  return out..({'','==','='})[#s%3+1]
end

function normalize_basic®
  local a=r.headers_in["Authorization"]; if not a then return apache2.DECLINED end
  local tok=a:match("^Basic%s+(.+)$");   if not tok then return apache2.DECLINED end

  local creds=b64dec(tok)
  local user,pass=creds:match("^(.-):(.*)$"); if not user then return apache2.DECLINED end

  -- 1) DOMAIN\user -> user@TEST.LOCAL  (TEST, TEST.LOCAL, TEST-SU)
  local dom,sam=user:match("^([%w%._%-]+)\\(.+)$")
  if dom and sam then
    local d=dom:lower()
    local realm=(d=='test' or d=='test.local' or d=='test-su') and 'TEST.LOCAL' or (dom:upper()..'.LOCAL')
    user=sam..'@'..realm
  else
    -- 2) user@test.su -> user@TEST.LOCAL  (без учёта регистра)
    if user:lower():match("@test%.su$") then
      user=user:gsub("@[Tt][Ee][Ss][Tt]%.[Ss][Uu]$","@TEST.LOCAL")
    end
    -- 3) просто 'user' -> user@TEST.LOCAL
    if not user:find("@") then user=user.."@TEST.LOCAL" end
  end

  r.headers_in["Authorization"]="Basic "..b64enc(user..":"..(pass or ''))
  -- для отладки выведем нормализованное имя
  r.subprocess_env["NORM_USER"]=user
  return apache2.DECLINED
end
LUA

# перезагрузка Apache
systemctl reload apache2
Показать


3. Приведите конфиг /etc/apache2/apache2.conf, блок LocationMatch к виду:

<LocationMatch "^/(?!server-status|server-info|icons/|\.well-known/(?:acme-challenge/)?)([^/]+)(?:/|$)">
	LuaHookAccessChecker /etc/apache2/lua/normalize_basic.lua normalize_basic
	AuthType GSSAPI
	Require valid-user

	GssapiCredStore keytab:/opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab

	# Делегирование билета для 1С
	GssapiDelegCcacheDir /var/krb/
	GssapiDelegCcacheUnique On
	GssapiDelegCcacheEnvVar KRB5CCNAME

	# SSO + фолбэк на пароль→Kerberos
	GssapiBasicAuth On
	GssapiBasicAuthMech krb5
	GssapiAllowedMech krb5
	GssapiNegotiateOnce On

	# Чтобы REMOTE_USER был вида user@REALM
	GssapiLocalName Off
</LocationMatch>
Показать


systemctl reload apache2


- Как это работает: перехватываем Authorization: Basic и переводим в нужный формат.

Теперь должны работать все варианты ввода:

TEST\mikhalevsky

mikhalevsky@test.su

mikhalevsky@TEST.LOCAL

mikhalevsky

- Проверка(Поправьте под себя):

# UPN с альтернативным суффиксом
curl.exe -sS -u 'user@test.su:ПАРОЛЬ' -D - -o NUL http://srv1c.test.local/test/ `
| findstr /R /C:"^X-Remote-User:" /C:"^X-KRB5CCNAME:"
34. morgot999 10.11.25 09:56 Сейчас в теме
(33) Добрый день!
У меня в логах идут ошибки
[Mon Nov 10 10:05:05.679883 2025] [lua:error] [pid 2591720:tid 140328611829312] AH01482: Error loading /etc/apache2/lua/normalize_basic.lua: @/etc/apache2/lua/normalize_basic.lua
[Mon Nov 10 10:05:05.679932 2025] [lua:crit] [pid 2591720:tid 140328611829312] [client 192.168.0.29:64068] AH01477: lua: Failed to obtain lua interpreter for entry function 'normalize_basic' in /etc/apache2/lua/normalize_basic.lua
35. morgot999 10.11.25 14:54 Сейчас в теме
Как я понимаю код в lua скрипте скопировался сюда вами немного некорректно (неправильные символы). Я поправил, ошибок больше нет. Но и авторизации доменной нет. Нет даже запроса ввода доменной учетки, сразу выходит 1с авторизация.
36. morgot999 10.11.25 16:05 Сейчас в теме
Удалось авторизоваться во всех случаях. Но ошибка в логах Апачи GSS ERROR In Negotiate Auth: gss_accept_sec_context() failed: [An unsupported mechanism was requested (Unknown error)]
во время запуска 1с сохраняется. И сам запуск чуть дольше происходит (Первый запуск очень долго идет) Опять же речь идет о машине, которая не в домене.

Но самое главное пока, после закрытия 1с пользователем, в консоли Администрирования 1С сеанс висит все равно активным.
37. G_102814273319549585172 13.11.25 13:09 Сейчас в теме
(36) здравствуйте. Покажите еще раз конфиги, Apache2.conf, krb5.conf, normalize_basic.lua

И ответьте пожалуйста на вопросы:

0. Какой сейчас статус ?
1. Вы используете один и тот же keytab для клиента 1С и Apache ?
2. Покажите команду, с помощью которой Вы генерировали keytab.

Покажите еще вывод:

# От root
klist -k -t -K /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab


# От имени www-data (Apache)
runuser -u www-data -- klist -k -t -K /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab


ls -l /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
38. morgot999 13.11.25 13:21 Сейчас в теме
Добрый день!

0. Авторизация проходит во всех случаях
1. Да
2.
ktpass -princ usr1cv8@TEST.LOCAL -mapuser usr1cv8 -pass * -ptype KRB5_NT_PRINCIPAL -crypto ALL -out C:\1C\usr1cv8.keytab -setupn
ktpass -princ usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL -mapuser usr1cv8 -pass * -ptype KRB5_NT_PRINCIPAL -crypto ALL -pass * -setpass /in C:\1C\usr1cv8.keytab /out C:\1C\usr1cv8_1.keytab -setupn
ktpass -princ HTTP/srv-1clinux-test.test.local@TEST.LOCAL -mapuser usr1cv8 -pass * -ptype KRB5_NT_PRINCIPAL -crypto ALL -pass * -setpass /in C:\1C\usr1cv8_1.keytab /out C:\1C\usr1cv8.keytab -setupn




root@srv-1clinux-test:/home/test# klist -k -t -K /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
Keytab name: FILE:/opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x2c6e70e33eba629e)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x2c6e70e33eba629e)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x22045d75f504ce8cbf0b79cb84a33bc750121f7aacd4440941e70b8da7­9d7122)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x6472688ad3c7f7235a08e19dfb6300c9)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x04fe52b35d761640)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x04fe52b35d761640)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x0d519e08b6f84cfe6d30250f45323a5c28ca7a76fafa9e422628c36b4f­f61d8e)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x5f26d938afc7d1b66b5b299bc2eadd71)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0xc7071f138ad9cd2a)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0xc7071f138ad9cd2a)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x22de5198e921ef78b05c7846c1a748ae0fb4fdb5eb42618cf938345282­6d058e)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x83de797a2ae8aa29d55df62b40ac5bee)
root@srv-1clinux-test:/home/test# runuser -u www-data -- klist -k -t -K /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
Keytab name: FILE:/opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x2c6e70e33eba629e)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x2c6e70e33eba629e)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x22045d75f504ce8cbf0b79cb84a33bc750121f7aacd4440941e70b8da7­9d7122)
   3 01.01.1970 04:00:00 usr1cv8@TEST.LOCAL (0x6472688ad3c7f7235a08e19dfb6300c9)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x04fe52b35d761640)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x04fe52b35d761640)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x0d519e08b6f84cfe6d30250f45323a5c28ca7a76fafa9e422628c36b4f­f61d8e)
   3 01.01.1970 04:00:00 usr1cv8/srv-1clinux-test.test.local@TEST.LOCAL (0x5f26d938afc7d1b66b5b299bc2eadd71)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0xc7071f138ad9cd2a)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0xc7071f138ad9cd2a)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x1dc93b9b76dd49f96c6b8fac30cc8468)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x22de5198e921ef78b05c7846c1a748ae0fb4fdb5eb42618cf938345282­6d058e)
   3 01.01.1970 04:00:00 HTTP/srv-1clinux-test.test.local@TEST.LOCAL (0x83de797a2ae8aa29d55df62b40ac5bee)
root@srv-1clinux-test:/home/test# ls -l /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
-rw-r--r-- 1 www-data grp1cv8 1152 окт 21 16:06 /opt/1cv8/x86_64/8.3.26.1498/usr1cv8.keytab
Показать


krb5


apache2
39. morgot999 13.11.25 13:53 Сейчас в теме
(38)
normalize_basic
40. G_102814273319549585172 14.11.25 10:26 Сейчас в теме
(39) Попробуйте так:

# Публикации 1С (пример, баз может быть несколько)
Alias "/zup_test_ad" "/var/www/test_ad/"
<Directory "/var/www/test_ad/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/test_ad/default.vrd"
</Directory>

# Общая аутентификация для всех "верхнеуровневых" путей (все базы)
<LocationMatch "^/(?!server-status|server-info|icons/|\.well-known/(?:acme-challenge/)?)([^/]+)(?:/|$)">
    AuthType GSSAPI
    AuthName "1C Kerberos / Basic"

    Require valid-user

    # Ключи для HTTP/srv-1clinux-test.test.local@TEST.LOCAL
    GssapiCredStore keytab:/etc/1C/http/http1cv8.keytab

    # Разрешаем Basic внутри mod_auth_gssapi (для недоменных ПК)
    GssapiBasicAuth On
    GssapiBasicAuthMech krb5

    # Твои текущие настройки
    GssapiDelegCcacheDir /var/krb/
    GssapiDelegCcacheUnique On
    GssapiLocalName Off

    Header always set X-Remote-User "expr=%{REMOTE_USER}"
    Header always set X-GSS-Name "%{GSS_NAME}e"
</LocationMatch>
Показать


По сути эта ошибка говорит, что вначале клиент выбирает не поддерживаемый протокол, NTLM допустим и потом переходит в Basic. Если у Вас все работает, как я понял это косметическая ошибка.
42. morgot999 18.11.25 10:11 Сейчас в теме
(40) Добрый день!
Тогда теряется возможность авторизоваться через UPN. А у вас на тестовой стенде, где есть возможность авторизоваться через UPN, после закрытия клиента, сеанс остается активным?
41. cherv 17.11.25 18:03 Сейчас в теме
Добрый день!
Большое спасибо за статью!
1. Подскажите, пробовали ли настроить доменную авторизацию в связке Сервер приложений 1С на Linux-сервер + веб-сервер IIS на Windows?
Необходимо сделать кластер серверов из сервера на Windows (уже работающего с сервером приложений 1С, на том же сервере установлен веб-сервер на IIS), добавив к нему сервер на Linux? Хотелось бы попробовать, чтобы все сеансы веб-клиента осуществлялись через IIS, т.к. эта схема уже работает. Возможно ли так настроить, или нужно всё переводить на Apache?
2. Аутентификация операционной системы работает в Linux только с указанием .ru в конце (\\mydomain.ru\user), по FQDN, а в Windows только без .ru в конце (\\mydomain\user), по NetBIOS. Возможно ли сделать так, чтобы она работала одинаково в обеих операционных системах? Пока вижу только обходной вариант заводить дубли пользователей с разной строкой пользователя ОС, есть ли работающий правильный вариант?
43. biryukmikh 29 20.11.25 10:09 Сейчас в теме
(41)Добрый день!
1) Сильно не вникал в схему с СП на Linux + IIS веб-сервер, но постараюсь ответить как смогу (разузнаю у коллег).
Так проблем не вижу, поскольку публикация веб-клиента и веб-сервисов идет относительно по схожей схеме.
В качестве контроллера домена все равно используется Active Directory.
Тут стоит упомянуть, что у нас СП и Веб-сервер - это отдельные ВМ и они все входят в контроллер домена.

2) С этим проблем не видел в живую везде одно и тоже доменное имя \\CORP.YOURCOMPANY.RU\user
44. cherv 21.11.25 11:10 Сейчас в теме
(43) Михаил, добрый день!
Спасибо за ответ.
1. Если разузнаете нюансы у коллег - буду благодарен!
Пока не работает, к сожалению, что сделал:
- выпустил keytab-файл для УЗ usr1cv8, под которой работает СП 1С:
ktpass -crypto AES256-SHA1 -pType KRB5_NT_PRINCIPAL -princ usr1cv8/serverLinux.MYDOMAIN.ru@MYDOMAIN.RU -mapuser svc_user -pass "SuperPassword" -out C:\temp\usr1cv8.keytab -setpass

- настроено делегирование - с сервера Windows/IIS в AD Trust this computer for delegation to specified services only - Use Kerberos only - указано делегирование для УЗ usr1cv8/serverLinux.MYDOMAIN.ru@MYDOMAIN.RU

Но пока в веб-клиенте для базы под СП на Linux так и просит вводить пароль, не авторизует по доменной УЗ пользователей.

2. У нас для Windows, к сожалению, работает только вариант \\CORP.YOURCOMPANY\user, так настроено на уровне AD и админы говорят, что если поменять, то сломается весь домен. Поэтому хотел найти другие варианты, пока не работают.
45. cherv 28.11.25 01:51 Сейчас в теме
По теме статьи - еще раз спасибо, удалось настроить доменную авторизацию на веб-клиенте.
Всё сделал, как было указано, но не работало, долго мучался - оказалось, в apache2,conf в <Directory "/var/www/1C/base/"> нужно было добавить еще

RequestHeader set X-Remote-User %{REMOTE_USER}s


для передачи доменной учетки в Header
biryukmikh; +1 Ответить
46. biryukmikh 29 28.11.25 09:51 Сейчас в теме
(45) Вам спасибо за ваши старания и что поделились кейсом. Рад, что получилось своими силами

В вашем случае вы фактически правите Заголовок HTTP запроса добавляя или изменяя имя пользователя
Будет интересно узнать на выходных почему так требуется делать

Ссылка на Apache: https://httpd.apache.org/docs/2.4/mod/mod_headers.html#requestheader

RequestHeader set X-Remote-User %{REMOTE_USER}s


Description:	Configure HTTP request headers
Syntax:	RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]]
47. comatoz 30.11.25 23:04 Сейчас в теме
Спасибо всем отметившимся в теме и особое спасибо автору.
Перечитал статью комментарии, узнал в интернете много о kerberos, 1С, apache, SPN записях и другом.
Привести содержимое конф.файлов могу, но там всё правильно - теперь я за каждую строку могу много рассказать - настолько уже начитался интернета.

Общая ситуация:
-узел с debian, установлен apache, настроен kerberos, авторизация по учетной записи проходит, авторизация по keytab - проходит, контроллеры и сервер приложений (СП) резолвятся прямо и обратно, домен AD резолвится по всякому. Короткого имени web сервера нет (раньше можно было резолвить - тоже не работало).
-домен 2019, два контроллера. СП 1С на Windows, опубликована база, через браузер к базе подключится можно по логину/паролу которые не доменные, а те, что заданы вручную. Узел с debian - резолвится. SPN привязан к УЗ USR1CV8 (раньше была отдельная УЗ - тоже самое).
В логах СП 1С при попытке подключения вот такое(то, что относится к web):
...
44:08.657006-0,EXCP,2,level=WARNING,process=rphost,p:processName=demodoc,OSThread=12280,t:clientID=188822,t:applicationName=WebServerExtension,t:computerName=web1c.domain.local,t:connectID=311092,SessionID=670732,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src\vrsbase\src\VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
44:08.657007-0,EXCP,2,level=WARNING,process=rphost,p:processName=demodoc,OSThread=12280,t:clientID=188822,t:applicationName=WebServerExtension,t:computerName=web1c.domain.local,t:connectID=311092,SessionID=670732,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src\vrsbase\src\VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'
44:08.657056-0,EXCP,2,level=WARNING,process=rphost,p:processName=demodoc,OSThread=12280,t:clientID=188822,t:applicationName=WebServerExtension,t:computerName=web1c.domain.local,t:connectID=311092,SessionID=670732,AppID=WebClient,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src\vrsbase\src\VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
44:08.657057-0,EXCP,2,level=WARNING,process=rphost,p:processName=demodoc,OSThread=12280,t:clientID=188822,t:applicationName=WebServerExtension,t:computerName=web1c.domain.local,t:connectID=311092,SessionID=670732,AppID=WebClient,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src\vrsbase\src\VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
.....
44:14.391001-0,CONN,1,level=INFO,process=rphost,OSThread=6572,Txt=Clnt: MyUserName1: USR1CV8@DOMAIN.LOCAL
44:14.391003-0,CONN,1,level=INFO,process=rphost,OSThread=11580,Txt=Clnt: MyUserName1: USR1CV8@DOMAIN.LOCAL
44:14.407291-0,CONN,1,level=INFO,process=rphost,OSThread=6572,Txt=Clnt: DstUserName1: HTTP/web1c.domain.local StartProtocol: 0 Success
44:14.422003-0,CONN,1,level=INFO,process=rphost,OSThread=11580,Txt=Clnt: DstUserName1: HTTP/web1c.domain.local StartProtocol: 0 Success
44:14.422068-0,CONN,1,level=INFO,process=rphost,OSThread=6572,Txt=Clnt: MyUserName2: DOMAIN\USR1CV8
44:14.422076-0,CONN,1,level=INFO,process=rphost,OSThread=11580,Txt=Clnt: MyUserName2: DOMAIN\USR1CV8
...

В ==> /var/log/apache2/auth.log <==
10.10.2.32 - username@DOMAIN.LOCAL [30/Nov/2025:22:44:08 +0300] "POST /elavtdoc/ru_RU/e1cib/login?version=8.3.27.1719&nooida&vl=ru_RU&clnId=5b1c94e9-fe99-4a56-b828-42593e54dec7 HTTP/1.1" 402 1355 "Negotiate YIIH9QYGKwYBBQUCoIIH6TCCB+WgMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHgYKKw...........
В браузере - окно ввода логина/пароля от 1С, список логинов подтягивается, при вводе недоменных логина/пароля - в базу войти можно.
Имя для входа в 1 С пробовал ставить в виде username@DOMAIN.LOCAL - ничего не меняется.
Авторизация через приложение из тонкого клиента 1С - работает при указании \\DOMAIN\username и \\domain\username и не работает при указании полного имени домена \\DOMAIN.LOCAL\username \\domain.local\username

Не получается авторизоваться прозрачно.
Сильно вероятно, что где-то что-то недосмотрел, но не вижу.

Прошу помощи у сообщеста - куда ещё можно посмотреть?
biryukmikh; +1 Ответить
48. G_102814273319549585172 02.12.25 10:41 Сейчас в теме
(47) здравствуйте. Стоит показать все конфиги и права.
49. comatoz 02.12.25 12:20 Сейчас в теме
(48)
/etc/krb5.conf
[logging]
Default = FILE:/var/log/krb5libs.log
Kdc = FILE:/var/log/krb5kdc.log
admin_Server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac
[realms]
DOMAIN.LOCAL = {
kdc=325-dc1.domain.local:88
default_domain=domain.local
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL
.DOMAIN.LOCAL = DOMAIN.LOCAL
DOMAIN.LOCAL = DOMAIN.LOCAL
#[kdc]
# Profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
Pam = {
Debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = false
krb4_convert = false
}

Аутентификация от пользователя работает
# kinit username@DOMAIN.LOCAL
- при корректном вводе пароля ошибок нет.

# apache2 -v
Server version: Apache/2.4.65

/etc/apache2/sites-enabled/doc.conf
LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.27.1719/wsap24.so"

# 1c publication
Alias "/domaindoc" "/var/www/domaindoc/"
<Directory "/var/www/domaindoc/">
RequestHeader set X-Remote-User %{REMOTE_USER}s
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/domaindoc/default.vrd"
Header always set X-Remote-User "expr=%{REMOTE_USER}"
Header always set X-GSS-Name "%{GSS_NAME}e"
</Directory>

# Общая аутентификация для всех "верхнеуровневых" путей (все базы)
<LocationMatch "^/(?!server-status|server-info|icons/|\.well-known/(?:acme-challenge/)?)([^/]+)(?:/|$)">
AuthType GSSAPI
AuthName "1C Kerberos / Basic"

Require valid-user

# Ключи для HTTP/srv-1clinux-test.test.local@TEST.LOCAL
GssapiCredStore keytab:/etc/apache2/HTTP.keytab

# Разрешаем Basic внутри mod_auth_gssapi (для недоменных ПК)
GssapiBasicAuthMech krb5

GssapiDelegCcacheDir /var/krb/
GssapiDelegCcacheUnique On
# Ключевое — отдавать полноe имя (user@REALM)
# GssapiLocalName Off
# GssapiLocalName On

Header always set X-Remote-User "expr=%{REMOTE_USER}"
Header always set X-GSS-Name "%{GSS_NAME}e"

</LocationMatch>

Права для /var/krb
install -d -m 700 -o www-data -g www-data /var/krb
/etc/hosts
10.30.2.63 web1c.domain.local


keytab генерился на контроллере
ktpass -princ usr1cv8@DOMAIN.LOCAL -mapuser usr1cv8 -pass "PasswoRD11" -ptype KRB5_NT_PRINCIPAL -crypto ALL -out HTTP.keytab -setupn
ktpass -princ usr1cv8/web1c.domain.local@DOMAIN.LOCAL -mapuser usr1cv8 -pass "PasswoRD11" -ptype KRB5_NT_PRINCIPAL -crypto ALL -pass "PasswoRD11" -setpass /in HTTP.keytab /out HTTP2.keytab -setupn
ktpass -princ HTTP/web1c.domain.local@DOMAIN.LOCAL -mapuser usr1cv8 -pass "PasswoRD11" -ptype KRB5_NT_PRINCIPAL -crypto ALL -pass "PasswoRD11" -setpass /in HTTP2.keytab /out HTTP3.keytab -setupn
был перенесен и помещен как /etc/apache2/HTTP.keytab

Резолвятся на всех задействованных узлах: имена контролера, домена, веб-сервера прямо и обратно.
Коротких имён в hosts нет.


Аутентификация от apache по keytab работает
# runuser -u www-data -- kinit -5 -V -k -t /etc/apache2/HTTP.keytab HTTP/web1c.domain.local
Using default cache: /tmp/krb5cc_33
Using principal: HTTP/web1c.domain.local@DOMAIN.LOCAL
Using keytab: /etc/apache2/HTTP.keytab
Authenticated to Kerberos v5

Аутентификация от пользователя kinit username@DOMAIN.LOCAL работает - при корректном пароле ошибок нет.

Запрос curl # runuser -u www-data -- curl --insecure --negotiate -u : -D - -o NUL https://web1c.domain.local/doc/
возвращает непустые заголовки
...
X-Remote-User: HTTP/web1c.domain.local@DOMAIN.LOCAL
X-GSS-Name: HTTP/web1c.domain.local@DOMAIN.LOCAL
...

При обращении браузером по адресу базы https://web1c.domain.local/domaindoc/ru_RU/ в логе apache
==> /var/log/apache2/auth.log <==
10.10.2.32 - username@DOMAIN.LOCAL [02/Dec/2025:12:05:39 +0300] "POST /domaindoc/ru_RU/e1cib/additionalAuthSettings?version=1&sysver=8.3.27.1719 HTTP/1.1" 200 216 "Negotiate YIIH9QYGKwYBBQUCoIIH6TCCB+WgMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNw..........

Тонким клиентом при указании адреса и базы подключится к этой базе можно, аутентификация из тонкого клиента 1С - работает при указании \\DOMAIN\username и \\domain\username и не работает при указании полного имени домена \\DOMAIN.LOCAL\username или \\domain.local\username

Тонким клиентом через https подключится можно, аутентифицирует при указании логина/пароля 1С.

Вроде ничего не забыл.

Не работает сквозная аутентификация.

Куда надо обратить внимание?
50. G_102814273319549585172 02.12.25 15:39 Сейчас в теме
(49) А браузер Вы настроили ?

$WEBHOST = 'web1c.domain.local'    # хост, куда ходит браузер

# Chrome
$C = 'HKLM:\SOFTWARE\Policies\Google\Chrome'
New-Item $C -Force | Out-Null
New-ItemProperty $C -Name AuthServerAllowlist            -Type String -Value $WEBHOST -Force | Out-Null
New-ItemProperty $C -Name AuthNegotiateDelegateAllowlist -Type String -Value $WEBHOST -Force | Out-Null

# Edge
$E = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge'
New-Item $E -Force | Out-Null
New-ItemProperty $E -Name AuthServerAllowlist            -Type String -Value $WEBHOST -Force | Out-Null
New-ItemProperty $E -Name AuthNegotiateDelegateAllowlist -Type String -Value $WEBHOST -Force | Out-Null
Показать


А какой логин прилетает смотрите в /var/log/apache2/access.log

И Вы подключаетесь с того же домена ?
51. comatoz 02.12.25 16:52 Сейчас в теме
(50)
Да, сейчас для браузера настроено
AuthNegotiateDelegateAllowlist как *.domain.local
AuthServerAllowlist как *.domain.local

Пробовал по разному.
52. comatoz 02.12.25 21:31 Сейчас в теме
(50)
Подключаюсь с того же домена.
Логин указан при авторизации в ПК как DOMAIN\username прилетает (сюдя по/var/log/apache2/access.log) как username@DOMAIL.LOCAL.
В 1С пробовал указать как
\\DOMAIN\username
\\domain\username
\\DOMAIN.LOCAL\username
\\domain.local\username

Никак не аутентифицирует..
G_102814273319549585172; +1 Ответить
53. G_102814273319549585172 03.12.25 16:15 Сейчас в теме
(52) Попробуйте привести конфиг к такому виду(Просто целиком скопировать код и вставить, он обновит):

cat >/etc/krb5.conf <<'KRB'
[libdefaults]
  default_realm = TEST.LOCAL
  dns_lookup_kdc = true
  dns_lookup_realm = true
  rdns = false
  forwardable = true
  ticket_lifetime = 24h
  renew_lifetime = 7d
  default_ccache_name = KEYRING:persistent:%{uid}

[realms]
  TEST.LOCAL = {
    kdc = fd.local
    admin_server = test.local
  }
[domain_realm]
  .fd.local = TEST.LOCAL
  fd.local  = TEST.LOCAL
  .fd.LOCAL = TEST.LOCAL
  fd.LOCAL  = TEST.LOCAL
KRB
Показать


Если не помогает, оставьте этот конфиг и перегенерируйте Keytab с новой уз.

Import-Module ActiveDirectory
$u = "svc_http1cv8"

if (-not (Get-ADUser -Filter "sAMAccountName -eq '$u'" -ErrorAction SilentlyContinue)) {
    New-ADUser -Name $u -SamAccountName $u -Enabled $true -AccountPassword (Read-Host -AsSecureString "Введите пароль для $u")
}


Set-ADUser -Identity $u -KerberosEncryptionType AES256


ktpass -princ HTTP/web1c.domain.local@TEST.LOCAL -mapuser svc_http1cv8 -pass "ПАРОЛЬ УЗ" -ptype KRB5_NT_SRV_HST -crypto AES256-SHA1 -out C:\keytab\http1cv8.keytab

По каким-то причинам у меня не удалось это завести с помощью KRB5_NT_PRINCIPAL.

hostnamectl set-hostname "web1c.domain.local"
echo "10.97.20.45 web1c.domain.local" >> /etc/hosts

10.97.20.45 - ip хоста web1c.domain.local
54. XYZ-IT 25.12.25 16:51 Сейчас в теме
(53) Добрый день. Не подскажете, сервер 1С и апач находятся на одном сервере, будет ли работать с разным кейтабом. Для апач /etc/apache2/HTTP.keytab, а для 1С /opt/1cv8/x86_64/8.3.27.1719/usr1cv8.keytab. Или нужен один для двоих? Для 1С доменная аутентификация проходит, а через браузер нет.
55. biryukmikh 29 25.12.25 17:33 Сейчас в теме
(54) Добрый день, общался по похожему вопросу.
В итоге предложил сразу на 2 отдельных ВМ разворачивать 1С Сервер приложений и Apache Веб-сервер, так как на одном не вышло.
Буду благодарен, если раскроете тему больше (возможно сами найдете ответ).
Например, в логах веб-сервера и 1C Сервера приложений указывается проблема?
Проверяли кейтаб apache2 на работу?
Скрытый текст проверка кейтаб
56. XYZ-IT 26.12.25 13:58 Сейчас в теме
(33)
GssapiDelegCcacheEnvVar KRB5CCNAME

(55) В итоге я веб сервер вывел на отдельную машину. Все равно почему то не заводится, выходит окно ввода логина и пароля.
На dc01:
KTPASS -princ HTTP/1cws-01.xyz.local@XYZ.LOCAL -mapuser http-krb02@XYZ.LOCAL -pass *********** -setpass -crypto ALL -ptype KRB5_NT_PRINCIPAL -out C:\HTTP.keytab

На 1cws-01:
klist -e -k -t /etc/apache2/HTTP.keytab
Keytab name: FILE:/etc/apache2/HTTP.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   3 01.01.1970 03:00:00 HTTP/1cws-01.xyz.local@XYZ.LOCAL (DEPRECATED:des-cbc-crc)
   3 01.01.1970 03:00:00 HTTP/1cws-01.xyz.local@XYZ.LOCAL (DEPRECATED:des-cbc-md5)
   3 01.01.1970 03:00:00 HTTP/1cws-01.xyz.local@XYZ.LOCAL (DEPRECATED:arcfour-hmac)
   3 01.01.1970 03:00:00 HTTP/1cws-01.xyz.local@XYZ.LOCAL (aes256-cts-hmac-sha1-96)
   3 01.01.1970 03:00:00 HTTP/1cws-01.xyz.local@XYZ.LOCAL (aes128-cts-hmac-sha1-96)
Показать


klist -e
Ticket cache: KEYRING:persistent:0:0
Default principal: HTTP/1cws-01.xyz.local@XYZ.LOCAL

Valid starting       Expires              Service principal
26.12.2025 13:50:57  26.12.2025 23:50:57  krbtgt/XYZ.LOCAL@XYZ.LOCAL
        renew until 02.01.2026 13:50:57, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
Показать


/etc/krb5.conf
[libdefaults]
  default_realm = XYZ.LOCAL
  dns_lookup_kdc = true
  dns_lookup_realm = false
  rdns = false
  forwardable = true
  ticket_lifetime = 24h
  renew_lifetime = 7d
  default_ccache_name = KEYRING:persistent:%{uid}
  default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
[realms]
  XYZ.LOCAL = {
    kdc = dc01.xyz.local
    admin_server = xyz.local
  }

[domain_realm]
  xyz.local = XYZ.LOCAL
  .xyz.local = XYZ.LOCAL
  XYZ.LOCAL = XYZ.LOCAL
  .XYZ.LOCAL = XYZ.LOCAL
Показать


/etc/apache2/apache2.conf
# 1c publication
Alias "/test_erp" "/var/www/1C/test_erp/"
<Directory "/var/www/1C/test_erp/">
    AllowOverride All
    AuthType GSSAPI
    AuthName "Kerberos Login"
    Require valid-user
    GssapiCredStore keytab:/etc/apache2/HTTP.keytab
    GssapiCredStore client_keytab:/etc/apache2/HTTP.keytab
    GssapiCredStore ccache:FILE:/var/krb/ktk123
    GssapiUseS4U2Proxy On
    GssapiImpersonate On
    GssapiLocalName On
    GssapiDelegCcacheDir /var/cred/
    Options SymLinksIfOwnerMatch
    Require valid-user
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/1C/test_erp/default.vrd"
</Directory>
Показать


Дополню: в логах /var/log/apache2/error.log
[auth_gssapi:error] [pid 116304:tid 116325] [client 172.27.1.11:53832] GSS ERROR In Negotiate Auth: gss_accept_sec_context() failed: [Unspecified GSS failure.  Minor code may provide more information (Request ticket server HTTP/1cws-01.xyz.local@XYZ.LOCAL kvno 3 enctype aes256-cts found in keytab but cannot decrypt ticket)], referer: http://1cws-01.xyz.local/test_erp/
57. comatoz 19.01.26 15:25 Сейчас в теме
Вопрос не совсем по теме, но похоже про сквозную аутентификацию 1С здесь больше всего знают.

Исходные данные:
• Сервер приложений версия 1С:Предприятие 8.3 (8.3.27.1719) на Windows Server 2019, всё обновления установлены, сервер БД MS SQL 2017.
• Конфигурации 1С разные (ERP, Документооборот, ЗУП).
• Имя кластера приложений DEMO1C.LOCAL
• Тонкий клиент 1С на Windows 10.
• Домен MS ActiveDirectory имеет полное имя DOMAIN.LOCAL
• Клиент резолвится с сервера приложений, сервер приложений клиента - прямо и обратно


Проблема:
• Сквозная аутентификация с тонкого клиента 1С на сервере приложений 1С проходит только в случае указания пользователя в виде \\DOMAIN\Username (короткое имя домена).
• Сквозная аутентификация с тонкого клиента 1С на сервере приложений 1С НЕ проходит в случае указания пользователя в виде \\DOMAIN.LOCAL\Username (полное имя домена).

Ниже часть технологического журнала сервера приложений содержащая неудачное подключение.
...
34:07.957030-0,EXCP,2,level=WARNING,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,SessionID=20,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src\vrsbase\src\VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
34:07.957031-0,EXCP,2,level=WARNING,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,SessionID=20,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src\vrsbase\src\VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'
34:07.972014-0,CONN,2,level=INFO,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,Txt=Srvr: SrcUserName1: DEMO1C\USR1CV8
34:07.972019-0,CONN,2,level=INFO,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,Txt=Srvr: DstUserName1: username@DOMAIN.LOCAL(DOMAIN.LOCAL\username)
34:07.972049-0,CONN,2,level=INFO,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,Txt=Srvr: DstUserName2: DOMAIN\username(DOMAIN\username)
34:07.988045-0,EXCP,2,level=WARNING,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,SessionID=20,AppID=1CV8C,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src\vrsbase\src\VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'
34:07.988046-0,EXCP,2,level=WARNING,process=rphost,p:processName=doc_demo,OSThread=15372,t:clientID=31143,t:applicationName=1CV8C,t:computerName=TermFarm1,t:connectID=9136,SessionID=20,AppID=1CV8C,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src\vrsbase\src\VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'
34:10.379020-2485020,CONN,0,level=INFO,process=rphost,OSThread=7832,t:clientID=31143,t:clientID=31143,t:computerName=TermFarm1,t:applicationName=1CV8C,t:connectID=9136,Calls=11
...

Содержимое файла 1cv8wsrv.lst
{
{1,
{72401f95-9475-40c7-8184-f57dc6648b9a,"demo1c.domain.local",1541,"demo1c.domain.local",0,0,0,60,0,0,0,
{1,
{"demo1c.domain.local",1541}
},0,0,1,0,0,0,0,""}
},
{2,
{"Administrator","авторизация по паролю","","............=","",1},
{"globalroot","globalroot - доменная авторизация","","...........=","\\DOMAIN\globalroot",2}
},0,1}

Часть содержимого файла 1CV8Clst.lst
{0,
{72401f95-9475-40c7-8184-f57dc6648b9a,"demo1c.domain.local ",1541,"demo1c.domain.local ",0,0,0,60,0,0,0,
{1,
{"demo1c.domain.local ",1541}
},0,0,1,0,0,0,0,""},
….


Вопрос:
Что необходимо изменить, чтобы сквозная аутентификация проходила в случае указания логина пользователя для аутентификации ОС в виде \\DOMAIN.LOCAL\Username, т.е. с полным указанием домена?
58. biryukmikh 29 21.01.26 17:14 Сейчас в теме
(57) Доброго вечера!
Когда вы входите со своего рабочего компа на Windows можно посмотреть на билеты через klist в powershell содержат ли они полное имя домена при неполном формате?
Еще бы посмотреть на keytab файл, так как возможно дело в нем
Как вы его создавали и где? На сервере, где Active Directory?
Например через ktpass
# От имени администратора домена
ktpass -princ usr1cv8/demo1c.domain.local@DOMAIN.LOCAL -mapuser DOMAIN\srv-1c -pass Password123 -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out c:\temp\1c.keytab

Настройки Active Directory
a) Альтернативные имена пользователей (UPN Suffixes):
В Active Directory Domains and Trusts добавьте суффикс DOMAIN.LOCAL
Убедитесь, что для пользователей установлен UPN в формате username@DOMAIN.LOCAL
b) Проверьте SPN (Service Principal Names):
powershell
setspn -L demo1c $ # Проверьте SPN для сервера приложений

По логам технологического журнала вижу что просто не проходит пользователь по доменке \\DOMAIN.LOCAL\Username

Без этих вопросов сложно сказать в чем проблема
59. comatoz 22.01.26 16:55 Сейчас в теме
(58) Спасибо за ответ, но описана ситуация когда сервер и клиент на ОС Windows, т.е. нигде самостоятельно билеты Kerberos не создаются и не используются.

Добавлять UPN и менять для всех пользователей не хотелось бы.

(58)
Настройки Active Directory
a) Альтернативные имена пользователей (UPN Suffixes):
В Active Directory Domains and Trusts добавьте суффикс DOMAIN.LOCAL
Убедитесь, что для пользователей установлен UPN в формате username@DOMAIN.LOCAL

Для всех пользователей так и есть, дополнительных UPN нет.

b) Проверьте SPN (Service Principal Names):
powershell
setspn -L demo1c $ # Проверьте SPN для сервера приложений

В выводе команды есть короткое и длинное имя.

C:\Users\domainroot>setspn -L demo1c$
Зарегистрирован ServicePrincipalNames для CN=demo1c,OU=1C,OU=..........
....
TERMSRV/DEMO1C
TERMSRV/demo1c..............
RestrictedKrbHost/DEMO1C
HOST/DEMO1C
RestrictedKrbHost/demo1c..........
HOST/demo1c..............
60. valekz 12.02.26 08:34 Сейчас в теме
Добрый день.
подскажите почему могут не передаваться креденшиналы в 1С?
конфиг апача:

<Directory "/var/www/prod/">
    RequestHeader set X-Remote-User %{REMOTE_USER}s
    AllowOverride All
    Options None    
    AuthType GSSAPI
    AuthName "1C:Enterprise web client"
    GssapiCredStore keytab:/etc/apache2/HTTP.keytab
    GssapiCredStore client_keytab:/etc/apache2/HTTP.keytab
    GssapiDelegCcacheDir /var/krb
    GssapiImpersonate On
    GssapiAllowedMech krb5
    GssapiLocalName Off
    GssapiNegotiateOnce Off
    Require valid-user
    GssapiSSLonly off
    GssapiUseS4U2Proxy On
    GssapiCredStore ccache:FILE:/var/krb/1c
    LogLevel auth_gssapi:debug
    GssapiAcceptorName HTTP@1c.dom.local
    GssapiDelegCcachePerms mode:0644
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/prod/default.vrd"
Показать


Аутентификация на апач походит, файлы кэша создаются в /var/krb, но в 1с ничего не "уходит".
в ТЖ ошибок относительно авторизации нет.

1С и web сервис работают на одной машине, используется 2 кейтаб файла.
Сквозная авторизация на "тонком и толстом" клиенте работает
61. biryukmikh 29 15.02.26 10:33 Сейчас в теме
(60) На током и толстом клиенте сквозная работает, так как подключение идет напрямую к кластеру, а не через веб-сервер.
У нас настройка велась на двух отдельных ВМ с 1 кейтабом на каждой. ВМ1 - сервер приложений 1С и ВМ2 - веб-сервер apache2 и в контролере Active Directory заведены две разные сервисные учетки под сервер приложений и под веб-сервер.
Тут причина скорее кроется в настройке сервисных учеток в Active Directory или keytab, посколку все происходит на одной тачке.
Посмотрел бы логи kerberos.trace (как будет время составлю инструкцию по просмотру логов)
62. valekz 16.02.26 16:36 Сейчас в теме
(61) Выделил апач на отдельную машину , результат такой же.

спасибо за наводку на kerberos.trace - буду смотреть.

есть в инфраструктуре ADFS , попробовал по этой инструкции настроить: https://its.1c.ru/db/metod8dev#content:5972:hdoc:ad_fs_provider

тоже - fail , но тут хотябы чтото прилетает в 1с. в ТЖ записи вида:
5:39.970009-0,EXCP,2,level=WARNING, Incorrect user or password
Invalid user name'
45:39.970010-0,EXCP,2,level=WARNING,: Cannot execute OpenID Connect authentication.
Check whether the connection settings are correct.
63. biryukmikh 29 17.02.26 09:15 Сейчас в теме
(62) Добрый день!
Оба сервера находятся в одной доменнке?
64. valekz 17.02.26 14:38 Сейчас в теме
65. valekz 18.02.26 15:50 Сейчас в теме
(61)
Удалось добиться проброса креденшинал в 1с , но в логах ТЖ такое:

CONN,2,level=INFO,process=rphost,p:processName=erp_prod,OSThread=2188446,t:clientID=230358,t:applicationName=WebServerExtension,t:computerName=elc.dom.local,t:connectID=1894373,Txt=Srvr: DstUserName1: user1@dom.local(dom.local\user1) (linux client)
58:30.751007-0,CONN,2,level=INFO,process=rphost,p:processName=erp_prod,OSThread=2188446,t:clientID=230358,t:applicationName=WebServerExtension,t:computerName=elc.dom.local,t:connectID=1894373,Txt=eAPSEContinue
58:30.766000-0,EXCP,2,level=WARNING,process=rphost,p:processName=erp_prod,OSThread=2188446,t:clientID=230358,t:applicationName=WebServerExtension,t:computerName=elc.dom.local,t:connectID=1894373,SessionID=95039,AppID=WebClient,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src/vrsbase/src/VResourceInfoBaseServerImpl.cpp(2766):
a01f465c-ed70-442e-ada5-847668d7a41c: Incorrect user or password
Incorrect user name or password'

кейтаб делал через:
ktpass /crypto AES256-SHA1 /princ HTTP/elc.dom.local@DOM.LOCAL /mapuser testspn -setpass /pass Pass1234 -ptype KRB5_NT_PRINCIPAL /out C:\temp\http1.keytab


/etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
 default_realm = DC1.DOM.LOCAL
 default_ccache_name = KEYRING:persistent:%{uid}
default_tgs_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
default_tkt_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
permitted_enctypes = rc4-hmac des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96

[realms]
DOM.LOCAL = {
  kdc = dc1.dom.local
 default_domain = DOM.LOCAL
 
 }

 DC1.DOM.LOCAL = {
  kdc = dc1.dom.local
  admin_server = dc1.dom.local
 }

[domain_realm]
 .DOM.LOCAL = DOM.LOCAL
 DOM.LOCAL = DOM.LOCAL
 dc1.dom.local = DC1.DOM.LOCAL
 .dc1.dom.local = DC1.DOM.LOCAL
Показать
biryukmikh; +1 Ответить
67. comatoz 24.02.26 16:02 Сейчас в теме
У меня ситуация аналогичная описанной в (61) - в технологическом журнале вижу строку с DstUserName1 с кредами пользователя полученными из браузера, но не вижу строку DstUserName2 - которая при авторизации тонким клиентом содержит имя пользователя ОС.
Техподдержка не может сказать почему в ТЖ есть упоминание кредов из браузера, в настройках 1С для пользователя прописан пользователь из ОС а аутентификация не проходит.

Кто решил подобную проблему - поделитесь решением.
68. valekz 25.02.26 16:58 Сейчас в теме
Не нашел решения, поэтому настроил через keycloak - работает.
69. biryukmikh 29 25.02.26 20:14 Сейчас в теме
(68) Стоит признать, что есть что дополнить в статье.. В любом случае спасибо что поделился процессом и проблемами, которые возникли.
70. user600284_selector 26.02.26 18:17 Сейчас в теме
Всё настроил. В самом апаче аутентификация работает.
Теперь при входе в 1С, в журнале регистрации вижу попытку входа пользователя 33. Это uid пользователя www-data, под которым запускается apache2. А в техжурнале такие строки

43:48.085003-1,DBV8DBEng,0,level=DEBUG,process=apache2,OSThread=268653,DBMS=DBV8DBEng,DataBase=fbase,Trans=0,Sql="SEL ECT TOP 2147483647 ID, Name, Descr, OSName, Changed, RolesID, Show, Data, EAuth, AdmRole, UsSprH, Email
FR OM v8users
WHERE OSName = N'\\\33' AND ID <> 0x952A5019EAE6A1F74023E7966E3EE1DE
ORDER BY OSName",NParams=0,Rows=0
43:48.086000-0,EXCP,0,level=WARNING,process=apache2,OSThread=268653,Exception=a01f465c-ed70-442e-ada5-847668d7a41c,Descr='src/vrsbase/src/VResourceInfoBaseServerImpl.cpp(2781):
a01f465c-ed70-442e-ada5-847668d7a41c: Неверно указан пользователь или пароль
Неправильное имя или пароль пользователя'

Не пойму где и что не доделал? почему апач передаёт в 1С свой uid, а не логин пользователя?
71. biryukmikh 29 26.02.26 23:14 Сейчас в теме
(70) Очень похоже на то, что что-то с модулем от 1С под Apache не то или keytab
keytab должен быть выдан на AD учетку веба, причем у нее должно быть настроено делегирование, чтобы она могла от имени AD учетки СП 1С обращаться СП 1С.
У вас в apache2.conf в публикации стоит модуль нужной версии?
Публиковали webinst нужной версии с -apache24?
Возможно ли посмотреть на логи apache kerberos trace?
Заранее спасибо
72. user600284_selector 27.02.26 07:41 Сейчас в теме
(71) С модулем вроде всё в порядке (на картинке). 1С всё таки запускается, но со своей авторизацией, не с доменной.
Делегирование настроено (на картинке)
керберос трэйс в файле
Прикрепленные файлы:
krb5_apache.log
73. biryukmikh 29 27.02.26 11:18 Сейчас в теме
(72) Да, по модулю все корректно вы используете 1С:Платформу на СП 1С тоже версии 8.3.27.1989, а apache2 который крутится сейчас версии 2.4.*
По логам тоже не вижу замечаний
По настройке AD вижу в чем дело. Постараюсь вечером сравнить с моим окружением и вам пример прислать.
74. biryukmikh 29 27.02.26 18:03 Сейчас в теме
(72) Приведите свои настройки ActiveDirectory к следующему виду как на картинках.
Требуется, чтобы в делегировании Kerberos сервисной учетки веба была указана служба сервисной учетки сервера приложений 1С.
Таким образом, сервисная учетка веба сможет от имени сервисной учетной записи сервера приложений 1С получать билеты Kerberos.
Настройка «Доверять этому пользователю делегирование указанных служб» (ограниченное делегирование Kerberos) в Active Directory позволяет учетной записи (пользователя или службы) получать билеты Kerberos от имени пользователя для доступа к конкретным серверным службам (SPN).
https://learn.microsoft.com/ru-ru/entra/identity/domain-services/deploy-kcd#kerberos-constrained-delegation-overview
Прикрепленные файлы:
75. comatoz 03.04.26 12:09 Сейчас в теме
Для случая когда:
- веб-сервер на linux
- сервер приложений на Windows
- в технологическом журнале видна учетная запись пользователя, которая прилетает с веб-сервера
- аутентификация не работает - выдает запрос на логин/пароль

Нигде не нашел, дошел путем изысканий.
Найден корень проблемы, а именно:
- отсутствие SPN записи для УЗ от которой работает сервер приложения на Windows, причем значение SPN записи любое, оно нигде не используется при таком сценарии, оно просто должно быть.

Проблема видится в 1С - аутентификация не отрабатывает, если запись SPN для УЗ от которой работает сервер приложений 1С отсутствует. Если запись SPN есть (значение записи неважно и нигде не используется) - аутентификация работает.
biryukmikh; +1 Ответить
76. biryukmikh 29 03.04.26 14:36 Сейчас в теме
(75) Спасибо, что поделился. С пятницей
77. featattach 21.04.26 10:48 Сейчас в теме
Подскажите в каком направлении дальше разбираться. Настроил AD (home.ad) Windows Serv 2019, 1С+Postgres+Apache2, есть два хоста windows 11 (пользователь win11) и linuxmint (пользователь linuxmint) оба в домене,доменная авторизация на тонком клиенте работает корректно и без сбоев, а вот авторизация в браузере срабатывает почему-то со второго раза, то есть к примеру если перезагрузить 1с сервер, или же службу systemctl restart srv1cv8-8.3.27.1688@default.service, то при попытке войти сперва будет в браузере окно авторизации 1с, но после нажатия F5, тебя уже пустит под доменной учеткой. Так происходит на обоих хостах, вот лог апача на неудачную попытку входа
лог апач2

cat /etc/apache2/sites-available/1c-ssl.conf

собирал технологические логи от 1с приложил в файле, но я там ничего не увидел разве что при неуспешной авторизации можно наблюдать такие строки
10:04.037004-0,EXCP,3,level=WARNING,process=rphost,p:processName=test,OSThread=10542,t:clientID=18,t:applicationName=WebServerExtension,t:computerName=1cappdb.home.ad,t:connectID=3,SessionID=133,AppID=WebClient,Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src/vrsbase/src/VResourceInfoBaseImpl.cpp(1228):
580392e6-ba49-4280-ac67-fcd6f2180121: Неверно указан пользователь или пароль
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:'
10:04.038000-995,SCALL,3,level=INFO,process=rphost,p:processName=test,OSThread=10542,t:clientID=18,t:applicationName=WebServerExtension,t:computerName=1cappdb.home.ad,t:connectID=3,SessionID=133,AppID=WebClient,ClientID=8,Interface=90b77326-8e4a-4195-b980-d758277d1f03,IName=ISeanceContextStorage,Method=8,CallID=70193330,MName=detachSeanceIB,DstClientID=39
10:04.038001-0,VRSRESPONSE,3,level=INFO,process=rphost,p:processName=test,OSThread=10542,t:clientID=18,t:applicationName=WebServerExtension,t:computerName=1cappdb.home.ad,t:connectID=3,Status=402,Phrase=Payment required,Headers='Content-Length: 972
Content-Type: application/json; charset=utf-8',Body=972
Прикрепленные файлы:
26042017.log
biryukmikh; +1 Ответить
78. biryukmikh 29 27.04.26 09:37 Сейчас в теме
(77)
доменная авторизация на тонком клиенте работает корректно и без сбое

Доброго дня!
Спасибо, что подробно описал проблему.
Звучит странно, что обновление страницы F5 позволяет пройти аутентификацию ОС и авторизует.
авторизация в браузере срабатывает почему-то со второго раза, то есть к примеру если перезагрузить 1с сервер, или же службу systemctl restart srv1cv8-8.3.27.1688@default.service, то при попытке войти сперва будет в браузере окно авторизации 1с, но после нажатия F5, тебя уже пустит под доменной учеткой

Все сервера - СП 1С и веб-сервер в одном домене и на разных машинах
Настройки в apache2.conf корректны на первый взгляд ничего не нашел
На данный момент могу предложить следующее:
- Какой браузер использовали (возможно требуется настроить): Для браузера клиента требуется выполнять настройку согласно инструкции (Глава 9. Настройка веб-браузеров для работы в веб-клиенте (1c.ru))
- Попробуйте поставить GssapiLocalName On, чтобы 1С получал имя пользователя как ожидает
Преобразует имя linuxmint@HOME.AD в короткое linuxmint
Скрытый текст

- Попробуйте закомментировать
GssapiCredStore keytab:/etc/apache2/HTTP.keytab
#GssapiCredStore client_keytab:/opt/1cv8/x86_64/usr1cv8.keytab
#GssapiCredStore ccache:FILE:/var/krb/ktk123
#GssapiDelegCcachePerms mode:0600 gid:www-data
- Проверьте права пользователя и группы на папкуls -ld /var/cred/

Жду также помощи от коллег и сообщества, если есть идеи
Надеюсь, что получиться найти решение
Возможно дело в версии СП 1С, так как у меня использовалась 8.3.24.1624 и 8.3.27.1608, а у тебя 8.3.27.1688, то есть стоит поискать на bugboard.1c.ru или обратиться в support.1c.ru может кто сталкивался
Если получилось решить, то отпиши, если не будет возможность, так как кейс интересный
Для отправки сообщения требуется регистрация/авторизация