Spec-Zone.ru › Apache HTTP Server

Apache Module mod_md

Описание: Управление доменами в виртуальных хостах, предоставление сертификатов через протокол ACME
Статус: Экспериментальный
Идентификатор модуля: md_module
Файл исходного кода: mod_md.c
Совместимость: Доступен в версии 2.4.30 и более поздних

Обзор

Этот модуль управляет общими свойствами доменов для одного или нескольких виртуальных хостов. Он выполняет две основные задачи: во-первых, контролирует/обновляет сертификаты TLS через протокол ACME (RFC 8555). Сертификаты будут обновляться модулем до их истечения для предотвращения прерывания работы интернет-сервисов. Существуют способы отслеживания состояния всех управляемых таким образом сертификатов, а также конфигурации, которые позволят запускать собственные команды уведомления при обновлении, истечении срока действия и ошибках.

Во-вторых, mod_md предлагает альтернативную реализацию OCSP Stapling. Это работает как с управляемыми сертификатами, так и с сертификатами, которые вы настраиваете сами. OCSP Stapling является необходимым компонентом для любого сайта https:, влияющим на время загрузки страниц и, в зависимости от других настроек, на доступность страниц. Более подробная информация в разделе про stapling ниже.

По умолчанию, для управления сертификатами используется авторитет ACME Let's Encrypt, но можно настроить другого CA, поддерживающего этот протокол.

Пример простой конфигурации:

TLS в контексте VirtualHost

MDomain example.org

<VirtualHost *:443>
    ServerName example.org
    DocumentRoot htdocs/a

    SSLEngine on
    # no certificates specification
</VirtualHost>

Эта настройка при запуске сервера свяжется с Let's Encrypt для запроса сертификата для домена. Если Let's Encrypt сможет подтвердить владение доменом, модуль извлечет сертификат и цепочку сертификатов, сохранит их в локальной файловой системе (см. MDStoreDir) и предоставит их при следующем перезапуске сервера mod_ssl.

Это происходит во время работы сервера. Все остальные хосты будут работать как и раньше. Пока сертификат недоступен, запросы на управляемый домен будут обрабатываться с кодом ошибки «503 Service Unavailable».

Предварительные требования

Для работы этого модуля требуется, чтобы был загружен модуль mod_watchdog.

Регистрация и продление сертификатов с помощью Let's Encrypt требуют, чтобы ваш сервер был доступен по порту 80 (http:) и/или порту 443 (https:) из открытого интернета. (Если ваш сервер настроен на использование DNS для проверок - подробнее об этом в разделе «сертификаты для поддоменов».)

Модуль выберет один из методов, предложенных Let's Encrypt. Обычно LE предлагает проверки на обоих портах и DNS, и Apache выбирает доступный метод.

Для определения доступного метода модуль проверяет порты, на которых работает Apache httpd. Если среди них есть порт 80, предполагается, что проверка http: (называемая http-01) доступна. Если сервер работает на порте 443, то проверка https: (называемая tls-alpn-01) также добавляется в список. (И если MDChallengeDns01 настроено, проверка dns-01 также добавляется.)

Если ваша настройка нестандартна, существуют два способа повлиять на этот процесс. Во-первых, обратитесь к MDPortMap, если сервер находится за прокси-сервером, например, брандмауэром. Во-вторых, вы можете полностью переопределить процесс угадывания модуля, настроив MDCAChallenges напрямую.

Проверки https:

Для проверки домена через протокол TLS тип проверки `tls-alpn-01` имеет соответствующее имя. Для этого требуется, чтобы сервер Apache работал на порте 443 (см. MDPortMap если вы настроили этот порт на другое значение).

Let's Encrypt откроет соединение TLS с Apache с использованием специального индикатора `acme-tls/1` (эта часть TLS называется ALPN, поэтому и название проверки. ALPN также используется браузерами для запроса соединения HTTP/2).

Так же, как и для протокола HTTP/2, для разрешения этого необходимо настроить:

Protocols h2 http/1.1 acme-tls/1

И тип проверки `tls-alpn-01` становится доступным.

Сертификаты для поддоменов

Сертификаты для поддоменов возможны, но не так просто использовать «из коробки». Let's Encrypt требует проверку типа `dns-01` для них. Другие типы не считаются достаточными.

Сложность здесь заключается в том, что Apache не может выполнить это самостоятельно. Как следует из названия, `dns-01` требует, чтобы вы указали определённые записи DNS для своего домена, содержащие некоторые данные проверки. Таким образом, вам нужно будет _изменить_ записи DNS вашего домена.

Если вы знаете как это сделать, вы можете интегрировать это с mod_md. Допустим, у вас есть скрипт для этого в `/usr/bin/acme-setup-dns`, вы настраиваете Apache следующим образом:

MDChallengeDns01 /usr/bin/acme-setup-dns

и Apache будет вызывать этот скрипт при необходимости создания/удаления записи DNS для проверки домена.

