Da wir alle vor der Aufgabe stehen, das Internet wieder sicherer zu machen, möchte ich meine Webcam hinter einen Proxy mit https stellen, damit die Krieger aus Nordamerika nicht immer wieder Speicherplatz belegen müssen, wenn ich das Passwort für die Kamera eingebe. Ein Raspberry Pi mit Raspbian ist dafür gut geeignet. Er ist preiswert und hat eine Leistungsaufnahme von nur 2 W. Aber da gibt es Schwierigkeiten. Ich hoffe, dass ihr mir Hinweise und Ratschläge geben könnt. Folgende Konfiguration habe ich eingerichtet:
direkter Link zur Kamera (im internen Netzwerk):
http://192.168.28.39:30080
Auf dem Raspi Apache2 eingerichtet mit :
und die Module aktiviert:
in die Datei:
/etc/apache2/sites-enabled
für die Authentifizierung am Proxy eingefügt:
<Location />
Deny from all
AuthType basic
AuthName "home"
AuthUserFile /etc/apache2/ssl/httpsusers
Satisfy Any
Require valid-user
</Location>
und im Verzeichnis /etc/apache2/ssl die Schlüssel und die Passwortdatei abgelegt:
httpsusers
ras3server.crt
ras3server.key
in der Datei /etc/apache2/sites-enabled/default-ssl
für die ssl-Verbindung eingefügt:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/ras3server.crt
SSLCertificateKeyFile /etc/apache2/ssl/ras3server.key
und:
ProxyRequests off
RewriteEngine On
ProxyPass /cam1/ http://192.168.28.39:30080/
ProxyPassReverse /cam1/ http://192.168.28.39:30080/
Wenn ich die Adresse des Raspi-Proxyserver aufrufe:
https://192.168.28.47/cam1/
meldet sich zunächst der Apache und fordert die Authentifizierung ab.
Wenn ich Nutzername und Passwort eingegeben habe, meldet sich das Kamera-Frontend mit:
https://192.168.28.47/cam1/main.htm
zur Passworteingabe für die Kamera.
Danach bleibt der Bildschirm leer und es passiert nichts mehr. Der Browser wartet auf eine Rückgabe des Webservers (Warten auf...).
Ich kann aber mit ctrl-U die vom Web-Frontend der Kamera gelieferte Webseite anzeigen:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sign in</title>
<link href="sign.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
<script language="javascript" src="public.js"></script>
<script src="check_user.cgi"></script>
<script src="get_status.cgi"></script>
<script>
if (alias=='') alias=str_anonymous;
document.title=str_device+'('+alias+')';
var client_major=0;
var client_minor=3;
var browser=0;
</script>
</head>
<body>
<iframe marginheight="0" marginwidth="0" width="100%" height="100%" frameborder="0" scrolling="yes" src="login.htm">
</iframe>
</body>
</html>
Alles anzeigen
Wenn ich die in der Webseite enthaltenen Links aufrufe, bekomme ich Antworten des Webfrontend zurückgeliefert:
https://192.168.28.47/cam1/sign.css
https://192.168.28.47/cam1/public.js
https://192.168.28.47/cam1/get_status.cgi
https://192.168.28.47/cam1/login.htm
Nur wenn ich aufrufe:
https://192.168.28.47/cam1/check_user.cgi
geht der Browser in den Wartezustand. Offenbar ist dieser Link die Ursache, dass die obige Webseite nicht beendet wird.
Beim direkten Aufruf der Kamera ohne Proxy so hier:
http://192.168.28.39:30080/check_user.cgi
fordert die Kamera beim Erstaufruf die Logindaten an (funktioniert ja auch am Proxy) oder liefert bei den nächsten Aufrufen die login-Daten:
Genau das scheint beim Proxy nicht zu funktionieren.
Ich habe schon mit verschiedenen zusätzlichen Rewriterules experimentiert, aber ohne Erfolg.
Was kann man tun, um den Zugriff per Proxy zu ermöglichen?
Zur Firmware der Kamera habe ich keinen Zugriff. Kann man trotzdem irgendwie ermitteln, was in der
check_user.cgi
vorgeht?