Поставщики сертификатов — sing-box
Поставщики сертификатов получают и продлевают серверные TLS-сертификаты для входящих. Объявите их в массиве верхнего уровня certificate_providers и сошлитесь на один из них в блоке tls входящего через certificate_provider — по тегу или встроенно, объектом с собственным type. Типов три: acme (Let's Encrypt, ZeroSSL или любой УЦ с ACME), cloudflare-origin-ca (сертификаты Cloudflare Origin CA) и tailscale (сертификат узла в tailnet через конечную точку Tailscale). Они заменяют встроенный блок tls.acme, который устарел.
Конверт
У каждой записи certificate_providers[] есть type и tag, а также поля её типа на том же уровне:
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
type | string | (required) | acme | cloudflare-origin-ca | tailscale | Тип поставщика; определяет, какой набор полей ниже применяется. Неизвестный тип вызывает ошибку при запуске. |
tag | string | (unset) | <string> | Имя, на которое ссылаются поля tls.certificate_provider входящих. Встроенные поставщики его не используют. |
Исходный код: option/certificate_provider.go:18-22 · зафиксировано на v1.14.2 (af6e64c)
Входящее использует поставщика через tls.certificate_provider: строка — это тег записи certificate_providers, объект — встроенный поставщик с собственным type. Как это сочетается с certificate / key, встроенным блоком acme и REALITY, см. на странице TLS.
acme
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
domain | badoption.Listable[string] | (required) | <domain> | <IP address> | Имена, для которых выпускаются сертификаты. IP-адреса допускаются (см. profile). |
data_directory | string | $XDG_DATA_HOME/certmagic | <dir path> | Где хранятся данные учётной записи ACME и сертификаты. Запасной вариант — $HOME/.local/share/certmagic. |
default_server_name | string | (unset) | <hostname> | Имя сервера для выбора сертификата, когда ClientHello не содержит SNI. |
email | string | (unset) | <e-mail> | E-mail для создания или выбора учётной записи ACME. |
provider | string | letsencrypt | letsencrypt | zerossl | <https:// directory URL> | Удостоверяющий центр ACME. Для zerossl нужен один из external_account, email или account_key; при email без external_account учётные данные EAB запрашиваются автоматически. |
account_key | string | (unset) | <PEM key> | Закрытый ключ PEM существующей учётной записи ACME для повторного использования. |
disable_http_challenge | bool | false | true | false | Отключить проверку HTTP-01. |
disable_tls_alpn_challenge | bool | false | true | false | Отключить проверку TLS-ALPN-01. |
alternative_http_port | uint16 | 80 | <port> | Порт слушателя проверки HTTP-01 вместо 80; порт 80 всё равно должен вести на него. |
alternative_tls_port | uint16 | 443 | <port> | Порт слушателя проверки TLS-ALPN-01 вместо 443; система должна перенаправлять 443 на него. |
external_account | *ACMEExternalAccountOptions | (unset) | { key_id, mac_key } | Привязка внешней учётной записи (EAB): идентификатор ключа и MAC-ключ, выданные УЦ по отдельному каналу. |
dns01_challenge | *ACMEProviderDNS01ChallengeOptions | (unset) | ACMEProviderDNS01ChallengeOptions | Использовать проверку DNS-01 (см. ниже). Если задано, другие типы проверок отключаются. |
key_type | ACMEKeyType | (library default) | ed25519 | p256 | p384 | rsa2048 | rsa4096 | Тип закрытого ключа для новых сертификатов. |
profile | string | (unset) | <ACME profile> | Запрашиваемый профиль ACME. С Let's Encrypt shortlived выбирается автоматически, если среди доменов есть IP-адрес. |
http_client | *HTTPClientOptions | (default client) | <http_clients tag> | HTTPClientOptions | HTTP-клиент для всех запросов ACME: встроенный объект или тег записи http_clients. |
Исходный код: option/acme.go:15-31 · зафиксировано на v1.14.2 (af6e64c)
Проверка DNS-01
dns01_challenge принимает provider с учётными данными этого провайдера и следующие поля настройки:
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
ttl | badoption.Duration | (provider default) | <duration> | TTL временной TXT-записи _acme-challenge. |
propagation_delay | badoption.Duration | 0s | <duration> | Сколько ждать после создания записи, прежде чем проверять её распространение. |
propagation_timeout | badoption.Duration | (library default) | <duration> | -1 | Сколько максимум ждать распространения; -1 отключает проверки распространения. |
resolvers | badoption.Listable[string] | (system) | <resolver> | … | DNS-резолверы для проверок распространения. |
override_domain | string | (unset) | <domain> | Записывать запись проверки под этим доменом — для имени _acme-challenge, делегированного в другую зону. |
Исходный код: option/acme.go:41-47 · зафиксировано на v1.14.2 (af6e64c)
provider | Поля учётных данных |
|---|---|
alidns | access_key_id, access_key_secret, region_id, security_token (временные учётные данные STS) |
cloudflare | api_token, zone_token (необязательный токен с Zone:Read, позволяющий ограничить api_token одной зоной) |
acmedns | username, password, subdomain, server_url (сервер ACME-DNS) |
cloudflare-origin-ca
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
domain | badoption.Listable[string] | (required) | <domain> | *.<domain> | Имена хостов, включая wildcard, которые попадут в сертификат. |
data_directory | string | $XDG_DATA_HOME/certmagic | <dir path> | Корневой каталог для выпущенного сертификата, закрытого ключа и метаданных. Умолчание такое же, как у поставщика ACME. |
api_token | string | (unset) | <token> | API-токен Cloudflare с правом Zone / SSL and Certificates / Edit. Требуется ровно один из api_token и origin_ca_key. |
origin_ca_key | string | (unset) | <key> | Cloudflare Origin CA Key — альтернативные учётные данные. Несовместим с api_token. |
request_type | CloudflareOriginCARequestType | origin-rsa | origin-rsa | origin-ecc | Запрашиваемый тип ключа: RSA или ECDSA P-256. |
requested_validity | CloudflareOriginCARequestValidity | 5475 | 7 | 30 | 90 | 365 | 730 | 1095 | 5475 | Срок действия сертификата в днях (5475 = 15 лет). |
http_client | *HTTPClientOptions | (default client) | <http_clients tag> | HTTPClientOptions | HTTP-клиент для запросов к API Cloudflare: встроенный объект или тег записи http_clients. |
Исходный код: option/origin_ca.go:12-20 · зафиксировано на v1.14.2 (af6e64c)
tailscale
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
endpoint | string | (required) | <endpoint tag> | Тег конечной точки Tailscale, чей сертификат узла (для его имени *.ts.net) отдаётся. В консоли администратора Tailscale должны быть включены MagicDNS и HTTPS. |
Исходный код: option/tailscale.go:78-80 · зафиксировано на v1.14.2 (af6e64c)
Примеры
Общий поставщик ACME с проверкой DNS-01 через Cloudflare, на который ссылаются по тегу:
{
"certificate_providers": [
{
"type": "acme",
"tag": "le",
"domain": ["example.com"],
"email": "admin@example.com",
"dns01_challenge": {
"provider": "cloudflare",
"api_token": "<cloudflare-api-token>"
}
}
],
"inbounds": [
{
"type": "trojan",
"tag": "trojan-in",
"listen": "::",
"listen_port": 443,
"users": [{ "name": "user", "password": "<password>" }],
"tls": {
"enabled": true,
"certificate_provider": "le"
}
}
]
}Сертификат tailnet конечной точки Tailscale; входящее затем задаёт "certificate_provider": "ts-cert":
{
"endpoints": [
{ "type": "tailscale", "tag": "ts-ep", "auth_key": "tskey-auth-xxxxxxxxxxxx" }
],
"certificate_providers": [
{ "type": "tailscale", "tag": "ts-cert", "endpoint": "ts-ep" }
]
}Переход со встроенного tls.acme
Перенесите поля tls.acme без изменений в tls.certificate_provider, добавив "type": "acme" (или в запись certificate_providers, на которую ссылаются по тегу):
// до (устарело)
"tls": { "enabled": true, "acme": { "domain": ["example.com"], "email": "admin@example.com" } }
// после
"tls": { "enabled": true, "certificate_provider": { "type": "acme", "domain": ["example.com"], "email": "admin@example.com" } }Примечания
- Теги сборки:
acmeтребуетwith_acme,tailscale—with_tailscale; без них тип существует, но запуск завершается ошибкой.cloudflare-origin-caкомпилируется всегда. - На поставщика с тегом могут ссылаться несколько входящих.
- Сертификатам Cloudflare Origin CA доверяет только сама граница Cloudflare. Используйте их на серверах-источниках за прокси Cloudflare, а не для клиентов, подключающихся напрямую. Поставщик автоматически продлевает их до истечения срока.
- Поставщик
tailscaleзавершает запуск ошибкой, еслиendpointпуст, не найден или не является конечной точкой Tailscale. - Поля ACME совпадают с устаревшим встроенным блоком
tls.acme, плюсaccount_key,key_type,profileиhttp_client.
Сравнение с другими ядрами
- У Xray-core нет встроенного ACME или поставщиков сертификатов: серверные сертификаты берутся из файлов или встроенного PEM в
tlsSettings.certificates. См. TLS — Xray-core. - У mihomo их тоже нет: слушатели принимают сертификат и закрытый ключ напрямую. См. Обзор TLS — mihomo.
Исходный код: option/certificate_provider.go:18-69 · v1.14.2 (af6e64c)
