Skip to content

teslaproduuction/TLScript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

18 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TLScript - SSL Certificate Management

πŸ‡·πŸ‡Ί Русский | πŸ‡ΊπŸ‡Έ English


Русский

Набор bash-скриптов для управлСния SSL сСртификатами Π½Π° Linux сСрвСрах с автоматичСским ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ΠΌ.

πŸ“‹ ОписаниС

Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит инструмСнты для простого ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ управлСния SSL сСртификатами:

πŸš€ Быстрый старт

Установка ΠΈ использованиС cert_manager.sh

# Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ скрипт
wget https://github.com/teslaproduuction/TLScript/raw/main/cert_manager.sh
chmod +x cert_manager.sh

# Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ мСню
sudo ./cert_manager.sh

# Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прямыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
sudo ./cert_manager.sh install    # Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости
sudo ./cert_manager.sh issue      # Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат

πŸ“– ВозмоТности

SSL Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ‹

ACME.SH ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Let's Encrypt/ZeroSSL)

  • βœ… HTTP валидация (ΠΏΠΎΡ€Ρ‚ 80)
  • βœ… Cloudflare DNS валидация
  • βœ… AWS Route53 DNS валидация
  • βœ… Google Cloud DNS валидация
  • βœ… DigitalOcean DNS валидация
  • βœ… ZeroSSL ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ CA

Certbot ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

  • βœ… Standalone Ρ€Π΅ΠΆΠΈΠΌ (ΠΏΠΎΡ€Ρ‚ 80)
  • βœ… Webroot Ρ€Π΅ΠΆΠΈΠΌ (ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Π΅Π±-сСрвСр)
  • βœ… Cloudflare DNS ΠΏΠ»Π°Π³ΠΈΠ½
  • βœ… AWS Route53 DNS ΠΏΠ»Π°Π³ΠΈΠ½
  • βœ… Google Cloud DNS ΠΏΠ»Π°Π³ΠΈΠ½
  • βœ… DigitalOcean DNS ΠΏΠ»Π°Π³ΠΈΠ½

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ

  • βœ… ΠžΡ‚Π·Ρ‹Π² сСртификатов
  • βœ… ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ сСртификатов
  • βœ… ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ всСх установлСнных сСртификатов
  • βœ… ГСнСрация самоподписанных сСртификатов

Автоматизация

  • βœ… АвтоматичСская установка всСх зависимостСй
  • βœ… Настройка cron для автоматичСского продлСния
  • βœ… Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСсса обновлСния
  • βœ… АвтообновлСниС acme.sh ΠΈ certbot

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ОБ

  • Ubuntu 20.04+
  • Debian 11+
  • CentOS 8+
  • Fedora 36+
  • Arch Linux
  • AlmaLinux 9+
  • Rocky Linux 9+
  • Oracle Linux 8+

πŸ“š ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ использованиС

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ мСню