Предполагая, что вы хотите сертификат для `*.mydomain.com`, mod_md вызовет:

/usr/bin/acme-setup-dns setup mydomain.com challenge-data
# this needs to remove all existing DNS TXT records for 
# _acme-challenge.mydomain.com and create a new one with 
# content "challenge-data"

и после этого он вызовет

/usr/bin/acme-setup-dns teardown mydomain.com
# this needs to remove all existing DNS TXT records for 
# _acme-challenge.mydomain.com

Мониторинг

Apache имеет стандартный модуль для мониторинга: mod_status. mod_md добавляет раздел и упрощает мониторинг ваших доменов.

Вы увидите все ваши MD в алфавитном порядке, домены, которые они содержат, общий статус, сроки истечения и специфические настройки. Настройки показывают выбранные вами сроки продления (или значения по умолчанию), используемый CA и т. д.

Столбец «Обновление» покажет действия и описания ошибок для продления сертификатов. Это должно облегчить пользователям определение того, всё ли в порядке или что пошло не так.

Если с MD возникнет ошибка, она также будет отображена здесь. Это позволит вам оценить проблемы, не копаясь в логах сервера.

Также доступен новый обработчик «md-status», предоставляющий информацию о MD из «server-status» в формате JSON. Вы настраиваете его как

<Location "/md-status">
  SetHandler md-status
</Location>

на вашем сервере. Как и в случае с «server-status», вам необходимо добавить авторизацию для этого.

Если вы хотите проверить статус JSON конкретного домена, просто добавьте его к вашему URL статуса:

