Публикация баз данных 1С:Предприятие на веб-сервере Apache в Windows c защитой SSL и аутентификацией по паролю

Публикация баз данных 1С:Предприятие на веб-сервере Apache в Windows c защитой SSL и аутентификацией по паролю


Для публикации информационных баз 1С:Предприятие на платформе Windows часто используют альтернативу штатному IIS - веб сервер Apache, который, несмотря на ряд ограничений, тоже неплохо подходит для небольших и средних установок. Одним из очевидных преимуществ Apache является его кроссплатформенность, т.е. если вы умеете настраивать данный веб-сервер на одной платформе, то без особого труда сделаете это и на другой. В данной публикации мы расскажем вам как установить и настроить Apache для публикации баз с SSL-защитой на базе сертификатов Let's Encrypt и дополнительной аутентификацией по паролю.


Установка сервера Apache для работы с платформой 1С:Предприятие в Windows

В настоящее время официальной бинарной сборки Apache для Windows не существует, взамен предлагается скачать одну из популярных сборок. В нашем случае мы будем использовать сборку от Apache Haus, вы можете использовать и другие сборки, но некоторые настройки в них могут оказаться отличными от приведенных в статье.

При скачивании будьте внимательны, вам необходимо скачать сборку той же разрядности, что и разрядность используемой вами платформы 1С:Предприятие, на сегодня особых причин использовать 32-разрядные системы нет, поэтому отдаем предпочтение 64-разрядной платформы.

Сборка распространяется в виде архива, поэтому просто распакуйте ее в корень диска C:, чтобы пусть к папке с веб-сервером получился C:\Apache24. Для установки сервера используйте команду (требуются права администратора):

C:\Apache24\bin\httpd.exe -k install

После чего вам потребуется разрешить доступ к веб-серверу по портам 80 и 443 в брандмауэре Windows, это можно сделать как в графической оснастке:

1cv8-Apache-SSL-Basic-001.png

Так и при помощи PowerShell:

New-NetFirewallRule -DisplayName "Apache 2.4" -Direction Inbound -Action Allow -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 80,443

После чего следует с другого узла сети набрать в адресной строке браузера IP-адрес или доменное имя вашего сервера и убедиться, что порты открыты и вы видите стандартную заглушку Apache.

Следующим шагом установим платформу 1С:Предприятие, вам потребуются только компоненты 1С:Предприятие 8 и Модули расширения веб-сервера:

1cv8-Apache-SSL-Basic-002.png

Отдельного лицензирования, за исключением некоторых случаев, данная установка не требует.

Публикация информационной базы 1С:Предприятие

Существует два способа публикации информационных баз, первый - более простой, при помощи Конфигуратора, но для его запуска вам потребуется клиентская лицензия 1С:Предпритяие. Какой-либо разницы между публикацией серверной или файловой базы на сервере Apache нет.

Для публикации загрузите нужную информационную базу в режиме Конфигуратора и перейдите в Администрирование - Публикация на веб-сервере. В поле Сервер - укажите Apache 2.4, поле Имя - это виртуальная директория публикации, которая потом станет частью URL, Каталог - физическое расположение публикации, которое должно находится внутри папки C:\Apache24\htdocs:

1cv8-Apache-SSL-Basic-003.png

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

После публикации будет предложено перезапустить веб-сервер, соглашаемся с этим предложением.

Альтернативой конфигуратору служит утилита webinst, которая располагается в директории bin установленной версии платформы, ее использование не требует наличия клиентской лицензии, для клиент-серверной базы команда публикации будет выглядеть так:

webinst -publish -apache24 -wsdir hrm-1 -dir "C:\Apache24\htdocs\hrm-1" -connstr "Srvr=SRV-1C;Ref=HRM-1;" -confpath "C:\Apache24\conf\httpd.conf"

Разберем ключи:

  • publish - публикация базы
  • apache24 - использование веб-сервера Apache 2.4
  • wsdir - виртуальный каталог, аналог поля Имя в конфигураторе, по сути, представляет имя публикации
  • dir - каталог с физическим расположением публикации, должен находится в C:\Apache24\htdocs
  • connstr - строка подключения к базе, в нашем случае это сервер SRV-1C и база HRM-1
  • confpath - путь к конфигурационному файлу Apache

Для файловой базы изменится только строка подключения к базе:

webinst -publish -apache24 -wsdir hrm-2 -dir "C:\Apache24\htdocs\hrm-2" -connstr "File=""C:\1C_Bases\HRM-2"";" -confpath "C:\Apache24\conf\httpd.conf"

После публикации перезапускаем веб-сервер командой:

C:\Apache24\bin\httpd.exe -k restart

Публикация файловой базы имеет некоторые особенности: при работе через браузер вам понадобиться установить на узел с веб-сервером количество клиентских лицензий по количеству сеансов. После завершения сеанса в браузере он продолжает сохраняться на сервере в течении 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).

1cv8-Apache-SSL-Basic-004.png

