1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let’s encrypt











Всем Доброго времени! Предлагаю Вам небольшую базовую инструкцию, где я опишу, как быстро перевести опубликованную в веб базу 1С на защищенное https соединение, используя стандартный IIS сервер и бесплатный сертификат SSL от Let’s encrypt.

У меня возникла необходимость перевести опубликованную базу в веб 1с на защищенной соединение https.

Для данного примера я работал с Платформой 1С 8.3.13.1865, конфигурацией Розница 2.2.12. Стандартный IIS сервер 8.5.

Решение этой задачи я разобью на 2 этапа: подготовительный и основной.

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

 

Итак, подготовительный этап:

 

1.1. Для начала мы должны привязать доменное имя к вашему ip адресу:

Без доменного имени, привязать SSL сертификат НЕЛЬЗЯ, поэтому, заходим на регистратора доменных имен и покупаем любое свободное имя.

Далее, заходим в "Управление доменной зоной" в личном кабинете регистратора доменного имени и делаем 2 записи типа А (для www и без — см.рис), куда прописываем ваш внешний ip (опубликованная база должна быть доступна по этому ip заранее).

 

 

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

 

 

1.2. Пробросим порт 443 на роутере:

Следующим шагом, заходим на ваш роутер и пробрасываем порт 443 для https. Это должно быть выглядеть примерно вот так:

 

 

на рисунке у меня проброшены следующие порты:

80 — незащищенное интернет соединение http

3340 — соединение к удаленному рабочему столу (к описанию отношения не имеет, но оставлю для пояснения)

443 — защищенное интернет соединение https

 

1.3. Настройка IIS

Сделаем привязку имени узла к основному сайту в IIS. Для этого, заходим в Диспетчер IIS (см. рис):

Выбираем в раскрывающемся списке Default Web Site и прописываем для него Привязки. В имя узла пропишем наше доменное имя.

 

 

На этом подготовительный этап закончен, переходим к основному:

 

2.1. Создание и запись сертификата Let’s encrypt.

Я установил бесплатный сертификат от Let’s encrypt https://letsencrypt.org/ сроком на 3 месяца со времени его создания.

Для этого, я воспользовался свободной программкой letsencrypt-win-simple.V1.9.3.zip (приложена к этой инструкции).

Запускаю программу от имени администратора и делаю следующие действия:

 

Вводим электронную почту.

 

На данный вопрос вводим "y".

 

Далее, программа находит DNS записи на сервере IIS. Выбираем нашу запись —  нажимаем "1".

На следующий (последний) вопрос вводим "N"

Сертификат создан и записан в IIS.

 

2.2. Проверяем установленный сертификат

Для этого открываем Диспетчер служб IIS и в разделе "Сертификаты сервера" смотрим наш сертификат.

 

 

Заходим на наше доменное имя по адресу https:// и убедимся, что оно доступно.

 

Теперь, наша база опубликована по доменному имени и работает по защищенному соединению.

Всем спасибо за прочтение, буду рад, если данный материал Вам поможет!

 

Ранее опубликованные материалы

Так же, прошу посмотреть мои предыдущие статьи:

Работа с механизмом отладки 1С. Базовые настройки

Методика независимой системы "Подписки на события"

Дополнительные расходы на основе перемещения запасов в УНФ (пошаговая разработка расширения конфигурации)

 

