Как я могу динамически создавать новые SSL-сертификаты LetsEncrypt / Certbot для доменов, указывающих на мой сервер?

Это делается путем делегирования событий. Событие будет привязываться к элементу-оболочке, но будет делегировано элементу селекторного класса. Вот как это работает.

$('.wrapper-class').on("click", '.selector-class', function() {
    // Your code here
});

Примечание:

Элемент-оболочка-оболочка может быть любым ex. документа, тела или вашей обертки. Упаковщик должен уже существовать.

0
задан Patrick Mevzek 28 March 2019 в 17:32
поделиться

1 ответ

У вас много вопросов в одном.

Должен ли я выполнять команду ./certbot-auto из PHP с помощью команды exec () / shell_exec ()? Должен ли я написать отдельный скрипт bash и вместо этого запустить скрипт bash?

В общем случае: нет.

PHP выполняется после того, как веб-страница достигнута, следовательно, она живет в текущем HTTP-сеансе, и браузер на другом конце будет ждать какого-то ответа в какое-то ограниченное время (и пользователи злятся, если они не видят чего-то «быстрого»).

Если вы выполняете вещи, у вас есть два варианта:

  1. вы ждете завершения внешней программы: проблема, это может произойти по истечении «неопределенного» времени, поэтому, если это не учитывается, пользователь никогда не увидит ничего в своем браузере
  2. вы запускаете это в фоновом режиме, и вы не ждете его завершения: проблема, вам не нужно, если это удастся или нет, так что даже если вы сможете Чтобы ответить «что-то» в браузер, как вы будете обрабатывать сбои?

Общее решение для таких случаев:

  1. Действие, вызванное посещением HTTP просто записывает запрос, как в БД или что-то в этом роде
  2. Отдельно процесс опрашивает БД на предмет выполнения задач и выполняет их; это совершенно отдельно от любого веб-сервера; когда задание завершено (успех или сбой), БД будет обновляться таким же образом
  3. Процесс на 1) может регулярно опрашивать БД, чтобы увидеть состояние (ожидает или завершен, или не выполнен) и показать пользователю сообщение, как во время его посещения, с каким-то автоматическим обновлением и / или предоставлением определенной отдельной страницы, где пользователь сможет отслеживать состояние своей операции

Должен ли я использовать PHP-библиотека ACME, рекомендованная LetsEncrypt - https://letsencrypt.org/docs/client-options/

Вы можете использовать любую библиотеку на любом языке, которая правильно реализует Протокол ACME.

Let's Encrypt рекомендует только одно программное обеспечение: certbot. Все остальные, перечисленные на этой странице, являются примерами клиентских библиотек / программ, которые должны работать.

Нужно ли создавать виртуальные хосты для каждого домена, указывающего на www.mywebapp.example?

Да, особенно если они используют для каждого из них определенный сертификат, в противном случае веб-сервер не сможет определить правильный сертификат для возврата в начале квитирования TLS, основываясь на том, какое имя хоста дал браузер (внутри расширения SNI, используемого в начале квитирования TLS)

Или вы можете использовать некоторый Apache функции массового виртуального хостинга, такие как https://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.html . Однако, это может означать, что один сертификат со всеми добавленными в него именами, который может технически работать до некоторого количества имен, но может создавать нетехнические проблемы (например, видеть все имена и т. д.)

Конечно, другое программное обеспечение, такое как Nging / HAProxy, может предоставлять более расширенные функции, где вы делаете не нужно настраивать виртуальный хост для каждого виртуального хоста, даже с разными сертификатами, вы просто пу t вещи на месте с определенным наименованием, и веб-сервер будет соответствовать вещам по мере необходимости.

Нужно ли мне редактировать /etc/httpd/conf.d/ssl.conf для добавления новых виртуальных хостов?

Да, или любой другой файл, если вы используете Include или аналогичный.

Если вы управляете множеством разных и отдельных веб-сайтов, может быть проще иметь один файл конфигурации для каждого веб-сайта, включая пути сертификатов и т. Д., Во многих дистрибутивах Linux Apache устанавливается таким образом, что у вас есть /etc/httpd/sites-enabled/ для этой функции. , Если нет, вы можете сделать то же самое самостоятельно.

Могут ли несколько доменов использовать один и тот же путь DocumentRoot?

Конечно, да.

PS: пожалуйста, перестаньте говорить SSL, протокол называется TLS, изобретенный 20 лет назад. Протокол SSL давно утрачен, в настоящее время рекомендуется использовать TLS 1.2, за исключением случаев, когда есть веские основания разрешать использовать версии 1.1 и 1.0, которые имеют уязвимости. Не существует «SSL-сертификата» ни по этой причине, ни потому, что они неправильные. TLS может работать без сертификатов, и эти сертификаты могут использоваться вне TLS, как в S / MIME. Это сертификаты X.509.

0
ответ дан Patrick Mevzek 28 March 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: