Wie würde ich HTTPS in der webbasierten Gerätekonfiguration verwenden, auf der ein Zugriffspunkt und kein Internetzugang ausgeführt wird?

7

Ich baue ein Raspberry Pi-basiertes Gerät für Gartengärtner mit einer Webseite und einem Zugangspunkt für die Erstkonfiguration, einschließlich der Wi-Fi-Konfiguration. Die Verbindung verwendet WPA2 und die einzigen zwei Geräte in diesem internen Netzwerk sind das Gerät selbst und das Telefon / Tablet / Laptop des Benutzers. Der Zugriffspunkt ist nur während der Konfiguration sichtbar, wodurch die Wahrscheinlichkeit verringert wird, dass externe Angreifer das zufällige, werkseitig ausgelieferte Kennwort erraten können. Ich habe also für kurze Zeit den Datenverkehr verschlüsselt, mit ziemlicher Sicherheit nur zwei Knoten, und ein zufälliges Passwort. Daher ist kein HTTPS erforderlich, das ich sehen kann, und ich hatte geplant, HTTP auszuführen.

Heute habe ich jedoch erfahren, dass Chrome ab Juli alle HTTP-Sites als unsicher markiert. [1] Da die Wi-Fi-Konfiguration jedoch über einen Zugangspunkt erfolgt, ist noch kein Internetzugang verfügbar, um TLS-Zertifikate zu überprüfen. Ich verstehe, dass dies für den ordnungsgemäßen Betrieb erforderlich ist. [2] Ich könnte das Zertifikat selbst unterschreiben, aber das bringt andere Probleme mit sich. [3]

Meine Optionen scheinen also zu sein:

  • Präsentieren Sie die Konfigurationsseite mit der großen, beängstigenden Meldung "Diese Website ist nicht sicher"
  • Präsentieren Sie der Konfigurationsseite eine große, beängstigende Meldung "Dieses Zertifikat ist nicht vertrauenswürdig" (z. B. selbstsigniert).

Wie würden Sie diese schöne grüne Sperre standardmäßig für eine Gerätekonfigurationsseite bereitstellen?

[1] https://www.theverge.com/2018/2/8/16991254/chrome-not-secure-marked-http-encryption-ssl

[2] /security/56389/ssl-certificate-framework-101-how-does-the-browser-actually-verify-the-validity?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

[3] https://www.globalsign.com/de/ssl-information-center/dangers-self-signed-certificates/

Langsamer Bro
quelle
Ein Teil Ihrer Frage basiert auf Missverständnissen: Sie benötigen keinen Zugang zum Internet, um ein Zertifikat zu überprüfen. Die Zertifikatkettendatei auf dem Gerät muss auf einen dem Browser bekannten Vertrauensstamm zurückgehen. Wenn dies nicht der Fall ist, reicht es nicht aus, nur über einen Internetzugang zu verfügen, sondern es muss tatsächlich ein Prozess befolgt werden, um dem Browser eine zusätzliche Zertifizierungsstelle hinzuzufügen.
Chris Stratton
Ich habe bereits ein Zertifikat, dem die meisten Browser für meine Hauptwebsite vertrauen. Würde ich also einfach mein vorhandenes Zertifikat verwenden, wenn es ein Platzhalter wäre, dem iPhones und Androids bereits vertrauen?
Slow Bro
Nein auf keinen Fall!!! Wenn Sie dies tun würden, würden Sie das Geheimnis, das es Ihnen ermöglicht, sich als Ihre Website auszugeben, an alle weitergeben, die eines Ihrer Produkte gekauft haben. Das Zertifikat, das Sie für diesen Zweck verwenden, darf nur für diesen Zweck verwendet werden und gilt von Anfang an als gefährdet. Wenn Sie Benutzer voreinander schützen müssen, benötigen Sie ein eindeutiges Zertifikat pro erstellter Box. Mit einer benutzerdefinierten Zertifizierungsstelle für einen Client, den Sie wie eine benutzerdefinierte mobile App steuern, ist dies relativ einfach, für einen Browser mit nur vertrauenswürdigen Wurzeln jedoch viel schwieriger.
Chris Stratton
1
Um ein eindeutiges Zertifikat pro Gerät zu erhalten, benötigen Sie eine Zertifizierungsstelle, die bereit ist, viele davon wirtschaftlich zu signieren. Wenn Sie einen benutzerdefinierten Client wie eine von Ihnen geschriebene mobile App erstellen können, können Sie ihn Ihrer eigenen benutzerdefinierten Zertifizierungsstelle vertrauen lassen. Wenn Ihre Boxen jedoch von Aktienbrowsern mit Aktienvertrauenslisten als vertrauenswürdig eingestuft werden müssen, müssen Sie mit einer anerkannten Zertifizierungsstelle arbeiten.
Chris Stratton
1
Danke, das wird jetzt klarer. Warum postest du das nicht als Antwort und ich werde es positiv bewerten?
Slow Bro