32 Comments

  1. vsesam80

    Полезная публикация. Я так понял что все серты Let’s encrypt будут приниматься Виндой как настоящие и не будут генерить ошибку как в случае с самоподписанными?

    Вот еще бы как бы с Апачем это сделать и прикрутить сертификаты к сервису no-ip

    Reply
  2. Xershi

    Я так понял если у нас белый статический ip, а домена нет, то ничего не выйдет?

    Тоже самое если я допустил развернул веб-сервер у себя в локальной сети, доменного имени нет, есть только имя ПК, тоже пшик или есть варианты?

    Reply
  3. user953800

    Удивительно — раздавать за «см» не своё, так еще и старьё.

    Github — проект win-acme

    Reply
  4. aximo

    (2) вариант- купить доменное имя. Ssl сертификаты выдаются только на доменные имена..

    если честно не заморачивался локальной сетью — мне нужно было установить именно защищенное соединение с вебсервисом

    Reply
  5. ellavs

    Let’s encrypt — прикольная штука. Как раз недавно у одного сайта закончился покупной 3х годовалый сертификат, решили не продлевать, а воспользоваться Let’s encrypt. Он ежемесячно перевыпускает новый SSL сертификат. Практически все этот сертификат признают. Только мы не предложенной в статье консольной утилитой пользовались, а гуишным (визуальным) приложением. Там мастерок вполне не сложный помогает пройти нужные этапы. Приложение монтируется как сервис и занимается генерацией сертификатов и привязкой его к сайту без Вас.

    Reply
  6. ellavs

    (5) посмотрела повнимательней статью… самое главное, что забыл сказать автор, упоминая Let’s encrypt, это как раз то, о чем выше написала — что его достаточно один раз настроить и про просрочку SSL-сертификатов можно забыть, сервис сам ежемесячно следит за перевыпуском сертификата (т.е. он никогда не просрочится).

    А то из статьи получается, что нужно делать сертификат на 3 месяца каждый раз ручками… ну это так, замечание 🙂

    Reply
  7. AlexeyPapanov

    Уважаемые коллеги, а можно ip привязать к субдомену, чтобы лишний домен не покупать?

    к примеру, есть у нас уже site.ru, а мы создадим бесплатно subdomain.site.ru и на него повесим сертификат.

    Reply
  8. aximo

    (6) совершенно верно, сертификат получается на 3 месяца, что указано мной. Ну все остальное — на развитие темы конечно!

    Reply
  9. vsesam80

    (5)А вы не поделитесь ссылочкой на это приложение гуишное для перевыпуска сертификатов?

    Reply
  10. vsesam80

    Может кто знает коллеги, как бы ssl к сервису no-ip прикрутить? Не у всех белый, статический ip есть.

    Reply
  11. user953800

    (7) У меня как раз 1С на поддоменах, в управлении ДНС домена создал А-записи для поддомена с указанием ip.. При этом Let’s encrypt умеет wild-сертификаты — т.е. я получаю один сертификат, где прописаны мои поддомены (2шт).

    Reply
  12. user953800

    (9) Описание проектов — доходите до заголовка «Windows / IIS» и ищите там в тексте «GUI»

    Полученные ссылки оттуда на страницы скачивания 2-х проектов GUI:

    GetCert

    Certify SSL Manager

    Reply
  13. ellavs

    (9) Certify SSL Manager — https://certifytheweb.com/

    Reply
  14. ellavs

    (8) да, Вы молодец — что упомянули эту тему, т.к. многие про этот функционал не знают. Мое дополнение лишь для того, чтобы те кто зайдут почитать понимали зачем вообще заморачиваться с этим сервисом (ведь ради трех месяцев этим заниматься не охота, а вот чтобы забыть о проблеме почти навсегда — уже стоит подумать…)

    Reply
  15. user953800

    (10) А в чем проблема? Главное сделать проброс 80 и 443 портов. Проверка может проводиться созданием в каталоге сайта файла верификации. Если файл обнаружен, сайт верифицируется и выдается сертификат. Прочие сертификаты на этот сайт, если они были зарегистрированы ранее в том же Let’s encrypt, отзываются и считаются недействительными.

    Просто поищите запрос «Let’s encrypt dyndns» — такие вопросы англоязычные форумы разбирали.

    Reply
  16. vsesam80

    (15)В том и проблема. С пробросом портов нет вопросов. Но прикрутить серт к субдомену no-ip это оказалось той еще историей. Кто то пишет что вообще не возможно.

    Reply
  17. user953800

    (16) У самих NoIp написано, что они не поддерживают (пока) такой функционал в бесплатной версии.

    Но можно попробовать скриптом win-acme (последнияя версия на сегодня v2.0.9.386) https://github.com/PKISharp/win-acme/releases

    Сайт привязан к 80 порту с обязательным именем узла. (рисунок 1)

    1. Скрипт запустить от имени администратора и Ввести «M» — full options (рисунок 2). В простом режиме «N» получал ошибку прохождения аутентификации.

    2. Ввести «2» — single binding

    3. Ввести цифру сайта из найденных

    4. Можно написать свое имя или просто нажать enter

    Следующие рекомендуемые шаги подсвечены зеленым — скриншот не стал до конца делать.

    По итогу получил сертификат для сайта на динамическом ip. Скрипт также создает задание в планировщике на обновление сертификата.

    Reply
  18. Voblhned

    Ты забыл что уязвимость определяется по самому тонкому месту, где отключение 80 порта?

    Reply
  19. aximo

    (19) разумеется…. отключите 80 порт или сделайте переадресацию на 443

    Reply
  20. starik-2005

    А можно это все в докер обернуть и как переносимый сервис организовать?

    Reply
  21. ridgid

    (2)не берите в голову есть бесплатный dns использующий ваш белый ip

    Sslip.io

    Сертификат 123-56-78-232.sslip.io

    Reply
  22. Xershi

    (22) ну это для первого варианта подходит, а для локальной сети для поиграться?

    Reply
  23. mitia.mackarevich

    (23) Для локальной сети выпиши сам себе сертификат

    Reply
  24. baton_pk
    Теперь, наша база опубликована по доменному имени и работает по защищенному соединению.

    Читаем: «Торчит попкой наружу». Да, соединение шифрованное. Но теперь Главбух Маша с полными правами и паролем «12345» неожиданно начнёт работать из Китая, Швейцарии или Перу.

    Торча наружу было бы здорово озаботиться ещё парой штук:

    1. Клиентские сертификаты — 1С в них умеет

    2. Не привязывать доменное имя непосредственно к внешнему IP-адресу своих серверов — только прослойка.

    Иначе «защищённость» есть, а безопасности больше не стало.

    Reply
  25. valentinko

    (6) Ну да, при одном условии.

    хттп порт (по-умолчанию 80) должен быть в момент «перевыпуска» открыт на веб-сервере, что есть очень плохой затеей. Поэтому для автоматического «перевыпуска» лучше ограничить запросы по хттп.

    Reply
  26. ellavs

    (26) насколько знаю — это только при первой генерации, дальше уже не нужно.

    Reply
  27. valentinko

    (27) Я тоже так думал. Однако каждый раз у меня «ругается» на недоступность из вне http://имя_домена/.well-known/acme-challenge….

    Причём это и IIS, и apache/nginx.

    Может «руки»?)

    Reply
  28. valentinko

    (25) Вы всё говорите правильно.

    Только автор описал немного другую тему. Конкретно — 1С + IIS + SSL (Letsencrypt) — как базовая инструкция )

    А всё что Вы говорите — можно продолжать долго.

    Reply
  29. asved.ru

    (21) Можно. Только вазелин закупите, он ва м пригодится, когда докер сломается и убьет базу.

    Reply
  30. Novikoff

    По поводу автоматического продления Let’s encrypt:

    C помощью win-acme получен сертификат 7.06.2019, конец 5.09.2019. В планировщике задание создалось. Все работало. Недавно получил письмо с темой Let’s Encrypt certificate expiration notice for domain «cntuik.ddns.net». Решил посмотреть как дела с обновлением сертификата и увидел,что начиная с 2.08.2019 задание вполняется с ошибкой следующего плана:

    Authorization timed out

    Renewal for «[IISBinding] <имя домена>» failed, will retry on next run

    Попробовал вручную запустить обновление — результат тот же:

    C:Windowssystem32>C:Installwin-acmewacs.exe —renew —baseuri «https://acme-v02.api.letsencrypt.org/»

    [INFO] A simple Windows ACMEv2 client (WACS)

    [INFO] Software version 2.0.9.386 (RELEASE)

    [INFO] IIS version 10.0

    [INFO] Please report issues at https://github.com/PKISharp/win-acme

    [INFO] Renewing certificate for [IISBinding] <имя домена>

    [INFO] Authorize identifier: <имя домена>

    [INFO] Authorizing cntuik.ddns.net using http-01 validation (SelfHosting)

    [EROR] Authorization timed out

    [EROR] Renewal for [IISBinding] <имя домена> failed, will retry on next run

    И так уже две недели — никто не сталкивался?

    Reply
  31. Novikoff

    Отвечаю сам себе. Должен быть открыт 80 порт, возможно лучше 443,но буду проверять после отпуска — https://letsencrypt.org/docs/challenge-types/. Порт был нестандартный,а 80 закрыт.

    Reply
  32. user797153

    (5) А там не сложно перевыпускать ключи? Это через приложение делается?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *