Jak Zautomatyzować Instalację Certyfikatów SSL Let's Encrypt na Hostingu z Dostępem do FTP i cPanel?

Jak Zautomatyzować Instalację Certyfikatów SSL Let's Encrypt na Hostingu z Dostępem do FTP i cPanel?

Certyfikaty SSL są obecnie standardem w zabezpieczaniu stron internetowych. Jeśli korzystasz z hostingu z dostępem tylko do FTP i cPanel, możesz wykorzystać poniższą instrukcję, aby zautomatyzować proces generowania certyfikatów SSL Let's Encrypt. W tym artykule krok po kroku pokażemy, jak skonfigurować środowisko na komputerze z systemem Windows oraz jak użyć skryptu Python do automatyzacji.


1. Instalacja WSL (Windows Subsystem for Linux)

Windows Subsystem for Linux (WSL) umożliwia uruchamianie Linuksa bez potrzeby instalowania maszyny wirtualnej. W tym przypadku będzie to Ubuntu.

  1. Otwórz PowerShell jako administrator.
  2. Wykonaj polecenie, aby zainstalować WSL:
    wsl --install
    
  3. Jeśli system wymaga restartu, uruchom ponownie komputer.
  4. Po restarcie, jeśli Ubuntu nie zostanie automatycznie zainstalowane, wykonaj:
    wsl --install -d Ubuntu
    
  5. Po zakończeniu instalacji otwórz WSL i skonfiguruj konto użytkownika (nazwę użytkownika i hasło).

2. Instalacja Certbota i Zależności w WSL

Certbot to narzędzie do generowania certyfikatów SSL z Let's Encrypt.

  1. Otwórz WSL (np. Ubuntu).
  2. Wykonaj następujące polecenia:
    sudo apt update
    sudo apt install software-properties-common
    sudo add-apt-repository universe
    sudo apt update
    sudo apt install certbot python3-certbot python3-certbot-dns-manual
    

3. Instalacja Pythona i Dodatkowych Bibliotek

Skrypt Python wymaga kilku podstawowych bibliotek.

  1. Zainstaluj Python i pip:
    sudo apt install python3 python3-pip
    
  2. Zainstaluj wymagane biblioteki:
    pip3 install ftplib argparse
    

4. Przygotowanie Skryptu Python

  1. Utwórz katalog na skrypt, np. C:\SSL_Automation\.
  2. Skopiuj poniższy kod skryptu Python i zapisz go w pliku domena.py.
import os
from ftplib import FTP
import subprocess

DOMAIN = "naprawy.mikro-serwis.pl"
ADDITIONAL_DOMAINS = ["www.mikro-serwis.pl"]
FTP_HOST = "ftp.your-host.com"
FTP_USER = "your-ftp-user"
FTP_PASS = "your-ftp-password"
FTP_WEBROOT = "/"
EMAIL = "biuro@mikro-serwis.pl"

def upload_challenge_file(token, validation):
    try:
        ftp = FTP(FTP_HOST)
        ftp.login(FTP_USER, FTP_PASS)
        ftp.cwd(FTP_WEBROOT)
        with open(token, "w") as file:
            file.write(validation)
        with open(token, "rb") as file:
            ftp.storbinary(f"STOR {token}", file)
        os.remove(token)
        ftp.quit()
    except Exception as e:
        print(f"Błąd FTP: {e}")

def handle_certbot_hook():
    token = os.environ.get("CERTBOT_TOKEN")
    validation = os.environ.get("CERTBOT_VALIDATION")
    if not token or not validation:
        print("Brak danych od Certbota.")
        return
    upload_challenge_file(token, validation)

def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("--create-challenge", action="store_true")
    args = parser.parse_args()
    if args.create_challenge:
        handle_certbot_hook()
    else:
        domains_args = [DOMAIN] + ADDITIONAL_DOMAINS
        certbot_cmd = [
            "certbot", "certonly", "--manual", "--preferred-challenges", "http",
            "--manual-auth-hook", f"python3 {os.path.abspath(__file__)} --create-challenge",
            "--non-interactive", "--agree-tos", "--email", EMAIL
        ]
        for domain in domains_args:
            certbot_cmd += ["-d", domain]
        subprocess.run(certbot_cmd)

if __name__ == "__main__":
    main()
  1. Zmień wartości w konfiguracji:

    • DOMAIN: Twoja domena (np. mikro-serwis.pl).
    • ADDITIONAL_DOMAINS: Lista dodatkowych domen, np. ["www.mikro-serwis.pl"].
    • FTP_HOST, FTP_USER, FTP_PASS: Dane do logowania na serwer FTP.
    • EMAIL: Twój adres e-mail.
    • FTP_WEBROOT: ścieżka do katalogu głównego z stroną www
  2. Zapisz zmiany.


5. Uruchomienie Skryptu

  1. Przejdź do katalogu z plikiem domena.py w WSL:

    cd /mnt/c/SSL_Automation/
    
  2. Uruchom skrypt:

    python3 domena.py
    
  3. Skrypt automatycznie:

    • Wygeneruje pliki weryfikacyjne i przesyła je na serwer FTP.
    • Przeprowadzi weryfikację domeny z Let's Encrypt.
    • Wygeneruje certyfikaty SSL w katalogu:
      /etc/letsencrypt/live/<domena>/
      

6. Instalacja Certyfikatu w cPanel

  1. Zaloguj się do cPanel swojego hostingu.
  2. Przejdź do sekcji „SSL/TLS” → „Zainstaluj certyfikat SSL”.
  3. Wklej odpowiednie dane:
    • Certyfikat (CRT): Zawartość pliku cert.pem.
    • Klucz prywatny (Private Key): Zawartość pliku privkey.pem.
    • Łańcuch certyfikatów (CABUNDLE): Zawartość pliku chain.pem.
  4. Zatwierdź konfigurację.

7. Odnawianie Certyfikatów

Certyfikat Let's Encrypt jest ważny przez 90 dni. Aby go odnowić, uruchom ponownie skrypt:

python3 domena.py

Podsumowanie

Automatyzacja procesu generowania certyfikatów SSL z Let's Encrypt znacząco ułatwia życie. Skrypt opisany w tym artykule eliminuje konieczność ręcznego tworzenia i przesyłania plików weryfikacyjnych, pozostawiając tylko etap instalacji certyfikatu w cPanel. Dzięki temu Twoja strona zawsze będzie zabezpieczona aktualnym certyfikatem SSL