Подключение HTTPS


На прошлых выходных Аня столкнулась с рекламой в моем http приложении bill-splitter. Так как решать проблему с обнаглевшими провайдерами долго и малоэффективно было решено получить сертификат и включить https что исключит возможность незаметно подменять содержимое сайта провайдером.

Я решил особо не париться и использовать раскрученный бесплатный центр сертификации: «Let’s Encrypt» и их утилиту: «Certbot«. Получение сертификата и переключение сайта, который крутится на Apache, прошла, на удивление, гладко и быстро. А вот с сервером для bill-splitter пришлось повозиться. Дальше немного подробностей о том как получить сертификат и о моих приключениях с spring-boot проектом в docker контейнере и сертификате.

Для начала о том как переключить свой сайт на https используя Certbot. Просто идем на https://certbot.eff.org/instructions выбираем в выпадающих списках OS, используемую на вашем сервере и собственно софт, на котором крутится ваш сайт. Если сайт крутится на каком-нибудь стороннем сервисе и у вас нет доступа к ssh, проверьте настройки этого сервиса, возможно у него есть какая-нибудь интеграция с Certbot.

Далее просто следуйте инструкциям для вашей комбинации OS и софта. Все. Этот бот может даже автоматически переконфигурировать Apache/Nginx чтобы переадресовывать все обращения на https версию сайта, которую он сам же и создаст и сконфигурирует. Но, в случае, если у вас используются сторонние сервисы, к которым идет обращение через http (например, из JS), лучше перед переключением всего сайта на https поправить эти ссылки.

Я большую часть ссылок поправил до запуска бота и переключения на https, но bill-splitter решил править позже. И это вышло мне боком. Бот, с моего позволения, переключил сайт на https и настроил редиректы. Но в bill-splitter есть обращение из JS к серверу на том же домене, к которому еще не подключен сертификат. Соотвественно загрузка/сохранение сломались.

Я, долго не думая, пошел гуглить как подключить сертификат к spring-boot проекту. Большая часть инструкций была про то, как подключить PKCS12 store (объединенные сертификат и ключ), а Certbot генерирует отдельно сертификат, отдельно ключи. Использую openssl сгенерировал PKCS12 store и начал думать как его пробросить в docker-container. Напрямую его размещать в коде нельзя, тк у меня публичный репозиторий, поэтому начал гуглить как пробросить файл с хоста в контейнер. И вот здесь меня поджидала проблема.

В общем, нашел 1 способ как пробросить файлы/папки в контейнер: при запуске контейнера используем ключ -v, который позволяет подключить папку как shared volume. Перед этим я решил поправить docker-file и создавать эту папку при создании контейнера.

Далее поправил конфиг spring-boot проекта, чтобы он работал по https и ждал запросы от https версии сервиса и пошел пересобирать контейнер и проверять. Но тут меня ждала неприятность: при запуске контейнера он ругался на проблемы с автоматическим определением размера памяти, которую займет контейнер от java buildpack. И, не вдаваясь особо в детали, я загуглил текст ошибки и начал пытаться ее исправить.

Пару часов спустя, даже после конфигурации всех возможных параметров для java buildpack, так ничего и не заработало. И я решил зайти с другой стороны. До меня дошло что раньше этих проблем не было, на работе таких проблем я тоже не встречал, а значит проблема в чем то другом. Я еще раз проверил логи создания контейнера, и… Да, проблема оказалась в том, что я изменил версию проекта, при билде создался новый jar файл и docker-file перестал быть валидным, он пытался скопировать 1 jar файл из папки билда, а там их было уже 5.

Да, такая нелепая проблема съела часа 3. После исправления этой проблемы, снова собрал новый контейнер, запустил его, и все, наконец, завелось! Теперь весь zavedyaev.ru работает по https 🙂

Что делать с наглыми провайдерами так и не понятно. Хорошо что мои провайдеры пока такой ерундой не страдают.


Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.