Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

πŸ” NGINX Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сам ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ SSL-сСртификаты: ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ACME Π±Π΅Π· костылСй

12 августа 2025 Π³ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° NGINX сдСлала Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΆΠ΄Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½Ρ‹ ΠΈ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹: прСдставила ngx_http_acme_module β€” Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ACME прямо Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ для автоматичСского получСния ΠΈ продлСния TLS-сСртификатов большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Certbot ΠΈΠ»ΠΈ acme.sh β€” всё дСлаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ NGINX. ACME (Automated Certificate Management Environment) β€” это ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», созданный Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ Let’s Encrypt Π² 2015 Π³ΠΎΠ΄Ρƒ. Он ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» процСсс: Π”ΠΎ ACME Π°Π΄ΠΌΠΈΠ½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ CSR, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€ сСртификации, ΠΆΠ΄Π°Ρ‚ΡŒ письма, Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π²Π΅Π±-ΠΊΠΎΡ€Π΅Π½ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ β€” ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ это ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 90 Π΄Π½Π΅ΠΉ. БСйчас это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ строкой Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅. NGINX ΠΏΠΎΡˆΡ‘Π» ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ написал ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° Rust SDK, доступный ΠΊΠ°ΠΊ динамичСскоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ для Open Source-вСрсии, ΠΈ для NGINX Plus. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ появились Π½ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹: ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Let’s Encrypt: acme_issuer letse
ОглавлСниС
Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ с Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠΎΠΌ NGINX, Π·Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΈ сСртификатами, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ установку ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SSL/TLS-сСртификатов Ρ‡Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ACME-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°.
Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ с Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠΎΠΌ NGINX, Π·Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΈ сСртификатами, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ установку ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SSL/TLS-сСртификатов Ρ‡Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ACME-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°.

12 августа 2025 Π³ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° NGINX сдСлала Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΆΠ΄Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½Ρ‹ ΠΈ DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹: прСдставила ngx_http_acme_module β€” Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ACME прямо Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвСра. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ для автоматичСского получСния ΠΈ продлСния TLS-сСртификатов большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Certbot ΠΈΠ»ΠΈ acme.sh β€” всё дСлаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ NGINX.

🧩 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ACME ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½

ACME (Automated Certificate Management Environment) β€” это ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», созданный Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ Let’s Encrypt Π² 2015 Π³ΠΎΠ΄Ρƒ. Он ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» процСсс:

  • πŸ“œ запроса ΠΈ выпуска сСртификата,
  • βœ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ владСния Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ,
  • ♻️ продлСния ΠΈ ΠΎΡ‚Π·Ρ‹Π²Π°.

Π”ΠΎ ACME Π°Π΄ΠΌΠΈΠ½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ CSR, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€ сСртификации, ΠΆΠ΄Π°Ρ‚ΡŒ письма, Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π²Π΅Π±-ΠΊΠΎΡ€Π΅Π½ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ β€” ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ это ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 90 Π΄Π½Π΅ΠΉ. БСйчас это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ строкой Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅.

βš™οΈ Как это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² NGINX

NGINX ΠΏΠΎΡˆΡ‘Π» ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ написал ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° Rust SDK, доступный ΠΊΠ°ΠΊ динамичСскоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈ для Open Source-вСрсии, ΠΈ для NGINX Plus.

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ появились Π½ΠΎΠ²Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

  • 🏷 acme_issuer β€” Π·Π°Π΄Π°Ρ‘Ρ‚ ACME-сСрвСр (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Let’s Encrypt) ΠΈ ΠΏΡƒΡ‚ΡŒ для хранСния Π΄Π°Π½Π½Ρ‹Ρ….
  • πŸ“¦ acme_shared_zone β€” общая ΠΏΠ°ΠΌΡΡ‚ΡŒ для сСртификатов, ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ challenge-Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 256K).
  • πŸ”‘ acme_certificate β€” автоматичСская Π²Ρ‹Π΄Π°Ρ‡Π°/ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ сСртификатов для Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΈΠ· server_name.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Let’s Encrypt:

acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service;
}

acme_shared_zone zone=acme_shared:1M;

server {
listen 80;
return 404;
}

server {
listen 443 ssl;
server_name example.com;
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
}

πŸ›  ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии

  • πŸ“ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ HTTP-01 challenge (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 80 ΠΏΠΎΡ€Ρ‚).
  • ❌ НСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ TLS-ALPN ΠΈ DNS-01 (Π² Ρ‚ΠΎΠΌ числС для wildcard-сСртификатов) β€” ΠΏΠΎΠΊΠ° Π² ΠΏΠ»Π°Π½Π°Ρ….
  • πŸ” РСгулярныС выраТСния ΠΈ подстановки Π² server_name нСдоступны.

πŸ’‘ ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ

БСйчас процСсс получСния сСртификатов часто зависит ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… скриптов ΠΈ cron-Π·Π°Π΄Π°Ρ‡, Ρ‡Ρ‚ΠΎ:

  • ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ риск ошибок ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… обновлСниях;
  • создаёт Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ сторонних ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²;
  • услоТняСт Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈ CI/CD.

Π‘ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ACME:

  • πŸ” ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ (мСньшС софта β€” мСньшС уязвимостСй),
  • πŸš€ упрощаСтся автоматизация (всё Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС β€” Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ NGINX),
  • πŸ“¦ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…).

Для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… инфраструктур, особСнно с микросСрвисами ΠΈ IoT, это ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ Ρ†Π΅Π»Ρ‹ΠΉ класс Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

πŸ“Š ΠœΠΎΡ‘ ΠΌΠ½Π΅Π½ΠΈΠ΅

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ этот шаг Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΈ Π΄Π°Π²Π½ΠΎ Π½Π°Π·Ρ€Π΅Π». Certbot ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ, Π½ΠΎ для DevOps-процСссов, Π³Π΄Π΅ цСнится ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй, встроСнный ACME β€” ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ плюс. ОсобСнно это Π²Π°ΠΆΠ½ΠΎ для Kubernetes-инфраструктур, Π³Π΄Π΅ NGINX часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Ingress-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€: лишниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ для сСртификатов просто ΠΎΡ‚ΠΏΠ°Π΄ΡƒΡ‚.

Если NGINX Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ DNS-01 ΠΈ wildcard Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅, Ρ‚ΠΎ внСшниС ACME-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠΌ станут просто Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

πŸ”— Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ: