TLS-Zertifikat: Schlüssel ohne führende Null macht SecPKCS12Import unbrauchbar, Server fällt auf HTTP #48
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#48
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Nach einem Neustart zeigte Iris — Lokal „Nicht verbunden“, die iPhone-App konnte sich nicht verbinden. Der Mac-Server auf Port 8765 sprach unverschlüsseltes HTTP, die Clients erwarten HTTPS.
Ursache
CertificateManager.generateAndStoreLeaferzeugt den Schlüssel mit/usr/bin/openssl ecparam -genkey(LibreSSL). In etwa 1 von 256 Fällen schreibt LibreSSL den privaten Skalar ohne führende Null (31 statt 32 Byte).SecPKCS12Importliefert dannerrSecSuccess, aber keine Identität. Die Funktion gabnilzurück, der Server lief ohne TLS weiter.Fix
generateAndStoreLeaf→generateAndStoreLeafOnce).importP12geprüft, eine unbrauchbare Datei wird nie persistiert.Nicht Teil dieses Issues
Beim Start unmittelbar nach dem Login kann
detectLocalIPAddress()noch keineen*-IPv4 finden und fällt auf127.0.0.1zurück. Das erzeugt ein Zertifikat nur für127.0.0.1, das für LAN-Clients (iPhone) nicht passt. Das ist ein eigenes Thema.Stand (2026-10-16)
Gemessen: Das gespeicherte
tls-identity.p12enthielt einen Schlüssel mit 31-Byte-Skalar; Zertifikat und Schlüssel passten zusammen (openssl pkey -puboutidentisch),SecPKCS12Importliefertestatus 0, items 1, aber keinekSecImportItemIdentity. Frisch erzeugte P12-Dateien mit 32-Byte-Schlüssel importierten sauber. Nach Entfernen vontls-identity.p12und Neustart lief der Server wieder mit HTTPS, das Zertifikat galt für die LAN-IP.Nicht gebaut und nicht getestet: Die Änderung ist nur gegengelesen, nicht per Xcode gebaut (kein
xcodebuildaus dem Terminal wegen TCC). Beim nächsten „Bau und starte lokal“ ist sie enthalten.Offen / bewusst nicht Teil dieses Fixes:
detectLocalIPAddress()beim Start keineen*-IPv4 (Start direkt nach dem Login, WLAN noch nicht verbunden), wird ein Zertifikat nur für127.0.0.1erzeugt. Sinnvoll wäre, in dem Fall das vorhandene Zertifikat zu behalten.