У меня возникла необходимость перевести опубликованную базу в веб 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С. Базовые настройки
Методика независимой системы "Подписки на события"
Полезная публикация. Я так понял что все серты Let’s encrypt будут приниматься Виндой как настоящие и не будут генерить ошибку как в случае с самоподписанными?
Вот еще бы как бы с Апачем это сделать и прикрутить сертификаты к сервису no-ip
Я так понял если у нас белый статический ip, а домена нет, то ничего не выйдет?
Тоже самое если я допустил развернул веб-сервер у себя в локальной сети, доменного имени нет, есть только имя ПК, тоже пшик или есть варианты?
Удивительно — раздавать за «см» не своё, так еще и старьё.
Github — проект win-acme
(2) вариант- купить доменное имя. Ssl сертификаты выдаются только на доменные имена..
если честно не заморачивался локальной сетью — мне нужно было установить именно защищенное соединение с вебсервисом
Let’s encrypt — прикольная штука. Как раз недавно у одного сайта закончился покупной 3х годовалый сертификат, решили не продлевать, а воспользоваться Let’s encrypt. Он ежемесячно перевыпускает новый SSL сертификат. Практически все этот сертификат признают. Только мы не предложенной в статье консольной утилитой пользовались, а гуишным (визуальным) приложением. Там мастерок вполне не сложный помогает пройти нужные этапы. Приложение монтируется как сервис и занимается генерацией сертификатов и привязкой его к сайту без Вас.
(5) посмотрела повнимательней статью… самое главное, что забыл сказать автор, упоминая Let’s encrypt, это как раз то, о чем выше написала — что его достаточно один раз настроить и про просрочку SSL-сертификатов можно забыть, сервис сам ежемесячно следит за перевыпуском сертификата (т.е. он никогда не просрочится).
А то из статьи получается, что нужно делать сертификат на 3 месяца каждый раз ручками… ну это так, замечание 🙂
Уважаемые коллеги, а можно ip привязать к субдомену, чтобы лишний домен не покупать?
к примеру, есть у нас уже site.ru, а мы создадим бесплатно subdomain.site.ru и на него повесим сертификат.
(6) совершенно верно, сертификат получается на 3 месяца, что указано мной. Ну все остальное — на развитие темы конечно!
(5)А вы не поделитесь ссылочкой на это приложение гуишное для перевыпуска сертификатов?
Может кто знает коллеги, как бы ssl к сервису no-ip прикрутить? Не у всех белый, статический ip есть.
(7) У меня как раз 1С на поддоменах, в управлении ДНС домена создал А-записи для поддомена с указанием ip.. При этом Let’s encrypt умеет wild-сертификаты — т.е. я получаю один сертификат, где прописаны мои поддомены (2шт).
(9)Описание проектов — доходите до заголовка «Windows / IIS» и ищите там в тексте «GUI»
GetCert
Certify SSL Manager
Полученные ссылки оттуда на страницы скачивания 2-х проектов GUI:
(9) Certify SSL Manager —https://certifytheweb.com/
(8) да, Вы молодец — что упомянули эту тему, т.к. многие про этот функционал не знают. Мое дополнение лишь для того, чтобы те кто зайдут почитать понимали зачем вообще заморачиваться с этим сервисом (ведь ради трех месяцев этим заниматься не охота, а вот чтобы забыть о проблеме почти навсегда — уже стоит подумать…)
(10) А в чем проблема? Главное сделать проброс 80 и 443 портов. Проверка может проводиться созданием в каталоге сайта файла верификации. Если файл обнаружен, сайт верифицируется и выдается сертификат. Прочие сертификаты на этот сайт, если они были зарегистрированы ранее в том же Let’s encrypt, отзываются и считаются недействительными.
Просто поищите запрос «Let’s encrypt dyndns» — такие вопросы англоязычные форумы разбирали.
(15)В том и проблема. С пробросом портов нет вопросов. Но прикрутить серт к субдомену no-ip это оказалось той еще историей. Кто то пишет что вообще не возможно.
(16) У самих NoIp написано, что они не поддерживают (пока) такой функционал в бесплатной версии.
https://github.com/PKISharp/win-acme/releases
Но можно попробовать скриптом win-acme (последнияя версия на сегодня v2.0.9.386)
Сайт привязан к 80 порту с обязательным именем узла. (рисунок 1)
1. Скрипт запустить от имени администратора и Ввести «M» — full options (рисунок 2). В простом режиме «N» получал ошибку прохождения аутентификации.
2. Ввести «2» — single binding
3. Ввести цифру сайта из найденных
4. Можно написать свое имя или просто нажать enter
Следующие рекомендуемые шаги подсвечены зеленым — скриншот не стал до конца делать.
По итогу получил сертификат для сайта на динамическом ip. Скрипт также создает задание в планировщике на обновление сертификата.
Ты забыл что уязвимость определяется по самому тонкому месту, где отключение 80 порта?
(19) разумеется…. отключите 80 порт или сделайте переадресацию на 443
А можно это все в докер обернуть и как переносимый сервис организовать?
(2)не берите в голову есть бесплатный dns использующий ваш белый ip
Sslip.io
Сертификат 123-56-78-232.sslip.io
(22) ну это для первого варианта подходит, а для локальной сети для поиграться?
(23) Для локальной сети выпиши сам себе сертификат
Читаем: «Торчит попкой наружу». Да, соединение шифрованное. Но теперь Главбух Маша с полными правами и паролем «12345» неожиданно начнёт работать из Китая, Швейцарии или Перу.
Торча наружу было бы здорово озаботиться ещё парой штук:
1. Клиентские сертификаты — 1С в них умеет
2. Не привязывать доменное имя непосредственно к внешнему IP-адресу своих серверов — только прослойка.
Иначе «защищённость» есть, а безопасности больше не стало.
(6) Ну да, при одном условии.
хттп порт (по-умолчанию 80) должен быть в момент «перевыпуска» открыт на веб-сервере, что есть очень плохой затеей. Поэтому для автоматического «перевыпуска» лучше ограничить запросы по хттп.
(26) насколько знаю — это только при первой генерации, дальше уже не нужно.
(27) Я тоже так думал. Однако каждый раз у меня «ругается» на недоступность из вне http://имя_домена/.well-known/acme-challenge….
Причём это и IIS, и apache/nginx.
Может «руки»?)
(25) Вы всё говорите правильно.
Только автор описал немного другую тему. Конкретно — 1С + IIS + SSL (Letsencrypt) — как базовая инструкция )
А всё что Вы говорите — можно продолжать долго.
(21) Можно. Только вазелин закупите, он ва м пригодится, когда докер сломается и убьет базу.
По поводу автоматического продления 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)
https://github.com/PKISharp/win-acme
[INFO] Software version 2.0.9.386 (RELEASE)
[INFO] IIS version 10.0
[INFO] Please report issues at
[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
И так уже две недели — никто не сталкивался?
Отвечаю сам себе. Должен быть открыт 80 порт, возможно лучше 443,но буду проверять после отпуска —https://letsencrypt.org/docs/challenge-types/ . Порт был нестандартный,а 80 закрыт.
(5) А там не сложно перевыпускать ключи? Это через приложение делается?