Hallo,
bin gerade dabei mein Tablet ui mit https zu verschlüsseln über Apache.
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName xx
DocumentRoot /opt/fhem/www/tablet
<Directory /opt/fhem/www/tablet>
Order allow,deny
Allow from all
Require all granted
Options +Indexes
</Directory>
LogLevel alert rewrite:trace2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/apache2/ssl/xx.crt
SSLCertificateKeyFile /etc/apache2/ssl/xx.key
<Location /fhem>
RewriteEngine On
ProxyPass http://localhost:8083/fhem
ProxyPassReverse http://localhost:8083/fhem
#AuthType Digest
#AuthName "HTTP Digest Access"
#AuthDigestProvider #Require all granted
#Order allow,deny
#Allow from all
#SetOutputFilter INFLATE;proxy-html;DEFLATE
</Location>
</VirtualHost>
funktioniert auch soweit das ich die Hauptseite aufrufen kann.
Nun hab ich aber noch weiter Seiten mit iframe und Swipper eingebunden und scheinen alle keine Verbindung zu fhem zu haben.
Woran könnte das liegen?
MFG Mani
Deine Apache Config erlaubt nur aus www/tablet
Für iframes, die auf ein ganz anderes Domain führen, musst Du die explizit erlauben.
Hinweis: such im Internet nach Header set X-Frame-Options "ALLOW-FROM https://www.zyx.xyz"
hallo amenomade,
danke für die hilfe :)
ja meine iframes liegen auch www/tablet....
habe daher in die .config "Header append X-FRAME-OPTIONS "SAMEORIGIN"" hinzugefügt ohne erfolg :'(
die .config über den Apache über http funktionierte bereits, das Problem habe ich erst seit der Umstellung auf https.
was könnte da noch sein?
Soooo habe nun herausgefunden das die Aufrufe der js an fhem mit https://host:..... erfolgen. Da fhem selbst aber nicht verschlüsselt ist kann die Verbindung vermutlich nicht aufgebaut werden da fhem selbst unter http://host..... erreichbar ist kann ich das umstellen?
Mfg Mani
Attribut HTTPS bei der entsprechenden FhemWeb-Instanz setzen...
Kurz, da nur Handy grad...
Gruß, Joachim
Danke leider ist mein fhem danach nicht mehr erreichbar :-\
Bin nun darauf gekommen das es an den js liegt die im Browser die nicht freigegeben werden können wenn sie über ein iframe aufgerufen werden.
Hat jemand Lösungsansätze :)
Mfg Mani
ZitatNun hab ich aber noch weiter Seiten mit iframe und Swipper eingebunden
Wie? Wo liegen die, sind die per http oder https abgerufen, woraus? Die iframes sind in der Fhem TabletUI integriert? Relativ oder absolute Paths?
Zitatnicht mehr erreichba
Über Apache und https, oder lokal über http? https?
Es wäre interessant, dein Kontrukt ein bisschen mehr zu erklären. Code, Beispiele, ls von den Verzeichnisse, usw.
Dein Apache Proxy wandelt alle https Requests nach /fhem in http Requests zu dem Fhem-Host. Und zurück umgekehrt.
D.h. dein ganzes Ding muss lokal über http erreichbar sein.
@amenomade,
Die Seiten liegen gleich wie die index.php in /opt/fhem/www/tablet und sind nur mit dem jeweiligen namen z.B.: "src=swipper.php" integriert. Die Weburl ist http:// gesetzt da fhem selbst noch unter http läuft.
Erreichbar ist Tablet ui mit http und https aber die script werden anscheinend vom Browser unter https blockiert habe ich gestern noch bemerkt.
Da ich einen selbst generierten Schlüssel verwende bock mein Browser anscheinend und ich muss die Skripts selbst freigeben aber das kann ich anscheinend nur auf der Hauptseite(index.php) und nicht auf den iframes.
Wenn ich z.B. mit https://ip/xxxx.php direkt auf eine ansonst iframeseite zugreife und die Skipts freigebe läufts...
kann ich das irgendwie umgehen?
blabla... ;)
ZitatCode, Beispiele, ls von den Verzeichnisse, usw.
#amenomade
aber jetzt :)
index php sieht im header so aus, auch die weiteren php sind so aufgebaut
<meta name="fhemweb_url" content="http://ipfhem:8083/fhem/">
<meta name="toast" content="0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="longpoll_type" content="websocket">
<meta name="longpoll" content="1"> <!-- 1=longpoll;0=shortpoll every 30sec -->
<meta name="longpoll_filter" content=".*">
<meta name="longpoll_maxage" content="240">
<meta name="debug" content="1"> <!-- 1=output to console;0=not output -->
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/font-awesome.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.toast.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/background2.css" />
<link rel="icon" type="image/png" href="/fhem/www/tablet/favicon-32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/fhem/www/tablet/favicon-162.png" sizes="162x162">
<link rel="manifest" href="/fhem/tablet/js/manifest.json">
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-wdtimer.css" />
<script src="/fhem/pgm2/jquery.min.js"></script>
<script src="/fhem/tablet/lib/jquery.toast.min.js"></script>
<script src="/fhem/tablet/js/fhem-tablet-ui.min.js"></script>
<!-- Remove this line to enable for usage with WebViewControl
<script type="text/javascript">var wvcDevices = {'123456': 'wvc_Tablet'}; var wvcUserCssFile="/fhem/pgm2/webviewcontrol.css"</script>
<script type="text/javascript" src="/fhem/pgm2/cordova-2.3.0.js"></script>
<script type="text/javascript" src="/fhem/pgm2/webviewcontrol.js"></script>
und die iframes sind z.B. so eingebunden
<div data-type="switch" data-icon="oa-audio_sound" class="big"></div>
<div class="dialog"><iframe style=" border:solid 1px #6df2d3"width="350px" height="450px" src="player.php" frameborder="0" ></iframe></div>
die php Seiten liegen alle in einem Ordner
xx@xxxx:/opt/fhem/www/tablet $ ls
Alarm.html css favicon-32.png images js Rolladen.html Swipper.php Beleuchtung.php favicon-162.png fonts lib
Heizung.html index.php player.php video.php Wecker.html
und die Apache.config sieht so aus
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /opt/fhem/www/tablet
<Directory /opt/fhem/www/tablet>
</Directory>
LogLevel alert rewrite:trace2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/apache2/ssl/xxx.crt
SSLCertificateKeyFile /etc/apache2/ssl/xxx.key
<Location /fhem>
ProxyPass http://127.0.0.1:8083/fhem
ProxyPassReverse http://127.0.0.1:8083/fhem
</Location>
</VirtualHost>
Jetzt verstehe ich.
Ich befürchte, das Problem liegt nicht in Apache.
Meisten Browser verweigern unverschlüsselten Inhalt in einer https Seite, insb. in einem iframe. Daher wäre m.M.n. die beste Lösung, alles auf https zu machen. Fhem selbst https-fähig zu machen ist nicht so kompliziert.
Vielleicht würde auch funktionieren, einen internen HTTPSRV in Fhem zu definieren, der die Tabletui Seiten bedient, und Apache nur als Proxy zu nutzen... aber... nicht getestet.
nun hab ich fhem umgestellt auf https und nun geht mein Tablet ui nicht mehr....bzw. wird nicht mehr richtig aufgelöst
Fhem Weburl habe ich auf https umgestellt und im Apache habe ich die Einstellungen ebenfalls auf https umgestellt.
Was übersehe ich den nun wieder?
Mfg Mani
Was sagen die Apache Logs?
Sieht man was in der Fhem Log?
im Apachelog steht folgendes:
[Mon Aug 05 12:30:58.769954 2019] [mpm_prefork:notice] [pid 1242] AH00171: Graceful restart requested, doing restart
[Mon Aug 05 12:30:59.153620 2019] [mpm_prefork:notice] [pid 1242] AH00163: Apache/2.4.10 (Raspbian) OpenSSL/1.0.1t mod_perl/2.0.9dev Perl/v5.20.2 configured$
[Mon Aug 05 12:30:59.153716 2019] [core:notice] [pid 1242] AH00094: Command line: '/usr/sbin/apache2'
ein sudo apache2ctl configtest ergibt "Syntax OK"
im Fhem log finde ich nix...
Das ist die Log des Diensts oder?
Ich meinte die Apache Logs error.log und access.log
ja folgendes habe ich im access.log noch gefunden:
10.0.0.yy - - [05/Aug/2019:13:05:54 +0200] "GET /fhem/tablet/lib/font-awesome.min.css HTTP/1.1" 500 999 "https://10.0.0.xx/video.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
10.0.0.yy - - [05/Aug/2019:13:05:54 +0200] "GET /fhem/tablet/css/background.css HTTP/1.1" 500 999 "https://10.0.0.xx/video.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
10.0.0.yy - - [05/Aug/2019:13:05:54 +0200] "GET /fhem/www/tablet/favicon-32.png HTTP/1.1" 500 999 "https://10.0.0.xx/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
10.0.0.yy - - [05/Aug/2019:13:05:54 +0200] "GET /fhem/www/tablet/favicon-162.png HTTP/1.1" 500 999 "https://10.0.0.xx/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
was mir da komisch vorkommt ist das "HTTP/1.1" woher kommt das sollte das HTTPS sein?
Was überhaupt komisch vorkommt, ist, dass man gar kein Versuch auf die Seiten sieht.
Kanst Du in deiner apache .conf noch "LogLevel debug" eintragen, und dann wieder versuchen, auf deine Seiten zu kommen?
Und bitte auch beschreiben, wie Du auf TabletUI greifst:
- von welcher IP Adresse aus
- mit welcher URL
- evtl. noch mit welchem Browser
nach der umstellung auf debug steht folgendes im error log:
GNU nano 2.2.6 Datei: /var/log/apache2/error.log
[Mon Aug 05 20:43:01.607649 2019] [ssl:info] [pid 1241] AH01914: Configuring server servername:80 for SSL protocol
[Mon Aug 05 20:43:01.609101 2019] [ssl:debug] [pid 1241] ssl_engine_init.c(390): AH01893: Configuring TLS extension handling
[Mon Aug 05 20:43:01.615886 2019] [ssl:warn] [pid 1241] AH01906: servername:80:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Mon Aug 05 20:43:01.616311 2019] [ssl:debug] [pid 1241] ssl_util_ssl.c(343): AH02412: [servername:80] Cert matches for name 'servername' [subject: emailAddre$
[Mon Aug 05 20:43:01.616396 2019] [ssl:info] [pid 1241] AH02568: Certificate and private key servername:80:0 configured from /etc/apache2/ssl/servername.crt a$
[Mon Aug 05 20:43:02.714512 2019] [ssl:info] [pid 1267] AH01914: Configuring server servername:80 for SSL protocol
[Mon Aug 05 20:43:02.715942 2019] [ssl:debug] [pid 1267] ssl_engine_init.c(390): AH01893: Configuring TLS extension handling
[Mon Aug 05 20:43:02.718343 2019] [ssl:warn] [pid 1267] AH01906: servername:80:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Mon Aug 05 20:43:02.718712 2019] [ssl:debug] [pid 1267] ssl_util_ssl.c(343): AH02412: [servername:80] Cert matches for name 'servername' [subject: emailAddre$
[Mon Aug 05 20:43:02.718785 2019] [ssl:info] [pid 1267] AH02568: Certificate and private key servername:80:0 configured from /etc/apache2/ssl/servername.crt a$
[Mon Aug 05 20:43:02.764042 2019] [proxy:debug] [pid 1289] proxy_util.c(1771): AH00925: initializing worker https://127.0.0.1:8083/fhem shared
[Mon Aug 05 20:43:02.764180 2019] [proxy:debug] [pid 1289] proxy_util.c(1813): AH00927: initializing worker https://127.0.0.1:8083/fhem local
[Mon Aug 05 20:43:02.764283 2019] [proxy:debug] [pid 1289] proxy_util.c(1864): AH00931: initialized single connection worker in child 1289 for (127.0.0.1)
[Mon Aug 05 20:43:02.767010 2019] [proxy:debug] [pid 1288] proxy_util.c(1771): AH00925: initializing worker https://127.0.0.1:8083/fhem shared
[Mon Aug 05 20:43:02.767154 2019] [proxy:debug] [pid 1288] proxy_util.c(1813): AH00927: initializing worker https://127.0.0.1:8083/fhem local
[Mon Aug 05 20:43:02.767260 2019] [proxy:debug] [pid 1288] proxy_util.c(1864): AH00931: initialized single connection worker in child 1288 for (127.0.0.1)
[Mon Aug 05 20:43:02.769828 2019] [proxy:debug] [pid 1287] proxy_util.c(1771): AH00925: initializing worker https://127.0.0.1:8083/fhem shared
[Mon Aug 05 20:43:02.769970 2019] [proxy:debug] [pid 1287] proxy_util.c(1813): AH00927: initializing worker https://127.0.0.1:8083/fhem local
[Mon Aug 05 20:43:02.770073 2019] [proxy:debug] [pid 1287] proxy_util.c(1864): AH00931: initialized single connection worker in child 1287 for (127.0.0.1)
[Mon Aug 05 20:43:02.773136 2019] [mpm_prefork:notice] [pid 1267] AH00163: Apache/2.4.10 (Raspbian) OpenSSL/1.0.1t mod_perl/2.0.9dev Perl/v5.20.2 configured$
[Mon Aug 05 20:43:02.773337 2019] [core:notice] [pid 1267] AH00094: Command line: '/usr/sbin/apache2'
[Mon Aug 05 20:43:02.774030 2019] [proxy:debug] [pid 1290] proxy_util.c(1771): AH00925: initializing worker https://127.0.0.1:8083/fhem shared
[Mon Aug 05 20:43:02.774240 2019] [proxy:debug] [pid 1290] proxy_util.c(1813): AH00927: initializing worker https://127.0.0.1:8083/fhem local
[Mon Aug 05 20:43:02.774380 2019] [proxy:debug] [pid 1290] proxy_util.c(1864): AH00931: initialized single connection worker in child 1290 for (127.0.0.1)
[Mon Aug 05 20:43:02.794445 2019] [proxy:debug] [pid 1291] proxy_util.c(1771): AH00925: initializing worker https://127.0.0.1:8083/fhem shared
[Mon Aug 05 20:43:02.794764 2019] [proxy:debug] [pid 1291] proxy_util.c(1813): AH00927: initializing worker https://127.0.0.1:8083/fhem local
[Mon Aug 05 20:43:02.794896 2019] [proxy:debug] [pid 1291] proxy_util.c(1864): AH00931: initialized single connection worker in child 1291 for (127.0.0.1)
Aufgerufen wird das Tablet ui aus Chrome mit dem Servername oder der Ip der festen ip des Servers immer mit dem gleichen ergebnis..
Möchte auch gerne access.log sehen bitte
Bitte auch die vollständige URL, wie Du TabletUI aufrufst.
Also die Tablet ui rufe ich nur über die IP Adresse auf da ich ja den Pfad direkt auf /opt /fhem/www/tablet gesetzt habe wird dadurch die index.php aufgerufen....nun würde ich meinen fhem Server gerne wieder auf http zurücksetzen da momentan mein Tablet ui gar nicht funzt ....aber irgendwie geht das nicht dachte mit https wieder auf null zu setzten und Neustarten wäre es getan, leider ist es das nicht. Was muss ich noch machen?
Nicht auf 0 setzen, sondern löschen.
Sorry, aber ich verstehe deine Konfiguration immer noch nicht.
- Läuft alles (fhem, TabletUI, Apache) auf dem gleichem Rechner?
- sollen die TabletUI Seiten von Apache bedient werden, oder hast Du dafür ein HTTPSRV Device eingerichte, wie hier beschrieben: https://wiki.fhem.de/wiki/FHEM_Tablet_UI#Installation ?
Ok danke, Ja alles läuft auf einen Rechner Httpsrv hatte ich bis zu dem Zeitpunkt wo ich php brauchte habe ich aber mittlerweile aus der config gelöscht da ich darüber keinen Zugriff mehr auf das Tablet ui hatte
Dann brauchst aber kein Proxy???
http://IP:8083/fhem wird vom internen Fhem Webserver betrieben
https://IP wird von Apache betrieben (und ruft im Hintergrund fhem)
Du meinst das ich kein Proxy angeben muss in der apache.config? z.B so?
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName xxxxxxxxxxxxxxx
DocumentRoot /opt/fhem/www/tablet
<Directory /opt/fhem/www>
Order allow,deny
Allow from all
Require all granted
Options +Indexes
</Directory>
LogLevel alert rewrite:trace2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Mfg
Ich dachte Du willst https (also Port 443), aber ja, sowas in die Richtung
Ja hatte ich auch, hab jetzt nochmals umgestellt auf Port 80 http um zu schon ob da ohne Proxy Einstellungen funktioniert aber auch das geht nicht ....
Darf ich mal fragen, warum Du unbedingt Apache benutzen möchtest, statt was standardmässig Fhem zur Verfügung stellt?
Da der Webserver vom fhem php nicht kann
Aber TabletUI ist nicht auf PHP! ???
Meines mittlerweile schon :)... nun bin ich wieder bei meinem Problem angekommen das unter https die index.php läuft und alle iframes nicht, außer ich rufe die Seiten direkt im Browser auf bin am überlegen ob da vielleicht x frameoptions hilft ::)
Jetzt weiss ich nicht mehr wo Du bist. Wieder auf die Konfig wie im ersten Post?
Zitatunter https die index.php läuft und alle iframes nicht
Was kommt als Fehlermeldung in der Console des Browsers? (F12)
Hallo so habs geschafft ;D
musste die Zeile <meta name="fhemweb_url" content="http://xxxxxxxx:8083/fhem/"> in der php enfernen...
und meine Apache.config sieht jetzt so aus
# Enables outgoing compression for specific file types
<IfModule mod_deflate.c>
<FilesMatch ".*\.(html|htm|shtml|php|css|js|xml|log|txt|bmp|ttf|otf|eot|svg)$">
SetOutputFilter DEFLATE
</FilesMatch>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE text/xml application/xml application/xhtml+xml text/x-com$
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-java$
</IfModule>
<Location /fhem>
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /fhem(.*) ws://localhost:8083/fhem$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /fhem(.*) http://localhost:8083/fhem$1 [P,L]
ProxyPass http://localhost:8083/fhem
ProxyPassReverse http://localhost:8083/fhem
# ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
ProxyHTMLURLMap / /fhem/
ProxyHTMLURLMap /fhem/ /fhem/
Order deny,allow
Allow from all
</Location>
</VirtualHost>
Mfg Mani
Wow... ok. Sowas hätte ich selbst nicht geschafft, zumindest auf der Konfiguration von einem anderen, ohne selbst experimentieren zu können.
Bravo :)
Ich vermute Du hast dann longpoll auf websocket?
Nur eine Frage: die erste Zeile mit ProxyHTMLURLMap verstehe ich nicht. Werden die Skripte direkt aus / gerufen, obwohl die in fhem liegen?
ja richtig Longpoll ist auf websocket
die Apache.config hab ich hier gefunden "Apache Authentication Proxy nach Wikibeitrag funzt nicht"
danke an a-p-s
bis jetzt geht alles ;)
Mfg
Hallo mani,
bringt der Umzug auf den Apache auch eine bessere Performance?
Wie hast Du Tablet UI vorher genutzt? Als HTTPSRV-Device oder einfach über FHEMWEB?
Gruß,
twin