У вас много вопросов в одном.
Должен ли я выполнять команду ./certbot-auto из PHP с помощью команды exec () / shell_exec ()? Должен ли я написать отдельный скрипт bash и вместо этого запустить скрипт bash?
В общем случае: нет.
PHP выполняется после того, как веб-страница достигнута, следовательно, он живет в текущем HTTP-сеансе, и браузер на другом конце будет ждать какого-то ответа в какое-то ограниченное время (и пользователи злятся, если они не видят чего-то «быстрого»).
Если вы исполняете вещи, у вас есть два варианта:
- вы ждете завершения внешней программы: проблема, это может быть после "неопределенного" времени, поэтому, если это не будет принято во внимание, пользователь никогда не увидит ничего в своем браузере
- вы запускаете его в фоновом режиме и не ждете его завершения: проблема, вам не нужно, если это удастся или нет, так что даже если вы тогда сможете ответить «что-то» в браузер, как вы будете обрабатывать сбои?
Общее решение для таких случаев:
- Действие, вызванное посещением HTTP, просто записывает запрос, как в БД или что-то в этом роде
- Отдельно процесс опрашивает БД на предмет выполнения задач и выполняет их; это совершенно отдельно от любого веб-сервера; после завершения задания (успех или сбой) БД будет обновляться таким же образом
- Процесс в пункте 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, может предоставить более продвинутые функции, когда вам не нужно настраивать виртуальный хост для каждого виртуального хоста, даже с разными сертификатами, вы просто создаете вещи с определенным именованием, и веб-сервер будет сопоставляйте вещи по мере необходимости.
Нужно ли мне редактировать /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.