Далее нажимаем Enter (так как по умолчанию подсвечен нужный нам пункт 2) и вводим имя домена или список доменов, разделенных запятой.

1cv8-Apache-SSL-Basic-005.png

Затем еще раз нажимаем 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.

1cv8-Apache-SSL-Basic-006.png

Будет предложено установить пароль на закрытый ключ, выбираем 1: None. Затем вы повторно вернетесь в вышестоящее меню, но на этот раз действие по умолчанию 5: No (additional) store steps, поэтому просто нажимаем Enter.

Следующий пункт спрашивает, какие действия нужно выполнить по получению сертификата. Нам нужно обязательно перезапустить веб-сервер, поэтому указываем 2: Start external script or program. После чего у нас есть два пути: сразу указать команду на перезапуск в настройках или запускать пакетный файл с той же самой командой.

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

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

 C:\Apache24\bin\httpd.exe -k restart

И сохраним его под именем: C:\Apache24\letsencrypt\Scripts\ApacheRestart.bat и укажем это значение в поле File:, если вы решили обойтись тут без скрипта, то укажите путь к исполняемому файлу Apache: C:\Apache24\bin\httpd.exe, а затем в поле Parameters: укажите -k restart.

1cv8-Apache-SSL-Basic-007.png

Потом вы снова попадете в меню вышестоящего уровня, выходим из него через 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 tech.host31.ru
 SSLCertificateFile "${SRVROOT}/conf/ssl/tech.host31.ru-crt.pem"
 SSLCertificateKeyFile "${SRVROOT}/conf/ssl/tech.host31.ru-key.pem"

В опции ServerName указываете полное доменное имя сервера, ниже пути к файлам сертификата и закрытого ключа, обратите внимание, что они указываются от корневой папки веб-сервера, т.е. относительно C:\Apache24.

Сохраняем содержимое файла и выходим из него, после чего в основном конфигурационном файле C:\Apache24\conf\httpd.conf находим секцию с подключенными модулями и убеждаемся, что все указанные ниже строки раскомментированы:

LoadModule headers_module modules/mod_headers.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so

Затем сразу после строки:

Listen 80

Добавим:

RewriteEngine On
 RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

Что обеспечит перенаправление всех HTTP запросов, кроме запросов на продление сертификата, на HTTPS порт.

Проверяем конфигурацию и, при отсутствии ошибок, перезапускаем веб-сервер:

C:\Apache24\bin\httpd.exe -t
C:\Apache24\bin\httpd.exe -k restart

Открываем нашу публикацию и убеждаемся, что она автоматически перенаправляется на защищенную версию. Как видим, в нашем случае используется протокол TLS v1.3, совершенная прямая секретность на базе эллиптической кривой Curve25519 и шифр ChaCha20-Poly1305.

1cv8-Apache-SSL-Basic-008.png


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

Настройка дополнительной аутентификации по паролю

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

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

Веб-сервер Apache использует собственную базу пользователей, поэтому займемся ее созданием. Первого пользователя заводим командой:

htpasswd.exe -c -B C:\Apache24\conf\.htpasswd user_1c

Последующих:

htpasswd.exe -B C:\Apache24\conf\.htpasswd glbuch

Ключ  предписывает создать указанный файл или перезаписать, если он существует, ключ -B указывает использовать для шифрования пароля более надежный, чем MD5 алгоритм bcrypt. После выполнения команды будет интерактивно запрошен пароль, он должен соответствовать всем требованиям сложности, в противном случае теряется весь смысл всей этой затеи.

Теперь создадим в директории с публикацией, в нашем случае C:\Apache24\htdocs\hrm-1 файл .htaccess со следующим содержимым:

AuthName "1C user only"
AuthType Basic
Require valid-user
AuthUserFile C:\Apache24\conf\.htpasswd

Первая строка задает наименование области безопасности, можете вписать туда все что угодно, вторая включает Basic-аутентификацию. Затем указывается политика аутентификации и путь к файлу паролей, valid-user обозначает что доступ получит любой аутентифицированный пользователь. Если нужно указать конкретные учетные записи, то строку нужно изменить следующим образом:

Require user user_1c glbuch

Сохраняем файл, перезапуск веб-сервера при этом не требуется.

Проверяем, если все сделано правильно - будет запрошен логин и пароль.

1cv8-Apache-SSL-Basic-009.png

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

1cv8-Apache-SSL-Basic-010.png


Запомнить пароль там не представляется возможным, и это может вызывать недовольство пользователей, поэтому укажем в свойствах базы дополнительные параметры запуска:

/WSN user_1c /WSP Pa$$w0rd_1

Где ключ /WSN определяет пользователя веб-сервера, а ключ /WSP - пароль.

1cv8-IIS-SSL-Basic-011.png

Теперь платформа будет проходить первый этап аутентификации автоматически.

Как видим, настроить безопасную публикацию информационных баз 1С:Предприятие на веб-сервере Apache в Windows достаточно не сложно. А какой именно из веб-серверов выбрать уже решать вам.

источник


Report Page