tls
Настраивает TLS для сайта.
По умолчанию настройки TLS в Caddy безопасны. Изменяйте их только если у вас есть веская причина и вы понимаете последствия. Чаще всего это будет указание адреса электронной почты для учетной записи ACME, изменение конечной точки CA ACME или предоставление собственных сертификатов.
Примечание о совместимости: из-за чувствительной природы TLS как протокола безопасности, преднамеренные изменения по умолчанию TLS могут быть внесены в новых мелких или исправительных выпусках. Старые или нерабочие версии TLS, шифры, функции и т. д. могут быть удалены в любое время. Если ваша развертка чрезвычайно чувствительна к изменениям, вы должны явно указать те значения, которые должны оставаться постоянными, и быть бдительными по поводу обновлений. В почти всех случаях мы рекомендуем использовать настройки по умолчанию.
Синтаксис
tls [internal|<email>] | [<cert_file> <key_file>] {
protocols <min> [<max>]
ciphers <cipher_suites...>
curves <groups...>
alpn <values...>
load <paths...>
ca <ca_dir_url>
ca_root <pem_file>
key_type ed25519|p256|p384|rsa2048|rsa4096
dns <provider_name> [<params...>]
propagation_timeout <duration>
propagation_delay <duration>
dns_ttl <duration>
dns_challenge_override_domain <domain>
resolvers <dns_servers...>
eab <key_id> <mac_key>
on_demand
reuse_private_keys
client_auth {
mode [request|require|verify_if_given|require_and_verify]
trust_pool <module>
verifier <module>
}
issuer <issuer_name> [<params...>]
get_certificate <manager_name> [<params...>]
insecure_secrets_log <log_file>
}
-
internal означает использование внутренней, локально доверенной CA Caddy для создания сертификатов для этого сайта. Для дальнейшей настройки издателя
internalиспользуйте поддирективуissuer. -
<email> — это адрес электронной почты, используемый для учетной записи ACME, управляющей сертификатами сайта. Вы можете использовать глобальный параметр
emailвместо этого, чтобы настроить его для всех ваших сайтов сразу.
-
<cert_file> и <key_file> — это пути к сертификату и закрытому ключу в формате PEM. Указание только одного из них недействительно.
-
protocols определяет минимальную и максимальную версии протокола. НЕ изменяйте их, если вы не знаете, что делаете. Настройка этого редко необходима, потому что Caddy всегда использует современные значения по умолчанию.
Значение по умолчанию для min:
tls1.2, Значение по умолчанию для max:tls1.3 -
ciphers — это список имен наборов шифров в порядке убывания предпочтения. НЕ изменяйте их, если вы не знаете, что делаете. Обратите внимание, что наборы шифров не настраиваются для TLS 1.3; и не все шифры TLS 1.2 включены по умолчанию. Поддерживаемые имена (в порядке предпочтения Go stdlib):
TLS_AES_128_GCM_SHA256TLS_CHACHA20_POLY1305_SHA256TLS_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHATLS_ECDHE_RSA_WITH_AES_128_CBC_SHATLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHATLS_ECDHE_RSA_WITH_AES_256_CBC_SHATLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
-
curves — это список EC-групп, которые необходимо поддерживать. Рекомендуется не изменять значения по умолчанию. Поддерживаемые значения:
-
x25519mlkem768(PQC) x25519secp256r1secp384r1secp521r1
-
-
alpn — это список значений, которые рекламируются в расширении ALPN TLS handshake.
-
load — указывает список папок, из которых загружать файлы PEM, содержащие пакеты сертификат+ключ.
-
ca — меняет конечную точку CA ACME. Это чаще всего используется для установки эталонной конечной точки Let's Encrypt при тестировании или внутреннем сервере ACME. (Чтобы изменить это значение для всего файла Caddyfile, используйте вместо этого глобальный параметр
acme_caглобальный параметр). -
ca_root — указывает файл PEM, содержащий доверенный корневой сертификат для конечной точки CA ACME, если он не находится в системном хранилище доверия.
-
key_type — тип ключа, используемого при создании CSR. Указывать только при наличии специальной потребности.
-
dns — включает использование DNS-вызова с помощью указанного плагина провайдера, который должен быть подключен из одного из репозиториев
caddy-dns. Каждый плагин провайдера может иметь свой собственный синтаксис после своего имени; для получения подробностей обратитесь к их документации. Поддержка каждого провайдера DNS — это совместная работа сообщества. Узнайте, как включить DNS-вызов для вашего провайдера на нашем вики-сайте. -
propagation_timeout — значение длительности, устанавливающее максимальное время ожидания появления записей DNS TXT при использовании DNS-вызова. Установите значение
-1, чтобы отключить проверки распространения. Значение по умолчанию: 2 минуты. -
propagation_delay — значение длительности, устанавливающее время ожидания перед началом проверок распространения записей DNS TXT при использовании DNS-вызова. Значение по умолчанию:
0(без ожидания). -
dns_ttl — значение длительности, устанавливающее TTL записи
TXT, используемой для DNS-вызова. Редко требуется. -
dns_challenge_override_domain — переопределяет домен, используемый для DNS-вызова. Это для делегирования вызова другому домену.
Вы можете захотеть использовать его, если у вашего основного доменного провайдера нет плагина DNS. Вы можете вместо этого добавить запись
CNAMEс поддоменом_acme-challengeв свой основной домен, указывающую на вторичный домен, для которого у вас есть плагин. Этот параметр не требует специальной поддержки со стороны плагина.Когда издатели ACME пытаются решить задачу DNS-вызова для вашего основного домена, они будут следовать по указанию
CNAMEв ваш вторичный домен, чтобы найти записьTXT.Примечание: Используйте полное каноническое имя из записи CNAME в качестве значения здесь — поддомен
_acme-challengeне будет автоматически добавлен. -
resolvers — настраивает DNS-резолверы, используемые при выполнении DNS-вызова; они имеют приоритет над системными резолверами или любыми значениями по умолчанию. Если заданы здесь, резолверы будут распространяться на все настроенные издатели сертификатов.
Обычно это список IP-адресов. Например, для использования Google Public DNS:
resolvers 8.8.8.8 8.8.4.4 -
eab — настраивает привязку внешней учетной записи ACME (EAB) для этого сайта, используя идентификатор ключа и ключ MAC, предоставленный вашей CA.
-
on_demand — включает On-Demand TLS для имен хостов, указанных в адресах блока сайта. Предупреждение о безопасности: делать это в рабочей среде небезопасно, если вы также не настроите
on_demand_tlsглобальный параметр, чтобы смягчить злоупотребления. -
reuse_private_keys — включает повторное использование закрытых ключей при обновлении сертификатов. По умолчанию для каждого нового сертификата создается новый ключ, чтобы смягчить привязку и уменьшить объем компрометации ключа. Привязка ключей противоречит лучшим практикам отрасли. Этот параметр не рекомендуется, если у вас нет конкретной причины для его использования; он может быть удален в будущей версии.
-
client_auth — включает и настраивает проверку подлинности клиента TLS:
-
mode — режим проверки подлинности клиента. Разрешенные значения:
Режим Описание request Запрашивает у клиентов сертификат, но разрешает даже без него; не проверяет его require Требует от клиентов представления сертификата, но не проверяет его verify_if_given Запрашивает у клиентов сертификат; разрешает даже без него, но проверяет его, если он есть require_and_verify Требует от клиентов представления действительного сертификата, который проверяется Значение по умолчанию:
require_and_verify, если предоставлен модульtrust_pool; в противном случае,require. -
trust_pool — настраивает источник центров сертификации (CA), предоставляющих сертификаты для проверки сертификатов клиентов.
Используемый центр сертификации, предоставляющий пул доверенных сертификатов и конфигурация в разделе зависят от настроенного источника модуля хранилища доверия. Стандартные модули, доступные в Caddy, перечислены ниже. Полный список модулей, включая сторонние, перечислен в
trust_poolJSON-документации.Можно использовать несколько директив
trusted_*для указания нескольких CA или листовых сертификатов. Сертификаты клиентов, которые не перечислены как один из листовых сертификатов или не подписаны ни одним из указанных центров сертификации, будут отклонены в соответствии с режимом mode. -
verifier — включает использование настраиваемого модуля верификатора сертификатов клиентов. Они могут выполнять пользовательские проверки проверки подлинности клиента, например, обеспечивать отсутствие аннулирования сертификата.
-
-
issuer — настраивает пользовательского издателя сертификатов или источник, из которого получать сертификаты.
Используемый издатель и параметры, которые следуют в этом разделе, зависят от доступных модулей издателей. Некоторые другие поддирективы, такие как
caиdns, на самом деле являются сокращениями для настройки издателяacme(и эта поддиректива была добавлена позже), поэтому указание этой директивы и некоторых других является запутанным и поэтому запрещено.Эта поддиректива может быть указана несколько раз для настройки нескольких дублирующих издателей; если один издатель не сможет выдать сертификат, будет опробован следующий.
-
get_certificate — включает получение сертификатов из модуля менеджера сертификатов в момент рукопожатия.
-
insecure_secrets_log — включает протоколирование TLS-секретов в файл. Это также известно как
SSLKEYLOGFILE. Использует формат протоколирования ключей NSS, который затем можно обработать с помощью Wireshark или других инструментов. ⚠️ Предупреждение о безопасности: это небезопасно, так как позволяет другим программам или инструментам расшифровать TLS-соединения, а значит, полностью компрометирует безопасность. Однако эта функция может быть полезной для отладки и устранения неполадок.
Провайдеры хранилища доверия
Это стандартные провайдеры хранилища доверия, которые могут использоваться в поддирективе trust_pool:
inline
Модуль inline парсит доверенные корневые сертификаты, перечисленные в файле Caddyfile, непосредственно в формате base64 DER. Директива trust_der может быть повторена несколько раз.
trust_pool inline {
trust_der <base64_der>
}
- trust_der — это закодированный в base64 DER сертификат CA, с помощью которого проверяются клиентские сертификаты.
file
Модуль file считывает доверенные корневые сертификаты из файлов PEM с диска. Директива pem_file может принимать несколько путей к файлам в одной строке и может быть повторена несколько раз.
... file [<pem_file>...] {
pem_file <pem_file>...
}
- pem_file — путь к файлу PEM сертификата CA, используемому для проверки клиентских сертификатов.
pki_root
Модуль pki_root получает корневые и доверенные сертификаты от уполномоченного центра сертификации, определенного в приложении PKI. Директива authority может принимать несколько центров сертификации одновременно и может быть повторена несколько раз.
... pki_root [<ca_name>...] {
authority <ca_name>...
}
- authority — имя центра сертификации, настроенного в приложении PKI.
pki_intermediate
Модуль pki_intermediate получает промежуточные и доверенные сертификаты от уполномоченного центра сертификации, определенного в приложении PKI. Директива authority может принимать несколько центров сертификации одновременно и может быть повторена несколько раз.
... pki_intermediate [<ca_name>...] {
authority <ca_name>...
}
- authority — имя центра сертификации, настроенного в приложении PKI.
storage
Модуль storage извлекает доверенные корневые сертификаты из хранилища Caddy storage. Директива authority может принимать несколько центров сертификации одновременно и может быть повторена несколько раз.
... storage [<storage_keys>...] {
storage <storage_module>
keys <storage_keys>...
}
-
storage — необязательный модуль хранилища для использования. Если не указан, будет использоваться модуль хранилища по умолчанию. Если указан, он может быть указан только один раз.
-
keys — список ключей хранилища, в которых хранятся файлы PEM сертификатов. Директива принимает несколько значений в одной строке и может быть указана несколько раз.
http
Модуль http получает доверенные сертификаты с HTTP-точек входа. Директива endpoints может принимать несколько точек входа одновременно и может быть повторена несколько раз.
... http [<endpoints...>] {
endpoints <endpoints...>
tls <tls_config>
}
-
endpoints — список HTTP-точек входа, с которых получать сертификаты. Директива принимает несколько значений в одной строке и может быть указана несколько раз.
-
tls — необязательная конфигурация TLS для использования при подключении к HTTP-точке входа. Разбор сегментов определен в следующем разделе.
TLS
... {
ca <ca_module>
insecure_skip_verify
handshake_timeout <duration>
server_name <name>
renegotiation <never|once|freely>
}
-
ca — необязательная директива для определения поставщика пула доверия. Конфигурация следует той же логике, что и
trust_pool. Если указана, может быть указана только один раз. -
insecure_skip_verify — отключает проверку рукопожатия TLS, делая соединение небезопасным и уязвимым к атакам «человек посередине». Не использовать в рабочей среде. Проверка выполняется либо с использованием сертификатов, доверенных системой, либо как определено директивой
ca. -
handshake_timeout — максимальное время ожидания завершения рукопожатия TLS. По умолчанию: без таймаута.
-
server_name — устанавливает имя сервера, используемое при проверке сертификата, полученного во время рукопожатия TLS. По умолчанию используется имя хоста из адреса upstream.
-
renegotiation — устанавливает уровень переподключения TLS. Переподключение TLS — это акт выполнения последующих рукопожатий после первого. Уровень может быть одним из:
-
never(по умолчанию) отключает переподключение. -
onceразрешает удаленному серверу запросить переподключение один раз на соединение. -
freelyразрешает удаленному серверу многократно запрашивать переподключение.
-
Сертификационные центры
Эти центры сертификации поставляются по умолчанию с директивой tls:
acme
Получает сертификаты с помощью протокола ACME. Обратите внимание, что acme является центром сертификации по умолчанию (используя Let's Encrypt), поэтому его явное конфигурирование обычно не требуется.
... acme [<directory_url>] {
dir <directory_url>
test_dir <test_directory_url>
email <email>
timeout <duration>
disable_http_challenge
disable_tlsalpn_challenge
alt_http_port <port>
alt_tlsalpn_port <port>
eab <key_id> <mac_key>
trusted_roots <pem_files...>
dns [<provider_name> [<options>]]
propagation_timeout <duration>
propagation_delay <duration>
dns_ttl <duration>
dns_challenge_override_domain <domain>
resolvers <dns_servers...>
preferred_chains [smallest] {
root_common_name <common_names...>
any_common_name <common_names...>
}
}
-
dir — URL каталога ACME CA.
По умолчанию:
https://acme-v02.api.letsencrypt.org/directory -
test_dir — необязательный резервный каталог для использования при повторных попытках; если все попытки завершаются неудачно, эта точка входа будет использована во время повторных попыток; полезно, если у CA есть тестовая точка входа, где вы хотите избежать ограничений по скорости на их основной точке входа.
По умолчанию:
https://acme-staging-v02.api.letsencrypt.org/directory -
email — адрес электронной почты контакта учетной записи ACME.
-
timeout — значение длительности, устанавливающее время ожидания перед истечением срока действия операции ACME.
-
disable_http_challenge — отключит HTTP-вызов.
-
disable_tlsalpn_challenge — отключит TLS-ALPN-вызов.
-
alt_http_port — альтернативный порт, на котором будет выполняться HTTP-вызов; он должен быть на порту 80, поэтому вам нужно перенаправлять пакеты на этот альтернативный порт.
-
alt_tlsalpn_port — альтернативный порт, на котором будет выполняться TLS-ALPN-вызов; он должен быть на порту 443, поэтому вам нужно перенаправлять пакеты на этот альтернативный порт.
-
eab — указывает привязку внешнего аккаунта, которая может потребоваться для некоторых ACME CA.
-
trusted_roots — один или несколько корневых сертификатов (в виде имен файлов PEM) для доверия при подключении к серверу ACME CA.
-
dns — настраивает DNS-вызов. Необходимо указать поставщика, если
dnsглобальный параметр не указывает глобально-применимый модуль DNS-поставщика. -
propagation_timeout — значение длительности, устанавливающее максимальное время ожидания появления записей DNS TXT при использовании DNS-вызова. Установите
-1, чтобы отключить проверки распространения. По умолчанию 2 минуты. -
propagation_delay — значение длительности, устанавливающее время ожидания перед запуском проверок распространения записей DNS TXT при использовании DNS-вызова. По умолчанию 0 (без ожидания).
-
dns_ttl — значение длительности, устанавливающее TTL записи
TXT, используемой для DNS-вызова. Редко требуется. -
dns_challenge_override_domain — переопределяет домен для использования в DNS-вызове. Это необходимо для делегирования вызова другому домену.
Это может потребоваться, если у вашего основного DNS-поставщика нет доступного DNS-плагина. Вместо этого вы можете добавить запись
CNAMEс поддоменом_acme-challengeв свой основной домен, указывая на вторичный домен, для которого у вас есть плагин. Этот параметр не требует специальной поддержки от плагина.При попытке решения DNS-вызова для вашего основного домена центры сертификации ACME будут следовать по
CNAMEдо вашего вторичного домена, чтобы найти записьTXT.Примечание: Здесь используйте полное каноническое имя из записи CNAME в качестве значения — поддомен
_acme-challengeне будет автоматически добавлен. -
resolvers — настраивает DNS-резолверы, используемые при выполнении DNS-вызова; они имеют приоритет над системными резолверами или любыми значениями по умолчанию. Если указаны здесь, резолверы будут распространяться на все настроенные центры сертификации.
Обычно это список IP-адресов. Например, для использования Google Public DNS:
resolvers 8.8.8.8 8.8.4.4 -
preferred_chains — указывает, какие цепочки сертификатов Caddy должен предпочитать; полезно, если ваш CA предоставляет несколько цепочек. Используйте один из следующих вариантов:
-
smallest — укажет Caddy предпочитать цепочки с наименьшим количеством байтов.
-
root_common_name — список одного или нескольких общих имен; Caddy выберет первую цепочку, у которой корень соответствует хотя бы одному из указанных общих имен.
-
any_common_name — список одного или нескольких общих имен; Caddy выберет первую цепочку, у которой эмитент соответствует хотя бы одному из указанных общих имен.
-
zerossl
Получает сертификаты, используя собственный API для выдачи сертификатов ZeroSSL. Требуется ключ API, а оплата может потребоваться в зависимости от вашего плана. Обратите внимание, что этот метод отличается от ZeroSSL ACME endpoint. Чтобы использовать ZeroSSL ACME endpoint, используйте описанный выше сертификационный центр acme, настроенный с точкой входа ACME ZeroSSL.
... zerossl <api_key> {
validity_days <days>
alt_http_port <port>
dns <provider_name> ...
propagation_delay <duration>
propagation_timeout <duration>
resolvers <list...>
dns_ttl <duration>
}
- validity_days — определяет срок действия сертификата. Принимаются только определенные значения; подробности см. в документации ZeroSSL.
- alt_http_port — порт для завершения HTTP-валидации ZeroSSL, если не порт 80.
-
dns — включает метод валидации CNAME, используя указанного DNS-поставщика с заданной конфигурацией для автоматического предоставления записей. DNS-плагин должен быть установлен из репозиториев
caddy-dns. Каждый плагин поставщика может иметь свою собственную синтаксическую конструкцию после своего имени; для получения подробной информации обратитесь к их документации. Поддержка каждого DNS-поставщика является совместной работой сообщества. - propagation_delay — время ожидания перед проверкой распространения записи CNAME.
- propagation_timeout — время ожидания распространения записи CNAME перед отказом.
- resolvers — определяет пользовательские DNS-резолверы для использования при проверке распространения записи CNAME.
- dns_ttl — настраивает TTL для записей CNAME, созданных в рамках процесса валидации.
internal
Получает сертификаты от внутреннего центра сертификации.
... internal {
ca <name>
lifetime <duration>
sign_with_root
}
-
ca — имя внутреннего CA для использования. По умолчанию:
local. См. глобальные параметры приложения PKI для настройкиlocalCA или создания альтернативных CA.По умолчанию, у корневого сертификата CA срок действия —
3600d(10 лет), а у промежуточного —7d(7 дней).Caddy попытается установить корневой сертификат CA в хранилище доверия системы, но это может не удаться, когда Caddy работает как пользователь без привилегий или в контейнере Docker. В этом случае корневой сертификат CA необходимо установить вручную, используя команду
caddy trustили скопировав его из контейнера. -
lifetime — значение продолжительности, определяющее срок действия выданных внутренним образом сертификатов. По умолчанию:
12h. Изменять его не рекомендуется, если это не абсолютно необходимо. Он должен быть короче срока действия промежуточного сертификата. -
sign_with_root — принудительно устанавливает корневой сертификат в качестве издателя вместо промежуточного. Это НЕ рекомендуется и следует использовать только в том случае, если устройства/клиенты некорректно проверяют цепочки сертификатов (очень редкий случай).
Управляющие модули сертификатов
Модули управления сертификатами отличаются от модулей издателей тем, что использование модулей управления подразумевает, что внешняя утилита или служба обновляют сертификат, в то время как модуль издателя подразумевает, что сам Caddy управляет сертификатом. (Модули издателей принимают на вход запрос на подпись сертификата (CSR), а модули управления сертификатами — TLS ClientHello).
Эти модули управления сертификатами поставляются по умолчанию с директивой tls:
tailscale
Получение сертификатов от локально работающего экземпляра Tailscale. HTTPS должен быть включен в вашем аккаунте Tailscale (или вашем открытом сервере Headscale); процесс Caddy должен выполняться с правами root или вы должны настроить tailscaled, чтобы предоставить вашему пользователю Caddy разрешение на получение сертификатов.
ПРИМЕЧАНИЕ: Это обычно не нужно! Caddy автоматически использует Tailscale для всех *.ts.net доменов без дополнительной настройки.
get_certificate tailscale # often unnecessary!
http
Получение сертификатов путём выполнения HTTP(S) запроса. Ответ должен иметь код состояния 200, а тело должно содержать цепочку PEM, включающую полный сертификат (с промежуточными) и закрытый ключ.
get_certificate http <url>
-
url — полностью квалифицированный URL, к которому нужно отправить запрос. Для повышения производительности настоятельно рекомендуется использовать локальный конечный пункт. URL будет дополнен следующими параметрами запроса:
-
server_name: значение SNI -
signature_schemes: список алгоритмов подписи, разделённый запятыми (в шестнадцатеричном формате) -
cipher_suites: список шифровальных наборов, разделённый запятыми (в шестнадцатеричном формате)
-
Примеры
Использование пользовательского сертификата и ключа. Сертификат должен содержать SAN, соответствующие адресу сайта:
example.com {
tls cert.pem key.pem
}
Использование локально доверенных сертификатов для всех хостов текущего блока сайта вместо общедоступных сертификатов через ACME / Let's Encrypt (полезно в средах разработки):
example.com {
tls internal
}
Использование локально доверенных сертификатов, но управление по требованию вместо фоновой работы. Это позволяет назначать любой домен на ваш экземпляр Caddy и автоматически получать для него сертификат. ЭТО НЕ следует использовать, если ваш экземпляр Caddy доступен в общедоступной сети, так как злоумышленник может использовать его для истощения ресурсов вашего сервера:
https:// {
tls internal {
on_demand
}
}
Использование пользовательских параметров для внутреннего CA (нельзя использовать сокращение tls internal):
example.com {
tls {
issuer internal {
ca foo
}
}
}
Указание адреса электронной почты для вашего аккаунта ACME (но, если используется только один адрес электронной почты для всех сайтов, мы рекомендуем использовать глобальный параметр email глобального параметра вместо этого):
example.com {
tls your@email.com
}
Включение DNS-проверки для домена, управляемого в Cloudflare, с данными учётной записи в переменной среды. Это открывает поддержку подстановочных символов в сертификатах, что требует проверки по DNS:
*.example.com {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}
Получение цепочки сертификатов через HTTP вместо управления ею Caddy. Обратите внимание, что get_certificate подразумевает, что on_demand включён, что приводит к получению сертификатов с помощью модуля вместо запуска выдачи ACME:
https:// {
tls {
get_certificate http http://localhost:9007/certs
}
}
Включение проверки TLS-клиентов и требование предоставления клиентами действительного сертификата, проверенного по всем предоставленным CA через поставщика trust_pool file:
example.com {
tls {
client_auth {
trust_pool file ../caddy.ca.cer ../root.ca.cer
}
}
}
© 2015-2025 Matthew Holt and The Caddy Authors
Licensed under the Apache License 2.0.
Caddy is a registered trademark of Stack Holdings GmbH.
https://caddyserver.com/docs/caddyfile/directives/tls