Antworten:

4

Eine mögliche Option besteht darin, HTTPS zu verwenden und ein echtes Zertifikat auf dem Gerät zu versenden:

Da Sie den Zugriffspunkt steuern, steuern Sie vermutlich den DHCP-Server auf dem Zugriffspunkt, sodass dieser gleichzeitig eine DNS-Serveradresse bereitstellen kann.

Dieser DNS-Server kann sich auf dem AP befinden und einen vollständig qualifizierten Hostnamen auflösen, um auf sich selbst zu verweisen.

Anschließend können Sie ein Zertifikat für diesen vollständig qualifizierten Domänennamen erwerben und dieses mit dem Produkt bündeln, um eine vollständig verifizierte HTTPS-Verbindung herzustellen.

Ein großes Problem bei dieser Idee ist, dass Sie den privaten Schlüssel und das Zertifikat für diesen Domainnamen versenden. Sie sollten also davon ausgehen, dass er irgendwann kompromittiert wird, sodass Sie niemals einen echten Computer einsetzen sollten (möglicherweise müssen Sie einen Computer damit ausführen Name für eine sehr kurze Zeit, um das Zertifikat tatsächlich zu erhalten) im Internet, das diesen Hostnamen als Angreifer verwendet, könnte ihn leicht fälschen.

Auch die Firmware für den AP hat eine begrenzte Lebensdauer, da das Zertifikat abläuft (wahrscheinlich nach einem Jahr standardmäßig iirc), dann würden Sie böse Warnungen über abgelaufene Zertifikate erhalten.

Nächste Idee:

Beenden Sie den WiFi Access Point-Modus und verwenden Sie Bluetooth, z

https://www.hardill.me.uk/wordpress/2016/09/13/provisioning-wifi-iot-devices/

Nachteil ist, dass Apple WebBluetooth derzeit nicht unterstützt, Chrome jedoch unter Windows / Linux / Mac, und Sie könnten eine native iOS-App für Apple-Telefon- / Tablet-Benutzer ausliefern.

hardillb
quelle
Ich stelle mir das vor, basierend auf Ihrer Antwort: Richten Sie DNS und DHCP im Gerät ein. Einer der DNS-Einträge ist device1234.myrealdomain.com, wo myrealdomain.com ähm ist, meine echte Domain :-) Das device1234-Zertifikat wurde vor Verlassen des Werks von meiner Zertifizierungsstelle signiert, und auf dem iPhone / Android ist diese Vertrauenskette bereits eingebettet und weiß, dass er diesem Gerät vertrauen kann. Ich muss keinen Internetzugang haben, um dies zu überprüfen, und wenn das Zertifikat abläuft, drücke ich ein neu signiertes Zertifikat herunter. Funktioniert das?
Slow Bro
Nein, Sie dürfen auf keinen Fall ein Zertifikat verwenden, auf das Sie sich für irgendetwas Sinnvolles (wie Ihre Website) verlassen, da Sie es an viele Boxen verteilen. Wenn Sie das tun, veröffentlichen Sie effektiv den angeblich geheimen Teil, den alle sehen können. Sie benötigen auch etwas mit einer viel längeren Ablaufzeit, als viele Zertifizierungsstellen heute herausgeben. Andernfalls kann ein erzwingender Browser nicht einmal lange genug auf eine Box zugreifen, wenn sie ein oder zwei Jahre lang ausgeschaltet war, wenn sie wieder angeschlossen wurde es, um auf das Internet zuzugreifen, damit es ein aktualisiertes Zertifikat abrufen kann, um den Browser zufrieden zu stellen.
Chris Stratton
Chris hat einen Blick auf meine Antwort direkt über Ihrer, in der ich eine Situation beschreibe, in der ich gerätespezifische Zertifikate, nicht das Hauptzertifikat der Website, mit jedem Gerät versende. Für den Fall, dass das Gerät länger als ein Jahr offline ist, würde ich dies als defekt betrachten. Diese werden nicht hergestellt und stehen in einem Regal, sondern werden kurz vor Verlassen des Werks konfiguriert.
Slow Bro
Wenn Sie eine eigene Zertifizierungsstelle haben, benötigen Sie den DNS-Server nicht. Sie können Zertifikate für die IP-Adresse des Geräts ausstellen, was alles einfacher macht. Und die Zertifikate können ablaufen, wenn Sie wollen
hardillb
1
Ein 90-Tage-Zertifikat ist für die Verpackung in einem Hardwareprodukt vollständig, vollständig und absolut nicht geeignet. Es wäre ein Albtraum für die Kundenbetreuung und würde wahrscheinlich Ihr Geschäft ruinieren. Tu es nicht. Denken Sie nicht einmal daran .
Chris Stratton