diff --git a/src/websocket_server.rs b/src/websocket_server.rs index 6435ee8..20a1dab 100644 --- a/src/websocket_server.rs +++ b/src/websocket_server.rs @@ -20,8 +20,10 @@ use tokio_rustls::rustls::{self, ServerConfig}; use tokio_rustls::TlsAcceptor; use tokio_tungstenite::tungstenite::Message; use tokio_tungstenite::accept_async; -use rustls_pemfile::{certs, pkcs8_private_keys, rsa_private_keys}; -use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs1KeyDer, PrivatePkcs8KeyDer}; +use rustls_pemfile::{certs, ec_private_keys, pkcs8_private_keys, rsa_private_keys}; +use rustls::pki_types::{ + CertificateDer, PrivateKeyDer, PrivatePkcs1KeyDer, PrivatePkcs8KeyDer, PrivateSec1KeyDer, +}; /// Einfacher WebSocket-Server auf Basis von Tokio + tokio-tungstenite. /// @@ -132,7 +134,7 @@ fn create_tls_acceptor( let key_file = File::open(key_path)?; let mut key_reader = BufReader::new(key_file); - // Versuche zuerst PKCS8, dann ggf. RSA-Key + // Versuche zuerst PKCS8, dann ggf. RSA-Key, dann SEC1 (EC PRIVATE KEY). let mut keys: Vec> = pkcs8_private_keys(&mut key_reader) .map(|res: Result, _>| res.map(PrivateKeyDer::Pkcs8)) .collect::>()?; @@ -147,7 +149,16 @@ fn create_tls_acceptor( } if keys.is_empty() { - return Err("Key-Datei enthält keinen privaten Schlüssel (PKCS8 oder RSA)".into()); + // Leser zurücksetzen und SEC1 (EC PRIVATE KEY) versuchen + let key_file = File::open(key_path)?; + let mut key_reader = BufReader::new(key_file); + keys = ec_private_keys(&mut key_reader) + .map(|res: Result, _>| res.map(PrivateKeyDer::Sec1)) + .collect::>()?; + } + + if keys.is_empty() { + return Err("Key-Datei enthält keinen privaten Schlüssel (PKCS8, RSA oder SEC1)".into()); } let private_key = keys.remove(0); @@ -199,7 +210,6 @@ impl WebSocketServer { "Starte WebSocket-Server auf Port {} mit SSL (cert: {:?}, key: {:?})", self.port, self.cert_path, self.key_path ); - // Hinweis: SSL-Unterstützung ist noch nicht implementiert. } else { println!("Starte WebSocket-Server auf Port {} (ohne SSL)", self.port); } @@ -233,6 +243,9 @@ impl WebSocketServer { eprintln!( "[WebSocketServer] TLS-Initialisierung fehlgeschlagen, starte ohne SSL: {err}" ); + eprintln!( + "[WebSocketServer] ACHTUNG: WEBSOCKET_SSL_ENABLED=true, aber TLS ist nicht aktiv. Clients müssen dann ws:// statt wss:// verwenden." + ); None } }