> curl https://<yourhost>/md-status/another-domain.org
{
  "name": "another-domain.org",
  "domains": [
    "another-domain.org",
    "www.another-domain.org"
  ],
  ...

Этот JSON-статус также показывает журнал событий при продлении доменов:

{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "The certificate for the managed domain has been renewed successfully and can be used. A graceful server restart now is recommended."
},{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "Retrieving certificate chain for test-901-003-1560955549.org"
},{
"when": "Wed, 19 Jun 2019 14:45:58 GMT",
"type": "progress", "detail": "Waiting for finalized order to become valid"
},{
"when": "Wed, 19 Jun 2019 14:45:50 GMT",
"type": "progress", "detail": "Submitting CSR to CA for test-901-003-1560955549.org"
},
...

Вы также найдете эту информацию в файле `job.json` в ваших папках подготовки и, при активации, доменов. Это позволит вам просмотреть эти данные в любое время в будущем.

Кроме того, есть MDCertificateStatus, который предоставляет доступ к соответствующей информации о сертификатах в формате JSON.

Stapling

Если вы хотите попробовать stapling для одного управляемого домена, настройка:

<MDomain mydomain.net>
  MDStapling on
</MDomain>

и используйте «server-status» и/или MDMessageCmd для просмотра того, как оно работает. Вы увидите, есть ли там информация о Stapling, сколько она действительна, откуда она получена и когда она будет обновлена.

Если всё вас устраивает, вы можете включить его для всех сертификатов или только для управляемых.

Существующая реализация stapling в mod_ssl используется многими сайтами на протяжении многих лет. Основные различия между mod_ssl и mod_md:

  1. По требованию против запланированного: mod_ssl получает информацию о stapling при запросе, например, при новом подключении. mod_md получает её при старте сервера и после 2/3 его жизненного цикла.
  2. В памяти против сохранения: mod_ssl _может_ сохранить эту информацию, но большинство примеров конфигураций используют кэш в памяти. mod_md всегда сохраняет информацию в файловой системе.

Если вам не повезёт и вы перезапустите сервер во время перебоя в работе OCSP-сервиса вашего CA, ваши пользователи могут больше не получить доступ к вашим сайтам. Без сохранения ваша система не может предоставить клиенту данные, а браузер клиента не может их получить, так как OCSP-сервис не отвечает.

Реализация в mod_md сохранит её, загрузит снова после перезапуска и сделает доступной для входящих подключений. За день-два до истечения срока действия этой информации она будет обновлена, что позволит ей справиться с длительным простоями OCSP-сервиса.

Из-за обратной совместимости существующую реализацию в mod_ssl нельзя было существенно изменить. Например, mod_ssl не может добавить зависимость от mod_watchdog, не сломав многочисленные существующие установки (которые его не загружают).

Директива MDActivationDelay

Описание:
Синтаксис:
MDActivationDelay duration
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступен в версии 2.4.42 и более поздних

Директива MDBaseServer

Описание: Управление тем, может ли управляться базовый сервер или только виртуальные хосты.
Синтаксис:
MDBaseServer on|off
Значение по умолчанию:
MDBaseServer off
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md

Управляет тем, должен ли базовый сервер (тот, что вне всех VirtualHost) управляться mod_md или нет. По умолчанию, это не так. По той причине, что это может иметь нежелательные побочные эффекты. Рекомендуется использовать виртуальные хосты для всех управляемых доменов и не полагаться на глобальную конфигурацию сервера по умолчанию.

Директива MDCAChallenges

Описание: Тип ACME-проверки, используемой для подтверждения владения доменом.
Синтаксис:
MDCAChallenges name [ name ... ]
Значение по умолчанию:
MDCAChallenges tls-alpn-01 http-01 dns-01
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md

Устанавливает типы проверок (в порядке приоритета) при подтверждении владения доменом. Поддерживаемые модулем типы проверок - `tls-alpn-01`, `dns-01` и `http-01`. Модуль будет анализировать общую конфигурацию сервера, чтобы определить, какие типы проверок могут быть использованы.

Например, если сервер работает на порте 80, доступен метод `http-01`. Предварительным условием для `dns-01` является настроенная команда MDChallengeDns01. `tls-alpn-01` описан выше в разделе «Проверки https:».

Эта автоматическая настройка работает для большинства конфигураций. Но поскольку Apache - это мощный сервер с множеством конфигурационных параметров, ситуация не ясна для всех возможных случаев. Например, он может работать на нескольких IP-адресах, некоторые из которых доступны по `https:`, а некоторые - нет.

Если вы настроите MDCAChallenges напрямую, эта автоматическая настройка отключается. Вместо этого модуль будет использовать настроенный список проверок при взаимодействии с сервером ACME (тип проверки также должен быть предложен сервером). Эти проверки анализируются в указанном порядке.

Директива MDCertificateAgreement

Описание: Вы подтверждаете, что приняли Условия предоставления услуг Уполномоченной организацией по сертификации.
Синтаксис:
MDCertificateAgreement accepted
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

При использовании mod_md для получения сертификата, вы становитесь клиентом Уполномоченной организации по сертификации (например, Let's Encrypt). Это означает, что вам необходимо прочитать и принять их Условия предоставления услуг, чтобы понять, что они предлагают и какие ограничения или требования могут быть наложены. mod_md сам по себе не может соглашаться на подобные вещи.

Директива MDCertificateAuthority

Описание: URL-адрес сервиса Уполномоченной организации по сертификации ACME.
Синтаксис:
MDCertificateAuthority url
По умолчанию:
MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

URL-адрес, где Уполномоченная организация по сертификации предоставляет свои услуги.

В настоящее время Let's Encrypt предлагает четыре таких URL-адреса. Два для собственной устаревшей версии протокола ACME, обычно называемой ACMEv1. И два для версии RFC 8555, называемой ACMEv2.

Каждая версия имеет 2 конечные точки, так как есть одна для производства и одна для "этапа тестирования" для тестирования. Конечная точка тестирования работает так же, но не выдаст сертификаты, которые будут распознаны браузерами. Однако у неё также очень лояльные ограничения на скорость. Это позволяет многократно тестировать сервис, не блокируя себя.

Настройка этапа тестирования Let's Encrypt

MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory

Директива MDCertificateCheck

Описание:
Синтаксис:
MDCertificateCheck name url
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступна в версии 2.4.42 и более поздних

Директива MDCertificateFile

Описание: Укажите статический файл сертификата для MD.
Синтаксис:
MDCertificateFile path-to-pem-file
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Используется внутри MDomainSet и указывает на файл, содержащий цепочку сертификатов для Управляемого домена. Соответствующий ключ указывается через MDCertificateKeyFile.

Пример

<MDomain mydomain.com>
  MDCertificateFile /etc/ssl/my.cert
  MDCertificateKeyFile /etc/ssl/my.key
</MDomain>

Это эквивалент директивы mod_ssl SSLCertificateFile. Она имеет несколько применений.

Например, при миграции существующего домена, использующего статические файлы, на автоматические сертификаты Let's Encrypt. Вы определяете MDomainSet, добавляете файлы сюда и удаляете SSLCertificateFile из ваших VirtualHosts.

Это даст вам то же самое, что и раньше, возможно с меньшим количеством повторяющихся строк в вашей конфигурации. Затем вы можете добавить MDRenewMode 'всегда' к нему, и модуль получит новый сертификат перед истечением срока действия сертификата из файла. После этого вы удаляете MDCertificateFile и перезагружаете сервер.

Еще один случай использования — продление сертификатов Let's Encrypt с помощью других клиентов ACME, например, отличного certbot. Затем позвольте вашим MD указывать на файлы из certbot и использовать их вместе.

Директива MDCertificateKeyFile

Описание: Укажите статический закрытый ключ для статического сертификата.
Синтаксис:
MDCertificateKeyFile path-to-file
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Используется внутри MDomainSet и указывает на файл, содержащий закрытый ключ для Управляемого домена. Соответствующий сертификат указывается через MDCertificateFile.

Это эквивалент директивы mod_ssl SSLCertificateKeyFile.

Директива MDCertificateMonitor

Описание: URL-адрес монитора журнала сертификатов.
Синтаксис:
MDCertificateMonitor name url
По умолчанию:
MDCertificateMonitor crt.sh https://crt.sh?q=
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Это часть HTML пользовательского интерфейса «серверный статус» и не имеет отношения к основному функционалу. Она определяет ссылку, предлагаемую на этой странице для простого просмотра монитора сертификатов. К сконфигурированному URL добавляется отпечаток SHA256 сертификата.

Мониторы сертификатов предлагают контроль над журналами прозрачности сертификатов (CT) для отслеживания использования сертификатов для доменов. Вы, как минимум, увидите, что Let's Encrypt (или любая другая вами сконфигурированная Уполномоченная организация по сертификации) внесла ваши сертификаты в журналы CT.

Предупреждение: журналы сертификатов обновляются, и мониторы принимают эти обновления с некоторой задержкой. Это варьируется в зависимости от журналов и мониторов. Новый сертификат не будет известен сразу.

Директива MDCertificateProtocol

Описание: Протокол, используемый с Уполномоченной организацией по сертификации.
Синтаксис:
MDCertificateProtocol protocol
По умолчанию:
MDCertificateProtocol ACME
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Определяет используемый протокол. В настоящее время поддерживается только ACME.

Директива MDCertificateStatus

Описание: Отображает общедоступную информацию о сертификате в формате JSON.
Синтаксис:
MDCertificateStatus on|off
По умолчанию:
MDCertificateStatus on
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

При включении, в Управляемых доменах доступен ресурс по адресу 'https://domain/.httpd/certificate-status', который возвращает JSON-документ с ключами свойств текущего и обновлённого сертификатов — если они доступны.

Пример

{
  "valid-until": "Thu, 29 Aug 2019 16:06:35 GMT",
  "valid-from": "Fri, 31 May 2019 16:06:35 GMT",
  "serial": "03039C464D454EDE79FCD2CAE859F668F269",
  "sha256-fingerprint": "1ff3bfd2c7c199489ed04df6e29a9b4ea6c015fe8a1b0ce3deb88afc751e352d"
  "renewal" : { ...renewed cert information... }
}

Директива MDChallengeDns01

Описание:
Синтаксис:
MDChallengeDns01 path-to-command
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Определяет программу, которая будет вызываться при необходимости настройки/удаления вызова `dns-01`. Программа получает аргумент `setup` или `teardown`, за которым следует имя домена. Для `setup` дополнительно передаётся содержимое вызова.

Вам не нужно указывать это, если возможен метод вызова `http:` или `https:`. Однако, Let's Encrypt делает `dns-01` единственным доступным вызовом для сертификатов с подстановочными знаками. Если вам необходим один из таких сертификатов, вам нужно настроить это.

Подробнее см. раздел о сертификатах с подстановочными знаками выше.

Директива MDContactEmail

Описание:
Синтаксис:
MDContactEmail address
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Протокол ACME требует указать URL-адрес контакта при регистрации. В настоящее время Let's Encrypt хочет адрес электронной почты (и будет использовать его для уведомления о продлении или изменениях условий предоставления услуг). mod_md использует директиву MDContactEmail email в вашей конфигурации Apache, поэтому, пожалуйста, укажите правильный адрес там. Если MDContactEmail отсутствует, mod_md будет использовать директиву ServerAdmin.

Директива MDDriveMode

Описание: прежнее название MDRenewMode.
Синтаксис:
MDDriveMode always|auto|manual
По умолчанию:
MDDriveMode auto
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Эта директива существует для обратной совместимости как старое название для MDRenewMode.

Директива MDExternalAccountBinding

Описание:
Синтаксис:
MDExternalAccountBinding key-id hmac-64 | none | file
По умолчанию:
MDExternalAccountBinding none
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступна в версии 2.4.52 и более поздних

Настройте значения для ACME «Связывания внешних учётных записей», функции стандарта ACME, которая позволяет клиентам привязывать регистрации к существующей учётной записи клиента на серверах ACME.

Let's Encrypt не требует этого, но другие Уполномоченные организации по сертификации ACME требуют. Проверьте у своей Уполномоченной организации по сертификации ACME, нужны ли вам эти значения и как их получить. Это две строки: идентификатор ключа и значение 'hmac' в кодировке base64.

Вы можете настроить их глобально или для конкретного MDomain. Поскольку эти значения позволяют любому регистрироваться под одной и той же учётной записью, рекомендуется ограничивать права доступа к файлу конфигурации, например, только для root.

Значение также может быть взято из JSON-файла, чтобы сохранить более открытые разрешения на конфигурацию сервера и ограничить разрешения на этот файл. Сам JSON выглядит так:

Пример JSON-файла EAB

{"kid": "kid-1", "hmac": "zWND..."}

При изменении значений EAB новые значения будут использоваться при следующем обновлении сертификата.

Директива MDHttpProxy

Описание: Определите прокси-сервер для исходящих соединений.
Синтаксис:
MDHttpProxy url
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Используйте http-прокси для подключения к MDCertificateAuthority. Определите его, если ваш веб-сервер может получить доступ к интернету только через прокси-сервер.

Директива MDMember

Описание: Дополнительное имя хоста для управляемого домена.
Синтаксис:
MDMember hostname
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Вместо перечисления всех имён DNS в одной строке, вы можете использовать MDMember для добавления таких имён в управляемый домен.

Пример

<MDomain example.org>
    MDMember www.example.org
    MDMember mail.example.org
</MDomain>

Если вы используете её в глобальном контексте, вне конкретного управляемого домена, вы можете указать только одно значение: 'auto' или 'manual', которое будет по умолчанию для всех других управляемых доменов. См. MDomain для описания этих специальных значений.

Директива MDMembers

Описание: Управление автоматическим добавлением псевдонимов доменных имён.
Синтаксис:
MDMembers auto|manual
Значение по умолчанию:
MDMembers auto
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Определяет, будут ли ServerName и ServerAlias значения VirtualHost автоматически добавлены в члены Управляемого Домена или нет.

Директива MDMessageCmd

Описание: Обработка событий для Управляемых доменов
Синтаксис:
MDMessageCmd path-to-cmd optional-args
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Эта команда вызывается при наступлении одного из следующих событий для управляемого домена: "обновлен", "установлен", "выходит из строя", "ошибка". В будущем могут быть вызваны и другие события, и команда будет игнорировать события, с которыми она не может справиться.

Это более гибкий аналог MDNotifyCmd.

Пример

MDMessageCmd /etc/apache/md-message
# will be invoked when a new certificate for mydomain.org is available as: /etc/apache/md-message renewed mydomain.com

Программа не должна блокироваться, так как модуль будет ожидать её завершения. Код возврата, отличный от 0, считается ошибкой.

Событие "ошибка" не является поводом для немедленного беспокойства, так как попытка обновления выполняется достаточно рано, чтобы позволить возобновить работу интернета. Оно сообщается не чаще, чем один раз в час.

Событие "выходит из строя" должно рассматриваться серьёзно. Оно генерируется, когда достигается MDWarnWindow. По умолчанию это составляет 10% от срока действия сертификата, поэтому для Let's Encrypt это сейчас означает 9 дней до истечения срока действия. Предупреждение повторяется не чаще, чем один раз в день.

Событие "обновлён" означает, что новый сертификат получен и сохранён в области "подготовка" в хранилище управляемого домена. Он будет активирован при следующей перезагрузке/перезапуске сервера.

Событие "установлен" срабатывает, когда новый сертификат был перенесён из области "подготовка" в место расположения домена в хранилище управляемого домена. Это происходит при запуске/перезагрузке сервера. В отличие от всех других вызовов, MDMessageCmd выполняется с правами root (в *nix системах) и имеет доступ к файлам сертификатов (и ключам). Сертификаты, необходимые для других приложений или в других форматах, могут быть обработаны на этом событии.

Событие "обновление" срабатывает перед запуском процесса обновления для управляемого домена. Если команда вернёт значение != 0 по этой причине, обновление будет прервано и повторено в следующем цикле. Некоторые конфигурации кластеров используют это, чтобы позволить обновлениям выполняться только на одном узле.

Событие "установка-вызова:тип:домен" срабатывает, когда данные проверки для домена были созданы. Этот вызов выполняется перед тем, как сервер ACME попросит проверить их. Тип — один из типов проверок ACME. Этот вызов выполняется для каждого имени DNS в управляемом домене. Конфигурации кластеров могут использовать это событие для распределения файлов проверок по всем узлам кластера.

ocsp-ошибка происходит, когда MDStapling включён для домена, это указывает на то, что возникла ошибка при получении ответа OCSP от центра сертификации. mod_md будет продолжать попытки.

Директива MDMustStaple

Описание: Управление тем, содержат ли новые сертификаты флаг OCSP Must Staple.
Синтаксис:
MDMustStaple on|off
Значение по умолчанию:
MDMustStaple off
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Определяет, должен ли запрашиваемый сертификат содержать флаг OCSP Must Staple или нет. Если сертификат имеет этот флаг, сервер обязан отправлять ответ OCSP stapling каждому клиенту. Это работает только если вы настроили mod_ssl для генерации этого (см. SSLUseStapling и аналогичные).

Директива MDNotifyCmd

Описание: Запуск программы при готовности управляемого домена.
Синтаксис:
MDNotifyCmd path [ args ]
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Настроенное исполняемое приложение запускается, когда управляемый домен зарегистрировался или обновил свой сертификат. Ему передаётся имя обработанного управляемого домена в качестве дополнительных аргументов (после параметров, указанных здесь). Оно должно возвращать код состояния 0, чтобы указать на успешное выполнение.

Директива MDomain

Описание: Определение списка доменных имён, принадлежащих одной группе.
Синтаксис:
MDomain dns-name [ other-dns-name... ] [auto|manual]
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Все имена в списке управляются как один управляемый домен (MD). mod_md запросит один сертификат, действительный для всех этих имён. Эта директива использует глобальные настройки (см. другие директивы MD ниже). Если вам нужны специфические настройки для одного MD, используйте <MDomainSet>.

Для управляемого домена необходимы ещё 2 настройки: адрес электронной почты для связи (через MDContactEmail или ServerAdmin) и MDCertificateAgreement. Адрес электронной почты ServerAdmin используется для регистрации в ЦС (по умолчанию Let's Encrypt). ЦС может использовать его для уведомлений о изменениях в своих услугах или статусе ваших сертификатов.

Вторая настройка, MDCertificateAgreement, должна иметь значение "принято". Указав это, вы подтверждаете, что принимаете условия обслуживания ЦС.

Пример

MDContactEmail admin@example.org
MDCertificateAgreement accepted
MDomain example.org www.example.org

<VirtualHost *:443>
    ServerName example.org
    DocumentRoot htdocs/root

    SSLEngine on
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.org
    DocumentRoot htdocs/www

    SSLEngine on
</VirtualHost>

В этой директиве можно использовать два специальных имени: 'manual' и 'auto'. Это определяет, должен ли управляемый домен иметь точно тот же список имён, что и в конфигурации ('manual'), или предложить больше удобства. С 'auto' все имена виртуального хоста добавляются в MD. Удобно, что 'auto' также является значением по умолчанию.

Пример

MDomain example.org

<VirtualHost *:443>
    ServerName example.org
    ServerAlias www.example.org
    DocumentRoot htdocs/root

    SSLEngine on
</VirtualHost>

MDomain example2.org auto

<VirtualHost *:443>
    ServerName example2.org
    ServerAlias www.example2.org
    ...
</VirtualHost>

В этом примере домен 'www.example.org' автоматически добавляется в MD 'example.org'. Аналогично для 'example2.org', где 'auto' указано явно. При добавлении новых имён ServerAlias в этот виртуальный хост, они также будут добавлены в управляемый домен.

Если вы предпочитаете явно указывать все доменные имена, используйте режим 'manual'. Будет записана ошибка, если имена не совпадают с ожидаемыми.

<MDomainSet> Директива

Описание: Контейнер для директив, применяемых к одним и тем же управляемым доменам.
Синтаксис:
<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Это директива MDomain с добавлением возможности добавления настроек только для этого управляемого домена. Фактически, вы можете использовать "<MDomain ..>" как сокращение.

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

Пример

<MDomain sandbox.example.org>
    MDCertificateAuthority   https://someotherca.com/ACME
</MDomain>

Распространённый случай использования — настройка требований https для ваших доменов отдельно.

Пример

<MDomain example.org>
    MDRequireHttps temporary
</MDomain>

Директива MDPortMap

Описание: Сопоставление внешних и внутренних портов для проверки владения доменом.
Синтаксис:
MDPortMap map1 [ map2 ]
Значение по умолчанию:
MDPortMap http:80 https:443
Контекст: настройка сервера
Статус: Экспериментальный
Модуль: mod_md

Протокол ACME предлагает два метода проверки владения доменом через HTTP: один использующий URL 'http:' (порт 80) и один для 'https:' URL (порт 443). Если ваш сервер недоступен по хотя бы одному из двух, ACME может работать только с настройкой вашего DNS-сервера, см. MDChallengeDns01.

На большинстве публичных серверов 'http:' приходит на порт 80, а 'https:' на порт 443. Модуль проверяет порты, на которых работает ваш Apache сервер, и предполагает, что они доступны. Это означает, что если ваш сервер не работает на порту 80, он предполагает, что запросы 'http:' из интернета не будут работать.

Это предположение, и оно может быть неверным. Например, ваш Apache может работать на порту 80, но ваш брандмауэр может его блокировать. 'http:' доступен только в вашей внутренней сети. Таким образом, модуль ошибочно предположит, что Let's Encrypt может использовать 'http:'-вызовы с вашим сервером. Это затем провалится, потому что ваш брандмауэр будет отбрасывать эти запросы.

Пример

MDPortMap http:- https:8433

Приведенный выше пример показывает, как можно указать, что запросы 'http:' из интернета никогда не придут. Кроме того, он указывает, что запросы 'https:' придут на локальный порт 8433.

Это необходимо, если у вас есть переадресация портов, ваш сервер может быть доступен из интернета на порту 443, но локальный порт, который использует httpd, другой. Ваш сервер может работать только на портах 8443 и 8000, но быть доступным по портам 443 и 80 (из интернета).

END_OF_DOCUMENT_MARKER

Направление MDPrivateKeys

Описание: Устанавливает тип и размер генерируемых закрытых ключей.
Синтаксис:
MDPrivateKeys type [ params... ]
По умолчанию:
MDPrivateKeys RSA 2048
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md

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

Например, можно настроить ключи RSA и Эллиптической кривой (EC), чтобы для домена были созданы 2 сертификата. При подключении клиента будет использован первый поддерживаемый клиентом тип ключа.

Поскольку ключи EC и сертификаты меньше, их можно предлагать в первую очередь для всех совместимых (современных) клиентов. Это может ускорить установление соединения. Добавьте тип ключа RSA для поддержки более старых клиентов.

Пример

MDPrivateKeys secp256r1 rsa3072

Поддерживаемые типы EC зависят от используемого CA. Для Let's Encrypt поддерживаемые кривые включают 'secp256r1' и 'secp384r1'.

Каждый тип ключа и сертификата хранится в отдельном файле в хранилище MD. Тип ключа является частью имени файла с некоторыми обратной совместимыми именами для сертификатов RSA. Таким образом, вы можете продолжать обмениваться этими файлами с другими приложениями.

Обратите внимание, что это настройка влияет только на новые ключи. Любой существующий закрытый ключ остается без изменений. Кроме того, это влияет только на закрытые ключи, сгенерированные для сертификатов. Ключи учетных записей ACME не затрагиваются.

Направление MDRenewMode

Описание: Управляет обновлением сертификатов.
Синтаксис:
MDRenewMode always|auto|manual
По умолчанию:
MDRenewMode auto
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md

В режиме по умолчанию ('auto'), модуль выполнит действия, которые наиболее логичны для каждого управляемого домена. Для домена без сертификатов он получит их от центра сертификации.

Однако, если вы определили управляемый домен, который не используется ни одним из виртуальных хостов Apache, он не будет предпринимать действий. Для управляемых доменов со статическими файлами сертификатов (см. MDCertificateFile) он предполагает, что у вас есть собственный источник, и не будет их обновлять.

Вы можете переопределить это значение. Если вы укажете 'always', модуль обновит сертификаты для управляемого домена независимо от использования доменов или наличия статических файлов.

Для противоположного эффекта настройте 'manual', и попытка обновления не будет выполнена.

Направление MDRenewWindow

Описание: Управляет временем обновления сертификата.
Синтаксис:
MDRenewWindow duration
По умолчанию:
MDRenewWindow 33%
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md

Если срок действия сертификата опустится ниже заданного значения, mod_md получит новый подписанный сертификат.

Обычно сертификаты действительны около 90 дней, и mod_md обновит их за 33% до окончания срока действия (например, для 90-дневного сертификата - за 30 дней до истечения срока действия). Если вы считаете, что это не то, что вам нужно, вы можете указать точное время, как в примере:

Пример

# 21 days before expiry
MDRenewWindow 21d 
# 30 seconds (might be close)
MDRenewWindow 30s
# 10% of the cert lifetime
MDRenewWindow 10%

В режиме автоматического обновления модуль проверяет состояние управляемых доменов каждые 12 часов и, при необходимости, выполняет действия. При ошибках (например, недоступность CA) он первоначально повторно пытается подключиться через несколько секунд. Если попытки будут неудачными, интервал проверок будет увеличен до 1 часа.

Направление MDRequireHttps

Описание: Перенаправляет трафик http: на https: для управляемых доменов.
Синтаксис:
MDRequireHttps off|temporary|permanent
По умолчанию:
MDRequireHttps off
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md

Это удобное направление для упрощения миграции управляемых доменов с http: на https:. С помощью:

Пример

MDRequireHttps temporary

вы объявляете о желании перенаправлять весь трафик по http: URL на https: URL на текущий момент. Это безопасно, и вы можете удалить это направление в любое время.

Следующее имеет последствия: если вы хотите, чтобы клиенты больше не использовали http: URL, настройте:

Постоянно (как минимум на полгода!)

MDRequireHttps permanent

Это делает два вещи:

  1. Все запросы к ресурсам http: перенаправляются на тот же URL с использованием схемы https: и кодом состояния 301. Это сообщает клиентам, что это постоянное изменение, и они должны соответствующим образом обновить все ссылки.
  2. Все ответы на запросы https: будут содержать заголовок Strict-Transport-Security с сроком действия полгода. Это сообщает браузеру, что он никогда (в течение полугода) не должен использовать http: при работе с этим доменным именем. После этого браузеры откажутся от связи с вашим незашифрованным сайтом. Это предотвращает злоумышленным программам-посредникам от понижения уровня шифрования соединения и перехвата/манипулирования трафиком. Что хорошо. Но вы не можете просто отменить это изменение.

Вы можете добиться того же с помощью mod_alias и некоторых настроек Redirect, по сути. Если вы делаете это самостоятельно, убедитесь, что исключаете пути /.well-known/* из перенаправления, иначе mod_md может столкнуться с проблемами при подписи новых сертификатов.

Если вы устанавливаете это значение глобально, оно применяется ко всем управляемым доменам. Если вам нужно только для определенного домена, используйте:

Пример

<MDomain xxx.yyy>
  MDRequireHttps temporary
</MDomain>

Направление MDServerStatus

Описание: Управляет добавлением информации о управляемых доменах в server-status.
Синтаксис:
MDServerStatus on|off
По умолчанию:
MDServerStatus on
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md

Обработчик Apache 'server-status' позволяет настроить ресурс для мониторинга происходящего. Теперь он включает раздел со списком всех управляемых доменов с DNS-именами, статусом обновления, сроками действия и основными свойствами.

Вы можете отключить его с помощью этого направления.

Направление MDStapleOthers

Описание: Включить stapling для сертификатов, не управляемых mod_md.
Синтаксис:
MDStapleOthers on|off
По умолчанию:
MDStapleOthers on
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступно в версии 2.4.42 и более поздних

Это значение имеет эффект только при включенном MDStapling. Оно управляет тем, должен ли mod_md также предоставлять информацию о стаплинге для сертификатов, которые не управляются им напрямую, например, обновленных через ACME CA.

Направление MDStapling

Описание: Включить stapling для всех или для конкретного MDomain.
Синтаксис:
MDStapling on|off
По умолчанию:
MDStapling off
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступно в версии 2.4.42 и более поздних

mod_md предлагает реализацию для предоставления информации о OCSP stapling. Это альтернатива, предоставляемой mod_ssl. Для обеспечения обратной совместимости, она отключена по умолчанию.

Стаплинга можно включить для всех сертификатов на сервере или для отдельного MDomain. Это заменит любую конфигурацию стаплинга в mod_ssl для этих хостов. Когда отключено, работа будет выполняться стаплингом mod_ssl (если он сам включен, конечно). Это позволяет постепенный переход от одной реализации к другой.

Стаплинга mod_md также будет работать для доменов, где сертификаты не управляются этим модулем (см. MDStapleOthers для управления этим). Это позволяет использовать новый стаплинга без использования управления сертификатами ACME.

Направление MDStaplingKeepResponse

Описание: Управляет удалением старых ответов.
Синтаксис:
MDStaplingKeepResponse duration
По умолчанию:
MDStaplingKeepResponse 7d
Контекст: настройки сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступно в версии 2.4.42 и более поздних

Этот временной интервал задаёт, когда данные ответов OCSP, используемые в стаплинге, должны быть удалены из хранилища. Данные ответов, старше 7 дней (по умолчанию), удаляются при перезапуске/перезагрузке сервера. Это предотвращает рост хранилища при частых обновлениях/переконфигурациях сертификатов.

Директива MDStaplingRenewWindow

Описание: Управление временем обновления ответов стапля.
Синтаксис:
MDStaplingRenewWindow duration
По умолчанию:
MDStaplingRenewWindow 33%
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md
Совместимость: Доступно в версии 2.4.42 и более поздних

Если срок действия ответа OCSP, используемого для стапля, падает ниже duration, mod_md получит новый ответ OCSP.

Сертификационный центр, выдающий сертификат, обычно также управляет службой ответа OCSP и определяет, как долго его подписанные ответы о валидности сертификата остаются действительными. Чем дольше срок действия ответа, тем дольше его можно кэшировать, что приводит к лучшей общей производительности для всех. Чем короче срок действия, тем быстрее сведения о выводе сертификатов распространяются среди клиентов. Кроме того, учитывается надежность службы.

Регулируя окно обновления стапля, вы можете контролировать части этого самостоятельно. Если вы уменьшите время обновления (например, за короткий промежуток времени до истечения текущей информации), вы получите максимальное время кэширования. Но выход из строя службы (например, на техническое обслуживание) повлияет на вас. Если вы обновите за долгое время до истечения срока действия, обновления будут выполняться чаще, что создаст большую нагрузку на инфраструктуру сервера CA, а также большую координацию между дочерними процессами вашего сервера.

По умолчанию выбрано значение 33%, что означает, что обновление запускается, когда остается только треть срока действия ответа. Для CA, которая выдает ответы OCSP со сроком действия 3 дня, это означает 2 дня кэширования и 1 день для попыток обновления. Выход из строя службы должен длиться полные 24 часа, чтобы повлиять на ваши домены.

Также возможно установить абсолютное окно обновления, например, `2d` (2 дня).

Директива MDStoreDir

Описание: Путь на локальной файловой системе для хранения данных управляемых доменов.
Синтаксис:
MDStoreDir path
По умолчанию:
MDStoreDir md
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md

Определяет, где на локальной файловой системе хранятся данные управляемого домена. Это абсолютный путь или интерпретируется относительно корня сервера. По умолчанию будет создана директория 'md' в корне вашего сервера.

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

Директива MDWarnWindow

Описание: Определение временного окна, когда вы хотите получать предупреждения об истекающем сертификате.
Синтаксис:
MDWarnWindow duration
По умолчанию:
MDWarnWindow 10%
Контекст: конфигурация сервера
Статус: Экспериментальный
Модуль: mod_md

См. MDRenewWindow для описания способов указания времени.

Модуль проверяет оставшийся срок действия сертификатов и вызывает MDMessageCmd , когда осталось меньше, чем окно предупреждения. По умолчанию это означает 9 дней для сертификатов от Let's Encrypt.

Это также относится к управляемым доменам со статическими файлами сертификатов (см. MDCertificateFile).

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_md.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API