sudo ./cert_manager.sh

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ΅ мСню:

  SSL Certificate Management Script
  0.  Exit Script
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  ACME.SH Methods (Let's Encrypt/ZeroSSL)
  1.  Issue via acme.sh (HTTP validation)
  2.  Issue via acme.sh (Cloudflare DNS)
  3.  Issue via acme.sh (AWS Route53 DNS)
  4.  Issue via acme.sh (Google Cloud DNS)
  5.  Issue via acme.sh (DigitalOcean DNS)
  6.  Issue via acme.sh (ZeroSSL CA)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  CERTBOT Methods
  11. Issue via Certbot (Standalone)
  12. Issue via Certbot (Webroot)
  13. Issue via Certbot (Cloudflare DNS)
  14. Issue via Certbot (AWS Route53 DNS)
  15. Issue via Certbot (Google Cloud DNS)
  16. Issue via Certbot (DigitalOcean DNS)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Certificate Management
  21. Revoke Certificate
  22. Force Renew Certificate
  23. List All Certificates
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Other Options
  31. Generate Self-Signed Certificate
  32. Install Dependencies
  33. Setup Automatic Renewal
  34. Check Auto-Renewal Status

Please enter your selection:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ - Выпуск сСртификата (опция 1):

Please enter your selection [0-8]: 1

[INF] Installing required dependencies...
[INF] Dependencies installed successfully
Installing acme.sh...
[INF] Install acme.sh succeed
Please enter your domain name: example.com
[DEG] Your domain is: example.com, checking it...
[INF] Your domain is ready for issuing certificate now...
Please choose which port to use, default will be 80 port: 80
[INF] Will use port: 80 to issue certificates, please make sure this port is open...
[INF] Issue certificates succeed, installing certificates...
[INF] Install certificates succeed
[INF] Setting up automatic certificate renewal...
[INF] Auto renewal cron job added successfully
[INF] Automatic certificate renewal setup completed
[INF] Certificate installation completed successfully!
[INF] Certificate files are located at: /root/cert/example.com
[INF] Private key: /root/cert/example.com/privkey.pem
[INF] Full chain: /root/cert/example.com/fullchain.pem

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ - Cloudflare сСртификат (опция 2):

Please enter your selection [0-8]: 2

[DEG] ******Instructions for use******
[INF] This Acme script requires the following data:
[INF] 1. Cloudflare Registered email
[INF] 2. Cloudflare Global API Key
[INF] 3. The domain name that has been resolved DNS to the current server by Cloudflare
[INF] 4. The script applies for a certificate. The default installation path is /root/cert
Confirmed? [y/n]: y

Please set a domain name:
Input your domain here: example.com
[DEG] Your domain name is set to: example.com
Please set the API key:
Input your key here: your_cloudflare_api_key_here
[DEG] Your API key is: your_cloudflare_api_key_here
Please set up registered email:
Input your email here: your@email.com
[DEG] Your registered email address is: your@email.com
[INF] Certificate issued Successfully, Installing...
[INF] Certificate installed Successfully
[INF] Auto renewal cron job added successfully
[INF] The certificate is installed and auto-renewal is turned on. Certificate files location:
total 16K
-rw-r--r-- 1 root root 1.8K Jan 15 10:30 ca.cer
-rw-r--r-- 1 root root 3.8K Jan 15 10:30 example.com.cer
-rw-r--r-- 1 root root 1.7K Jan 15 10:30 example.com.key
-rw-r--r-- 1 root root 5.5K Jan 15 10:30 fullchain.cer

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса (опция 8):

Please enter your selection [0-8]: 8

[INF] Checking automatic renewal status...
[INF] Auto renewal cron job is configured:
30 2 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh > /var/log/acme_renewal.log 2>&1
[INF] acme.sh auto-upgrade is enabled
[INF] Last renewal log entries:
[Sat Jan 15 02:30:01 UTC 2024] Renewing domain: example.com
[Sat Jan 15 02:30:01 UTC 2024] Domain example.com renewed successfully
[Sat Jan 15 02:30:02 UTC 2024] Cert success.

Командная строка

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ прямой Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку:

Команда ОписаниС
install Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС зависимости (acme.sh, certbot)
issue Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· HTTP (acme.sh)
cloudflare Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· Cloudflare DNS (acme.sh)
route53 Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· AWS Route53 DNS (acme.sh)
gcloud Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· Google Cloud DNS (acme.sh)
digitalocean Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· DigitalOcean DNS (acme.sh)
zerossl Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· ZeroSSL CA (acme.sh)
certbot-standalone Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· Certbot standalone
certbot-webroot Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат Ρ‡Π΅Ρ€Π΅Π· Certbot webroot
self-signed Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ самоподписанный сСртификат
revoke ΠžΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ сСртификат
renew ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСртификат
list ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС сСртификаты
check ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ статус автообновлСния
setup-renewal ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ автоматичСскоС ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅

πŸ§ͺ ВСстированиС

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ систСму автоматичСского тСстирования Ρ‡Π΅Ρ€Π΅Π· GitHub Actions:

ВСстовыС Π½Π°Π±ΠΎΡ€Ρ‹

  1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ тСсты (test.yml) - Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ push/PR:

    • βœ… ShellCheck Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°
    • βœ… ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса Bash
    • βœ… ВСсты Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
    • βœ… ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° установки зависимостСй
    • βœ… Анализ бСзопасности
    • βœ… ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
    • βœ… Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты
    • βœ… ВСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  2. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ тСсты (multi-os-test.yml):

    • Ubuntu 20.04, 22.04, 24.04
    • Debian 11, 12
    • CentOS Stream 8, 9
    • AlmaLinux 9
    • Rocky Linux 9
    • Fedora 38, 39, 40
    • Arch Linux
    • openSUSE Tumbleweed
  3. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ тСсты (alt-os-test.yml):

    • Amazon Linux 2023
    • Oracle Linux 8, 9
    • Red Hat UBI 8, 9
    • Alpine Linux
    • BusyBox
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства ΠΊΠΎΠ΄Π° (code-quality.yml):

    • ShellCheck с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ уровнями строгости
    • Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ бСзопасности
    • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° стиля ΠΊΠΎΠ΄Π°
    • Анализ зависимостСй

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС

ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ рСкомСндуСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ тСсты:

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса
bash -n cert_manager.sh

# ShellCheck Π°Π½Π°Π»ΠΈΠ· (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки shellcheck)
shellcheck -S warning cert_manager.sh

# Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ тСст
echo "0" | sudo ./cert_manager.sh

πŸ”§ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Выпуск ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ сСртификата

sudo ./cert_manager.sh issue
# Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π΄ΠΎΠΌΠ΅Π½: example.com
# Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΡ€Ρ‚ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 80): 80

Выпуск wildcard сСртификата Ρ‡Π΅Ρ€Π΅Π· Cloudflare

sudo ./cert_manager.sh cloudflare
# Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π΄ΠΎΠΌΠ΅Π½: example.com
# Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Cloudflare API Key: your_api_key
# Π’Π²Π΅Π΄ΠΈΡ‚Π΅ email: your@email.com

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° автообновлСния

sudo ./cert_manager.sh check
# ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚ статус cron Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ послСдниС Π»ΠΎΠ³ΠΈ

πŸ“ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ²

/root/cert/              # ДирСктория сСртификатов
β”œβ”€β”€ example.com/
β”‚   β”œβ”€β”€ privkey.pem     # ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡
β”‚   └── fullchain.pem   # Полная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° сСртификатов
~/.acme.sh/             # Установка acme.sh
/var/log/acme_renewal.log # Π›ΠΎΠ³ автообновлСния

βš™οΈ АвтоматичСскоС ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅

Π‘ΠΊΡ€ΠΈΠΏΡ‚ автоматичСски:

  1. УстанавливаСт cron Π·Π°Π΄Π°Ρ‡Ρƒ для Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² 2:30 Π½ΠΎΡ‡ΠΈ
  2. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ acme.sh
  3. Π›ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ продлСния

Cron Π·Π°Π΄Π°Ρ‡Π° выглядит Ρ‚Π°ΠΊ:

30 2 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh > /var/log/acme_renewal.log 2>&1

πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

  • Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²Π° root для Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /root/cert/
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ acme.sh
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ сСртификации (Let's Encrypt)

πŸ” ВрСбования

БистСмныС трСбования

  • Linux сСрвСр с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… дистрибутивов
  • ΠŸΡ€Π°Π²Π° root
  • Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ соСдинСниС

Для HTTP Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ

  • Π”ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ваш сСрвСр
  • ΠŸΠΎΡ€Ρ‚ 80 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ свободСн

Для Cloudflare DNS Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ

  • Π”ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Cloudflare ΠΊΠ°ΠΊ DNS
  • Cloudflare Global API Key
  • Email Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Cloudflare

πŸ› УстранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

Ошибка "Port 80 is busy"

# Найти процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ€Ρ‚
sudo lsof -i :80
# ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
sudo systemctl stop nginx  # ΠΈΠ»ΠΈ apache2
# Π’Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСртификат
sudo ./cert_manager.sh issue
# Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ
sudo systemctl start nginx

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΎΠ²

# Π›ΠΎΠ³ΠΈ acme.sh
tail -f ~/.acme.sh/*.log

# Π›ΠΎΠ³ΠΈ автообновлСния  
tail -f /var/log/acme_renewal.log

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° cron
sudo crontab -l | grep acme

πŸ“„ ЛицСнзия

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π‘ΠΌ. Ρ„Π°ΠΉΠ» LICENSE для ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

🀝 Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ ΠΏΡƒΠ»Π»-рСквСсты! Для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ сначала ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ issue для обсуТдСния.

πŸ“ž ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°

Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» "УстранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ"
  2. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈ
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ issue с описаниСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

⚠️ Π’Π°ΠΆΠ½ΠΎ: ВсСгда Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Π²Π°ΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с сСртификатами.


English

A collection of bash scripts for SSL certificate management on Linux servers with automatic renewal.

πŸ“‹ Description

This repository contains tools for simple and automated SSL certificate management:

  • cert_manager.sh - Simplified script for SSL certificate management only
  • tls.sh - Original full-featured 3X-UI panel management script

πŸš€ Quick Start

Installing and using cert_manager.sh

# Download the script
wget https://github.com/teslaproduuction/TLScript/raw/main/cert_manager.sh
chmod +x cert_manager.sh

# Run interactive menu
sudo ./cert_manager.sh

# Or use direct commands
sudo ./cert_manager.sh install    # Install dependencies
sudo ./cert_manager.sh issue      # Issue certificate

πŸ“– Features

SSL Certificates

ACME.SH Methods (Let's Encrypt/ZeroSSL)

  • βœ… HTTP validation (port 80)
  • βœ… Cloudflare DNS validation
  • βœ… AWS Route53 DNS validation
  • βœ… Google Cloud DNS validation
  • βœ… DigitalOcean DNS validation
  • βœ… ZeroSSL as alternative CA

Certbot Methods

  • βœ… Standalone mode (port 80)
  • βœ… Webroot mode (existing web server)
  • βœ… Cloudflare DNS plugin
  • βœ… AWS Route53 DNS plugin
  • βœ… Google Cloud DNS plugin
  • βœ… DigitalOcean DNS plugin

Certificate Management

  • βœ… Revoke certificates
  • βœ… Force renew certificates
  • βœ… View all installed certificates
  • βœ… Generate self-signed certificates

Automation

  • βœ… Automatic installation of all dependencies
  • βœ… Setup cron for automatic renewal
  • βœ… Renewal process logging
  • βœ… Auto-update acme.sh and certbot

Supported OS

  • Ubuntu 20.04+
  • Debian 11+
  • CentOS 8+
  • Fedora 36+
  • Arch Linux
  • AlmaLinux 9+
  • Rocky Linux 9+
  • Oracle Linux 8+

πŸ“š Detailed Usage

Interactive Menu

sudo ./cert_manager.sh

You will see this menu:

  SSL Certificate Management Script
  0.  Exit Script
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  ACME.SH Methods (Let's Encrypt/ZeroSSL)
  1.  Issue via acme.sh (HTTP validation)
  2.  Issue via acme.sh (Cloudflare DNS)
  3.  Issue via acme.sh (AWS Route53 DNS)
  4.  Issue via acme.sh (Google Cloud DNS)
  5.  Issue via acme.sh (DigitalOcean DNS)
  6.  Issue via acme.sh (ZeroSSL CA)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  CERTBOT Methods
  11. Issue via Certbot (Standalone)
  12. Issue via Certbot (Webroot)
  13. Issue via Certbot (Cloudflare DNS)
  14. Issue via Certbot (AWS Route53 DNS)
  15. Issue via Certbot (Google Cloud DNS)
  16. Issue via Certbot (DigitalOcean DNS)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Certificate Management
  21. Revoke Certificate
  22. Force Renew Certificate
  23. List All Certificates
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Other Options
  31. Generate Self-Signed Certificate
  32. Install Dependencies
  33. Setup Automatic Renewal
  34. Check Auto-Renewal Status

Please enter your selection:

Example Usage - Issue Certificate (option 1):

Please enter your selection [0-8]: 1

[INF] Installing required dependencies...
[INF] Dependencies installed successfully
Installing acme.sh...
[INF] Install acme.sh succeed
Please enter your domain name: example.com
[DEG] Your domain is: example.com, checking it...
[INF] Your domain is ready for issuing certificate now...
Please choose which port to use, default will be 80 port: 80
[INF] Will use port: 80 to issue certificates, please make sure this port is open...
[INF] Issue certificates succeed, installing certificates...
[INF] Install certificates succeed
[INF] Setting up automatic certificate renewal...
[INF] Auto renewal cron job added successfully
[INF] Automatic certificate renewal setup completed
[INF] Certificate installation completed successfully!
[INF] Certificate files are located at: /root/cert/example.com
[INF] Private key: /root/cert/example.com/privkey.pem
[INF] Full chain: /root/cert/example.com/fullchain.pem

Example Usage - Cloudflare Certificate (option 2):

Please enter your selection [0-8]: 2

[DEG] ******Instructions for use******
[INF] This Acme script requires the following data:
[INF] 1. Cloudflare Registered email
[INF] 2. Cloudflare Global API Key
[INF] 3. The domain name that has been resolved DNS to the current server by Cloudflare
[INF] 4. The script applies for a certificate. The default installation path is /root/cert
Confirmed? [y/n]: y

Please set a domain name:
Input your domain here: example.com
[DEG] Your domain name is set to: example.com
Please set the API key:
Input your key here: your_cloudflare_api_key_here
[DEG] Your API key is: your_cloudflare_api_key_here
Please set up registered email:
Input your email here: your@email.com
[DEG] Your registered email address is: your@email.com
[INF] Certificate issued Successfully, Installing...
[INF] Certificate installed Successfully
[INF] Auto renewal cron job added successfully
[INF] The certificate is installed and auto-renewal is turned on. Certificate files location:
total 16K
-rw-r--r-- 1 root root 1.8K Jan 15 10:30 ca.cer
-rw-r--r-- 1 root root 3.8K Jan 15 10:30 example.com.cer
-rw-r--r-- 1 root root 1.7K Jan 15 10:30 example.com.key
-rw-r--r-- 1 root root 5.5K Jan 15 10:30 fullchain.cer

Check Status (option 8):

Please enter your selection [0-8]: 8

[INF] Checking automatic renewal status...
[INF] Auto renewal cron job is configured:
30 2 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh > /var/log/acme_renewal.log 2>&1
[INF] acme.sh auto-upgrade is enabled
[INF] Last renewal log entries:
[Sat Jan 15 02:30:01 UTC 2024] Renewing domain: example.com
[Sat Jan 15 02:30:01 UTC 2024] Domain example.com renewed successfully
[Sat Jan 15 02:30:02 UTC 2024] Cert success.

Command Line

The script supports direct function calls via command line:

Command Description
install Install all dependencies (acme.sh, certbot)
issue Issue certificate via HTTP (acme.sh)
cloudflare Issue certificate via Cloudflare DNS (acme.sh)
route53 Issue certificate via AWS Route53 DNS (acme.sh)
gcloud Issue certificate via Google Cloud DNS (acme.sh)
digitalocean Issue certificate via DigitalOcean DNS (acme.sh)
zerossl Issue certificate via ZeroSSL CA (acme.sh)
certbot-standalone Issue certificate via Certbot standalone
certbot-webroot Issue certificate via Certbot webroot
self-signed Generate self-signed certificate
revoke Revoke certificate
renew Force renew certificate
list Show all certificates
check Check auto-renewal status
setup-renewal Setup automatic renewal

πŸ§ͺ Testing

The project includes a comprehensive automated testing system via GitHub Actions:

Test Suites

  1. Main Tests (test.yml) - run on every push/PR:

    • βœ… ShellCheck code analysis
    • βœ… Bash syntax validation
    • βœ… Basic functionality tests
    • βœ… Dependency installation tests
    • βœ… Security analysis
    • βœ… Documentation checks
    • βœ… Integration tests
    • βœ… Performance tests
  2. Multi-Platform Tests (multi-os-test.yml):

    • Ubuntu 20.04, 22.04, 24.04
    • Debian 11, 12
    • CentOS Stream 8, 9
    • AlmaLinux 9
    • Rocky Linux 9
    • Fedora 38, 39, 40
    • Arch Linux
    • openSUSE Tumbleweed
  3. Alternative OS Tests (alt-os-test.yml):

    • Amazon Linux 2023
    • Oracle Linux 8, 9
    • Red Hat UBI 8, 9
    • Alpine Linux
    • BusyBox
  4. Code Quality Checks (code-quality.yml):

    • ShellCheck with different severity levels
    • Security scanning
    • Code style verification
    • Dependency analysis

Local Testing

Before committing, it's recommended to run local tests:

# Syntax check
bash -n cert_manager.sh

# ShellCheck analysis (requires shellcheck installation)
shellcheck -S warning cert_manager.sh

# Basic functional test
echo "0" | sudo ./cert_manager.sh

πŸ”§ Usage Examples

Issue Regular Certificate

sudo ./cert_manager.sh issue
# Enter domain: example.com
# Enter port (default 80): 80

Issue Wildcard Certificate via Cloudflare

sudo ./cert_manager.sh cloudflare
# Enter domain: example.com
# Enter Cloudflare API Key: your_api_key
# Enter email: your@email.com

Check Auto-renewal

sudo ./cert_manager.sh check
# Shows cron task status and latest logs

πŸ“ File Structure

/root/cert/              # Certificates directory
β”œβ”€β”€ example.com/
β”‚   β”œβ”€β”€ privkey.pem     # Private key
β”‚   └── fullchain.pem   # Full certificate chain
~/.acme.sh/             # acme.sh installation
/var/log/acme_renewal.log # Auto-renewal log

βš™οΈ Automatic Renewal

The script automatically:

  1. Installs a cron task for daily check at 2:30 AM
  2. Enables acme.sh auto-update
  3. Logs all renewal operations

Cron task looks like:

30 2 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh > /var/log/acme_renewal.log 2>&1

πŸ›‘οΈ Security

  • Requires root privileges to operate
  • Certificates are saved in secure /root/cert/ directory
  • Uses official acme.sh client
  • Supports only trusted certificate authorities (Let's Encrypt)

πŸ” Requirements

System Requirements

  • Linux server with one of the supported distributions
  • Root privileges
  • Internet connection

For HTTP Validation

  • Domain must point to your server
  • Port 80 must be available

For Cloudflare DNS Validation

  • Domain must use Cloudflare as DNS
  • Cloudflare Global API Key
  • Cloudflare account email

πŸ› Troubleshooting

Error "Port 80 is busy"

# Find process using the port
sudo lsof -i :80
# Stop web server temporarily
sudo systemctl stop nginx  # or apache2
# Issue certificate
sudo ./cert_manager.sh issue
# Start web server back
sudo systemctl start nginx

Check Logs

# acme.sh logs
tail -f ~/.acme.sh/*.log

# Auto-renewal logs
tail -f /var/log/acme_renewal.log

# Check cron
sudo crontab -l | grep acme

πŸ“„ License

This project is distributed under the MIT License. See the LICENSE file for detailed information.

🀝 Contributing

Pull requests are welcome! For major changes, please open an issue first to discuss.

πŸ“ž Support

If you encounter problems:

  1. Check the "Troubleshooting" section
  2. Review the logs
  3. Create an issue with problem description

⚠️ Important: Always backup important data before performing certificate operations.

About

πŸ”’ Π‘ΠΊΡ€ΠΈΠΏΡ‚ управлСния SSL сСртификатами для Linux - автоматичСскоС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСртификатами Let's Encrypt с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Cloudflare DNS

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors

Languages