Записки IT специалиста
Публикация баз данных 1С:Предприятие на веб-сервере Apache в Windows c защитой SSL и аутентификацией по паролю
- Автор: Уваров А.С.
- 21.05.2023
Для публикации информационных баз 1С:Предприятие на платформе Windows часто используют альтернативу штатному IIS — веб сервер Apache, который, несмотря на ряд ограничений, тоже неплохо подходит для небольших и средних установок. Одним из очевидных преимуществ Apache является его кроссплатформенность, т.е. если вы умеете настраивать данный веб-сервер на одной платформе, то без особого труда сделаете это и на другой. В данной публикации мы расскажем вам как установить и настроить Apache для публикации баз с SSL-защитой на базе сертификатов Let’s Encrypt и дополнительной аутентификацией по паролю.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Установка сервера Apache для работы с платформой 1С:Предприятие в Windows
В настоящее время официальной бинарной сборки Apache для Windows не существует, взамен предлагается скачать одну из популярных сборок. В нашем случае мы будем использовать сборку от Apache Haus, вы можете использовать и другие сборки, но некоторые настройки в них могут оказаться отличными от приведенных в статье.
При скачивании будьте внимательны, вам необходимо скачать сборку той же разрядности, что и разрядность используемой вами платформы 1С:Предприятие, на сегодня особых причин использовать 32-разрядные системы нет, поэтому отдаем предпочтение 64-разрядной платформы.
Сборка распространяется в виде архива, поэтому просто распакуйте ее в корень диска C:, чтобы пусть к папке с веб-сервером получился C:\Apache24. Для установки сервера используйте команду (требуются права администратора):
После чего вам потребуется разрешить доступ к веб-серверу по портам 80 и 443 в брандмауэре Windows, это можно сделать как в графической оснастке:
Так и при помощи PowerShell:
После чего следует с другого узла сети набрать в адресной строке браузера IP-адрес или доменное имя вашего сервера и убедиться, что порты открыты и вы видите стандартную заглушку Apache.
Следующим шагом установим платформу 1С:Предприятие, вам потребуются только компоненты 1С:Предприятие 8 и Модули расширения веб-сервера:
Отдельного лицензирования, за исключением некоторых случаев, данная установка не требует.
Публикация информационной базы 1С:Предприятие
Существует два способа публикации информационных баз, первый — более простой, при помощи Конфигуратора, но для его запуска вам потребуется клиентская лицензия 1С:Предпритяие. Какой-либо разницы между публикацией серверной или файловой базы на сервере Apache нет.
Для публикации загрузите нужную информационную базу в режиме Конфигуратора и перейдите в Администрирование — Публикация на веб-сервере. В поле Сервер — укажите Apache 2.4, поле Имя — это виртуальная директория публикации, которая потом станет частью URL, Каталог — физическое расположение публикации, которое должно находится внутри папки C:\Apache24\htdocs:
Также имейте ввиду, что для обычной работы с базой достаточно только оставить Публиковать доступ для клиентских приложений, остальное следует отключить, это упростит публикацию и уменьшит возможную поверхность атаки на нее. Принцип прост: если сервис не нужен — не публикуем.
После публикации будет предложено перезапустить веб-сервер, соглашаемся с этим предложением.
Альтернативой конфигуратору служит утилита webinst, которая располагается в директории bin установленной версии платформы, ее использование не требует наличия клиентской лицензии, для клиент-серверной базы команда публикации будет выглядеть так:
- publish — публикация базы
- apache24 — использование веб-сервера Apache 2.4
- wsdir — виртуальный каталог, аналог поля Имя в конфигураторе, по сути, представляет имя публикации
- dir — каталог с физическим расположением публикации, должен находится в C:\Apache24\htdocs
- connstr — строка подключения к базе, в нашем случае это сервер SRV-1C и база HRM-1
- confpath — путь к конфигурационному файлу Apache
Для файловой базы изменится только строка подключения к базе:
После публикации перезапускаем веб-сервер командой:
Публикация файловой базы имеет некоторые особенности: при работе через браузер вам понадобиться установить на узел с веб-сервером количество клиентских лицензий по количеству сеансов. После завершения сеанса в браузере он продолжает сохраняться на сервере в течении 20 минут на случай повторного подключения, все это время за ним сохраняется выданная лицензия.
Получение сертификата Let’s Encrypt и настройка защищенного соединения
Пожалуй, самая сложная часть нашей настройки, потому что при получении сертификата вам нужно быть предельно внимательным и правильно указать все параметры, в противном случае сертификат получить не удастся и все придется начинать заново. Для получения и обновления сертификатов мы будем использовать Windows ACME Simple (WACS), откуда нам потребуется скачать архив win-acme.vX.X.X.XXXX.x64.trimmed.zip. Распакуем его в С:\Apache24\letsencrypt.
Но не будем спешить получать сертификат, а сначала выполним некоторые подготовительные действия. Для работы с Let’s Encrypt нам понадобится доменное имя, которое должно указывать на внешний IP-адрес вашего веб-сервера. В нашем примере мы будем использовать служебный поддомен tech.host31.ru. Также помните, что изменения в системе DNS распространяются не мгновенно, а в течении некоторого времени, которое зависит от значения TTL-записи, поэтому вносите изменения в DNS заранее.
Убедившись, что ваша DNS-запись работает можно переходить к получению сертификата. Перейдем в С:\Apache24\letsencrypt и запустим и запустим wasc.exe от имени администратора. Это консольная текстовая утилита, работающая в диалоговом режиме. На каждом из этапов вам нужно либо указать выбранный пункт меню, либо ввести свое значение. Действие по умолчанию подсвечено цветным выделением и можно просто нажать Enter. Работу с утилитой начнем с пункта M: Create certificate (full options).
Далее нажимаем Enter (так как по умолчанию подсвечен нужный нам пункт 2) и вводим имя домена или список доменов, разделенных запятой.
Затем еще раз нажимаем Enter, следующий пункт меню спрашивает, как вы хотите получить сертификаты если у вас указано несколько доменов. В подавляющем большинстве случаев можно выбрать пункт по умолчанию 4: Single certificate, либо получить отдельные сертификаты на каждый домен или поддомен.
Следующим шагом выбираем 1: [http] Save verification files on (network) path и указываем корневую директорию веб-сервера C:\Apache24\htdocs.
На вопрос Copy default web.config before validation? (y/n*) отвечаем нет, это также действие по умолчанию (обозначено звездочкой, поэтому можно просто нажать Enter.
Потом выбираем 2: RSA key и 2: PEM encoded files (Apache, nginx, etc.), после чего указываем директорию для хранения сертификатов C:\Apache24\conf\ssl.
Будет предложено установить пароль на закрытый ключ, выбираем 1: None. Затем вы повторно вернетесь в вышестоящее меню, но на этот раз действие по умолчанию 5: No (additional) store steps, поэтому просто нажимаем Enter.
Следующий пункт спрашивает, какие действия нужно выполнить по получению сертификата. Нам нужно обязательно перезапустить веб-сервер, поэтому указываем 2: Start external script or program. После чего у нас есть два пути: сразу указать команду на перезапуск в настройках или запускать пакетный файл с той же самой командой.
Делая выбор нужно понимать, что если здесь у вас кроме веб-публикации не будет больше никаких служб, то можно указать команду сразу, иначе лучше использовать пакетный файл, так как это более гибко.
Выбрав вариант с пакетным файлом, создадим текстовый файл со следующим содержимым:
И сохраним его под именем: C:\Apache24\letsencrypt\Scripts\ApacheRestart.bat и укажем это значение в поле File:, если вы решили обойтись тут без скрипта, то укажите путь к исполняемому файлу Apache: C:\Apache24\bin\httpd.exe, а затем в поле Parameters: укажите -k restart.
Потом вы снова попадете в меню вышестоящего уровня, выходим из него через Enter и приступаем непосредственно к получению сертификата, после чего все нужные ключи и сертификаты окажутся в C:\Apache24\conf\ssl. Задание на продление будет добавлено в планировщик автоматически. В этом процессе не забываем указать действительный адрес почты, куда будут приходить сообщения при возникновении проблем.
Теперь перейдем к настройкам HTTPS на веб-сервере Apache, сборка от Apache Haus имеет собственные настройки, которые подключены из файла C:\Apache24\conf\extra\httpd-ahssl.conf, откроем его на редактирование.
Прежде всего обратим внимание на секцию <IfDefine ENABLE_TLS13>, так как в основном конфиге переменная установлена как Истина, то применяться будет именно этот блок настроек. Здесь указаны разрешенные протоколы и используемые шифры, настройки по умолчанию достаточно актуальны и можно использовать их без изменений. Либо установить собственные настройки, для их генерации можете использовать сайт moz://a SSL.
Затем спускаемся к секции <VirtualHost _default_:443> и меняем в ней следующие параметры:
В опции ServerName указываете полное доменное имя сервера, ниже пути к файлам сертификата и закрытого ключа, обратите внимание, что они указываются от корневой папки веб-сервера, т.е. относительно C:\Apache24.
Сохраняем содержимое файла и выходим из него, после чего в основном конфигурационном файле C:\Apache24\conf\httpd.conf находим секцию с подключенными модулями и убеждаемся, что все указанные ниже строки раскомментированы:
Затем сразу после строки:
Что обеспечит перенаправление всех HTTP запросов, кроме запросов на продление сертификата, на HTTPS порт.
Проверяем конфигурацию и, при отсутствии ошибок, перезапускаем веб-сервер:
Открываем нашу публикацию и убеждаемся, что она автоматически перенаправляется на защищенную версию. Как видим, в нашем случае используется протокол TLS v1.3, совершенная прямая секретность на базе эллиптической кривой Curve25519 и шифр ChaCha20-Poly1305.
В целом каких-либо сложностей при получении сертификата нет, но сам процесс достаточно длительный и требующий внимательного и кропотливого указания настроек. Но это процесс разовый, далее все будет работать автоматически.
Настройка дополнительной аутентификации по паролю
У нас нет основания сомневаться во встроенном механизме аутентификации 1С:Предприятия, во всяком случае в онлайн-сервисах дополнительной аутентификации не предусмотрено, но есть слабое место — пользователи. Во многих базах могут использоваться простые пароли или не использоваться вообще, часть таких паролей могут использоваться скриптами и средствами автоматизации, поэтому взять и установить сразу всем сложные пароли будет не так-то просто.
Ситуация усугубляется, если администрирование 1С выполняют другие сотрудники, они вполне могут, пойдя на поводу пользователей снова установить им слабые пароли, что сильно снижает безопасность собственного механизма аутентификации. Поэтому мы пойдем другим путем и установим дополнительную аутентификацию на уровне веб-сервера, тут уже точно без нас никто пароль не изменит. Основная его цель — оградить собственный механизм аутентификации 1С от доступа всех желающих, которым достаточно будет просто узнать ссылку.
Веб-сервер Apache использует собственную базу пользователей, поэтому займемся ее созданием. Первого пользователя заводим командой:
Ключ -с предписывает создать указанный файл или перезаписать, если он существует, ключ -B указывает использовать для шифрования пароля более надежный, чем MD5 алгоритм bcrypt. После выполнения команды будет интерактивно запрошен пароль, он должен соответствовать всем требованиям сложности, в противном случае теряется весь смысл всей этой затеи.
Теперь создадим в директории с публикацией, в нашем случае C:\Apache24\htdocs\hrm-1 файл .htaccess со следующим содержимым:
Первая строка задает наименование области безопасности, можете вписать туда все что угодно, вторая включает Basic-аутентификацию. Затем указывается политика аутентификации и путь к файлу паролей, valid-user обозначает что доступ получит любой аутентифицированный пользователь. Если нужно указать конкретные учетные записи, то строку нужно изменить следующим образом:
Сохраняем файл, перезапуск веб-сервера при этом не требуется.
Проверяем, если все сделано правильно — будет запрошен логин и пароль.
При работе через браузер достаточно запомнить пароль, а при работе через тонкий клиент пользователю придется вводить учетные данные два раза, первый раз аутентифицироваться на веб-сервере, а только уже потом средствами 1С.
Запомнить пароль там не представляется возможным, и это может вызывать недовольство пользователей, поэтому укажем в свойствах базы дополнительные параметры запуска:
Где ключ /WSN определяет пользователя веб-сервера, а ключ /WSP — пароль.
Теперь платформа будет проходить первый этап аутентификации автоматически.
Как видим, настроить безопасную публикацию информационных баз 1С:Предприятие на веб-сервере Apache в Windows достаточно не сложно. А какой именно из веб-серверов выбрать уже решать вам.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Как установить сертификат на сервер 1с
Если установлена серверная 1С, КриптоПро и сертификат нужно настраивать на сервере под учетной записью того пользователя, который будет работать с модулем.
Установить личный сертификат можно одним из способов:
Как установить сертификат на Mac, см. в статье Установка уже выпущенного сертификата на MacOS.
По кнопке «Просмотреть сертификаты в контейнере»
Чтобы установить сертификат с помощью КриптоПро CSP через «Просмотреть сертификаты в контейнере», выполните следующее:
- Выберите «Пуск» → «Панель управления» → «КриптоПро CSP» или укажите в строке поиска на панели Windows «КриптоПро CSP» и нажмите на него.
- Выберите вкладку «Сервис» и нажмите на кнопку «Просмотреть сертификаты в контейнере».
Если появляется сообщение «В контейнере закрытого ключа отсутствует открытый ключ шифрования», установите сертификат через меню «Установить личный сертификат».
Если кнопка «Установить» отсутствует, выполните следующее:
-
В окне «Сертификат для просмотра» нажмите на кнопку «Свойства» и в открывшемся окне выберите «Установить сертификат».
По кнопке «Установить личный сертификат»
Для установки понадобится файл сертификата (файл с расширением.cer). Файл сертификата можно экспортировать из хранилища «Личные». Если в хранилище нет нужного сертификата, то обратитесь в техническую поддержку по адресу help@skbkontur.ru. В письме укажите ИНН и КПП организации и суть проблемы.
Чтобы установить сертификат:
- Выберите «Пуск» → «Панель управления» → «КриптоПро CSP» или укажите в строке поиска на панели Windows «КриптоПро CSP» и нажмите на него.
- Выберите вкладку «Сервис» и нажмите на кнопку «Установить личный сертификат».
Установка ЭЦП на сервер с возможностью подписания менеджерами документов на клиентах
Подскажите, реально ли реализовать такую схему подписания документов:
Установить подпись на сервер — и дать всем менеджерам на клиентских ПК доступ на подписание документов ТОЛЬКО в 1с, без доступа к подписанию на своих ПК других документов и в сторонних сервисах и сайтах?
Если это реально, то как можно реализовать подобное, подскажите, пожалуйста? Либо ЭЦП делать ограниченную только для 1С? какие варианты?
Bigbro , аргумент такой, что если бы так можно было бы, что смысла в ЭЦП отсутствовала бы, Т.К. будет иметь совсем полный доступ. что противоречит сути. Как вариант предложили установить на вервер, по РДП подключаться и подписывать, НО. В таком случае, с сервера ( по РДП) будет возможность подписать все, что угодно!! естественно, такой вариант не рассматривается даже.
vde69 , звучит очень просто, но сомневаюсь, что будет так же на деле..)) спасибо большое, попробую передать админам..
(8)
Вот это предложение не понял "Т.К. будет иметь совсем полный доступ. что противоречит сути."
Если они имеют ввиду что по "сути нельзя" — то да — по сути это не правильно, должен подписывать человек, а не сервер, но сделать так можно.
(16) Имею но введу. в смысле у вас слабое понимание что такое ЭП, криптопровайдер, сертификат УКЭП и прочее
Да у вас вполне понятная хотелка
Только начните с того что любая УКЭП она выдается на конкретное ФИО!
Короче если у вас много сотрудников подписывают одной подписью генерального директора — это профанация
У каждого сотрудника должна быть по закону своя собственная и тут ваша хотелка (подписи на сервере) пропадает же да?
(0) Дайте админам ссылку на 1С ИТС где расписано как настроить ЭДО
1.Ставишь криптопровайдер
2.Устанавливаешь сертификаты
3. настраиваешь какими документами кто будет пользоваться и что подписывать
(20) ну не скажи
у нас электронные больничные
более 100 врачей с ЭЦП
более 10 мест "выдачи" больничных (там где документ должен подписываться подписью руководителя)
врачи "бегают" по рабочим местам
пришли к тому, что все подписи врачей — на сервере
подпись "руководителя" — только на ПК в местах выдачи (возможно связано с тем, что не стали бороться с тем, что шифрование в конфигурации только на клиенте реализовано)
врачу не надо таскать с собой флешку, и нам не надо устанавливать сертификат врача на каждый новый для него комп
доступ к сертификату врача ограничен конфигурацией 1С — пользователи не имеют доступа к сертификату ни программно, ни физически
Garykom Спасибо за пояснение!)
В целом я понимаю логику и суть подписания.
Да, понимание программирования и устройства ПО и тд слабое, именно по этой причине и создана была эта тема
Насчет дел и разбирательств. а что мешает менеджеру так же прибежать к руководству (как делается эта сейчас у нас и у многих ввиду ввода маркировок и тд), взять яко бы на подписание ЭДО или еще чего-то.. и так же подписать ненужные документы?
Поэтому основной вопрос остается актуальным)
Но спасибо, что пояснили о негативных последствиях
(28) >что мешает менеджеру так же прибежать к руководству (как делается эта сейчас у нас и у многих ввиду ввода маркировок и тд), взять яко бы на подписание ЭДО или еще чего-то.. и так же подписать ненужные документы?
ЭП это замена собственноручной подписи
У вас могут менеджеры прибежать к руководству и "взять у него погонять его руку" чтобы подписать ненужные документы?
(38) И насрать что босс даже не в курсе, что подписал.
Жил был один менеджер по продажам. Пошел устраиваться на работу. Долго ли коротко ли резюме рассылал, а как-то пришел в одну контору на собеседование с генеральным директором. И шло у них собеседование шесть часов. Уже и директор взмок, и менеджер три раза воды просил. А все никак не могут договориться. Начинали с двухсот баксов в месяц — а уже за два с половиной килобакса спорят, и проценты, и бонусы, и какие-то еще там спортзалы, мобильные связи, обеды, подъемные, страховки, отпуск, командировочные, машину служебную, ноутбук, кучу всякого менеджер себе выбил. Сдался в итоге генеральный директор, все условия выполнил. Все, что менеджер просил — дал. Приступил менеджер к работе, и за первый месяц увеличил продажи втрое, потом вдесятеро, потом в сто раз, потом вообще все в конторе продал, включая мебель, канцтовары, секретаршу — мужикам в баню, базу данных клиентов — конкурентам, а самого шефа — налоговой.
Сертификат не установлен на сервере – ошибка в 1С
Еще одна шпаргалка по 1С. Тоже по проблеме с сертификатом. О подобное проблеме я уже писал. На этот раз ошибка была немного другая – “Сертификат не установлен на сервере”. Ниже я расскажу что предшествовало данной ошибке и как удалось разобраться в причинах.
Решение оказалось довольно простое, но я расскажу весь ход проверки корневой причины этой проблемы.
Окружение
Версия платформы: 1С:Предприятие 8.3 (8.3.22.1750).
Конфигурация 1С: Управление торговлей, редакция 11 (11.4.13.282) – серверная версия.
Операционная системы: Windows Server 2008 R2 Standard x64.
Как проявлялась ошибка
При попытке произвести обмен данными с МП ИС появлялось окно с запросом выбора сертификата:
Хотя нужный сертификат в личное хранилище пользователя я установил. Установка сертификата в личный контейнер пользователя, от имени которого выполняется операция, ничего не изменил. Генерировалось все тоже окно с запросом выбора сертификата.
Далле при попытке проверки сертификата я получал ошибку “Сертификат не установлен на сервере”.
Причина
Сначала я проверил настройки проверки сертификатов:
т.е. сертификаты проверяются на сервере. Тогда нужно проверить от какой УЗ работает служба агента сервера 1С. Именно от этой УЗ и осуществляется проверка сертификата.
Как видно из скриншота выше – служба работает от локального пользователя USR1CV8.
Проверим личное хранилище сертификатов этого пользователя:
Пусто… вот и причина ошибки “Сертификат не установлен на сервере”. Скорее всего это связано с тем, что незадолго до появления этой ошибки было выполнено обновление версии платформы 1С. Не исключено, что в процессе выполнения установки новой версии платформы мастер установки “затер” прежние настройки системного пользователя, от имени которого работала служба сервера 1С. Это только моя теория. Подтвердить или опровергнуть точно не могу, но каких-то других операций на сервере не производилось.
Решение
Решение крайне простое:
1. Я зашел на сервер под УЗ, от имени которой запущена служба сервера 1С. В моем случае это был локальный пользователь.
3. Повторная проверка сертификата завершается успешно.
Проблем с обменом с ИС МП после установки сертификата тоже не наблюдалось.