"Update SSL certificate generation process"

This commit is contained in:
2025-05-26 10:48:36 +02:00
parent 0d7264524f
commit f063d07232
4 changed files with 74 additions and 54 deletions

View File

@@ -18,7 +18,8 @@ from flask_wtf.csrf import CSRFProtect
from config.settings import (
SECRET_KEY, TAPO_USERNAME, TAPO_PASSWORD, PRINTERS,
FLASK_HOST, FLASK_PORT, FLASK_DEBUG, SESSION_LIFETIME,
SCHEDULER_INTERVAL, SCHEDULER_ENABLED, get_ssl_context, FLASK_FALLBACK_PORT
SCHEDULER_INTERVAL, SCHEDULER_ENABLED, get_ssl_context, FLASK_FALLBACK_PORT,
SSL_ENABLED, SSL_CERT_PATH, SSL_KEY_PATH
)
from utils.logging_config import setup_logging, get_logger, log_startup_info
from models import User, Printer, Job, Stats, get_db_session, init_database, create_initial_admin
@@ -1396,6 +1397,9 @@ def check_jobs():
if __name__ == "__main__":
import argparse
import threading
import ssl
import socket
import logging
# Kommandozeilenargumente parsen
parser = argparse.ArgumentParser(description='MYP Platform - 3D-Drucker Reservierungssystem')
@@ -1411,56 +1415,64 @@ if __name__ == "__main__":
port = args.port if args.port else FLASK_PORT
# SSL-Kontext abrufen
ssl_context = None if args.no_ssl else get_ssl_context()
# Funktion zum Starten des Servers
def start_server(use_ssl=True, server_port=None):
if server_port is None:
server_port = port
ssl_context = None
if SSL_ENABLED and not args.no_ssl:
try:
if use_ssl and ssl_context:
protocol = "HTTPS"
app_logger.info(f"{protocol}-Server wird auf Port {server_port} gestartet...")
app.run(host=FLASK_HOST, port=server_port, debug=FLASK_DEBUG, ssl_context=ssl_context)
if SSL_CERT_PATH and SSL_KEY_PATH:
ssl_context = (SSL_CERT_PATH, SSL_KEY_PATH)
logging.info(f"SSL aktiviert mit Zertifikat: {SSL_CERT_PATH}")
else:
protocol = "HTTP"
app_logger.info(f"{protocol}-Server wird auf Port {server_port} gestartet...")
app.run(host=FLASK_HOST, port=server_port, debug=FLASK_DEBUG)
ssl_context = 'adhoc'
logging.info("SSL aktiviert mit selbstsigniertem Ad-hoc-Zertifikat")
except Exception as e:
app_logger.error(f"Fehler beim Starten des {protocol}-Servers auf Port {server_port}: {str(e)}")
if server_port == FLASK_PORT:
fallback_port = FLASK_FALLBACK_PORT
app_logger.info(f"Versuche auf Fallback-Port {fallback_port} zu starten...")
try:
if use_ssl and ssl_context:
app.run(host=FLASK_HOST, port=fallback_port, debug=FLASK_DEBUG, ssl_context=ssl_context)
else:
app.run(host=FLASK_HOST, port=fallback_port, debug=FLASK_DEBUG)
except Exception as e2:
app_logger.error(f"Auch Fallback-Port fehlgeschlagen: {str(e2)}")
app_logger.info("Versuche auf Standard-Port 5000 zu starten...")
if use_ssl and ssl_context:
app.run(host=FLASK_HOST, port=5000, debug=FLASK_DEBUG, ssl_context=ssl_context)
else:
app.run(host=FLASK_HOST, port=5000, debug=FLASK_DEBUG)
logging.error(f"Fehler beim Laden des SSL-Kontexts: {e}")
ssl_context = None
# Dual-Protokoll-Modus: HTTP und HTTPS parallel starten
# Dual-Protokoll-Modus: HTTP und HTTPS gleichzeitig
if args.dual_protocol:
app_logger.info("Starte Server im Dual-Protokoll-Modus (HTTP und HTTPS)...")
# Funktion zum Starten des HTTP-Servers
def start_http_server():
try:
logging.info(f"Starte HTTP-Server auf Port 80...")
# Kopie der App erstellen
from werkzeug.serving import run_simple
run_simple('0.0.0.0', 80, app, threaded=True)
except socket.error as e:
logging.error(f"Konnte HTTP-Server nicht starten: {e}")
# Funktion zum Starten des HTTPS-Servers
def start_https_server():
try:
if ssl_context:
logging.info(f"Starte HTTPS-Server auf Port {port}...")
app.run(host='0.0.0.0', port=port, ssl_context=ssl_context, threaded=True)
else:
logging.warning("HTTPS deaktiviert aufgrund fehlender Zertifikate")
app.run(host='0.0.0.0', port=port, threaded=True)
except socket.error as e:
logging.error(f"Konnte HTTPS-Server nicht starten: {e}")
# HTTPS auf Hauptport (443)
https_thread = threading.Thread(target=start_server, kwargs={"use_ssl": True, "server_port": port})
# Beide Server in separaten Threads starten
http_thread = threading.Thread(target=start_http_server)
https_thread = threading.Thread(target=start_https_server)
http_thread.daemon = True
https_thread.daemon = True
http_thread.start()
https_thread.start()
# HTTP auf Alternativport (80)
http_port = FLASK_FALLBACK_PORT
start_server(use_ssl=False, server_port=http_port)
# Warten, bis beide Threads beendet sind (was sie normalerweise nicht sein sollten)
http_thread.join()
https_thread.join()
else:
# Normaler Start mit einem Protokoll
app_logger.info(f"Server wird auf Port {port} mit {'HTTPS' if ssl_context else 'HTTP'} gestartet...")
start_server(use_ssl=bool(ssl_context))
# Normaler Modus - entweder HTTP oder HTTPS
if ssl_context:
logging.info(f"Starte HTTPS-Server auf Port {port}...")
app.run(host='0.0.0.0', port=port, ssl_context=ssl_context, threaded=True)
else:
logging.info(f"Starte HTTP-Server auf Port {port}...")
app.run(host='0.0.0.0', port=port, threaded=True)
# Content Security Policy anpassen
@app.after_request