Где хранить SSL-сертификаты для 12-факторного приложения


person Flimzy    schedule 16.08.2015    source источник
comment
У меня нет опыта работы с 12-факторным приложением (хотя интересное название, я изначально прочитал его как 12-факторную аутентификацию). Тем не менее, и к вашему сведению, я работал с некоторыми сторонними плагинами, которые поддерживают ссылки на фактические ресурсы сервера в его конфигурации. В частности, серийный номер сертификата SSL или, возможно, отпечаток пальца. Это уникальные идентификаторы, которые вы можете легко добавить в переменную среды, если ваше приложение или служба могут сопоставить их с фактическим сертификатом SSL в магазине, на который ссылаются. Управление ключами, конечно, всегда проблема, если вы не используете/не можете использовать HSM :D   -  person Matt Borja    schedule 20.06.2016


Ответы (3)


SSL-сертификат — это (строго говоря) не конфигурация, а файл ресурсов.

То, как вы предоставляете этот актив, зависит от вашего способа хостинга. Но вот несколько вариантов:

Простой способ — интегрировать letsencrypt и использовать certbot, который безопасно и автоматически обрабатывает загрузку сертификатов. letsencrypt имеет некоторые интеграции для некоторых языков (например, у go есть несколько клиентов, которые можно интегрировать в приложение).

Вы можете использовать балансировщик нагрузки и завершить ssl на балансировщике нагрузки. В этом случае вашему приложению не нужно ничего знать о сертификате.

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

Kubernetes также может использовать Ingress в качестве LoadBalancer, который завершает ssl.

Другой вариант — использовать хранилище hashicorp. Это служба, которая управляет и распространяет секреты.

Наверняка есть еще варианты и это только намеки. Но безопасное хранение и распространение ssl-сертификатов — непростая задача. Надеюсь, я дал несколько хороших советов.

person mbuechmann    schedule 15.02.2018

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

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

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

person maerics    schedule 13.12.2017

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

Похоже, что для сертификатов SSL они не будут меняться от среды к среде, поэтому вы не обязаны хранить их в переменных среды, IMO.

person Asif Shiraz    schedule 18.05.2016
comment
Если ваши сертификаты SSL не меняются между средами, то я бы сказал, что вы неправильно используете сертификаты SSL. - person Flimzy; 18.05.2016
comment
Верный. Я не сосредотачивался на том, как правильно использовать сертификаты, а просто хотел указать, что конфигурация в 12-факторных приложениях не обязательно должна всегда находиться в среде, а только настолько чувствительна к изменениям среды. - person Asif Shiraz; 19.05.2016