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

A Ожидается, что двенадцатифакторное приложение сохранит конфигурацию в среде.

Предполагается ли он включать в себя SSL-сертификат и файлы ключей, которые могут быть "большими" (по крайней мере, кратными kb) и (в зависимости от формата), часто содержат символы, не подлежащие печати (новые строки как минимум).

Или ожидаемая среда должна указывать на имена файлов сертификатов/ключей? (Например, это кажется не идеальным при попытке развернуть через Docker - мы действительно не хотим хранить закрытые ключи в изображении докера, не так ли? Но, возможно, это отдельный вопрос.)

Ответ 1

Сертификат SSL (строго видно) не является конфигурацией, а активным файлом.

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

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

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

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

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

Другой вариант - использовать hashicorp Vault. Это сервис, который управляет и распространяет секреты.

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

Ответ 2

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

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

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

Ответ 3

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

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