| | |
| | | ProxyRequests Off |
| | | |
| | | # ProxyPass [Quelle] [Ziel] (auf Port achten) => Weiterleitung |
| | | ProxyPass / http://127.0.0.1:9000 |
| | | ProxyPass / http://127.0.0.1:9000/ |
| | | |
| | | # ProxyPassReverse [Quelle] [Ziel] (auf Port achten) => URL-Rewrite bei Redirects |
| | | ProxyPassReverse / http://127.0.0.1:9000 |
| | | ProxyPassReverse / http://127.0.0.1:9000/ |
| | | </code> |
| | | </pre> |
| | | <p>Apache neu starten, um die Änderungen am vhost zu übernehmen</p> |
| | |
| | | </pre> |
| | | <p>Anschließend sollte die NodeJS-Anwendung unter der bereits bekannten Domain erreichbar sein.</p> |
| | | </section> |
| | | <section> |
| | | <h3>Wireshark</h3> |
| | | </section> |
| | | <section> |
| | | <p>Aufgabe</p> |
| | | <p>Installiere Wireshark und starte anschließend einen Paket-Mitschnitt auf dem WLAN-Adapter. Setze den Filter oben auf "<code>ip.dst == 123.123.123.123</code>" (IP eurer virtuellen Maschine eintragen), |
| | | besuche die in der VM eingerichtete Webseite in einem Browser und beobachte den Datenverkehr in Wireshark</p> |
| | | </section> |
| | | <section> |
| | | <h3>Aktivierung von HTTPS</h3> |
| | | </section> |
| | | <section> |
| | | <p>SSL-Zertifikat erstellen</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.pem -keyout key.pem |
| | | </code> |
| | | </pre> |
| | | <p>Anschließend die Fragen beantworten.</p> |
| | | <p>Die eigentliche Domain für das Zertifikat ist bei "CN" (Common Name) einzutragen</p> |
| | | </section> |
| | | <section> |
| | | <p>Aktivierung des entsprechenden Apache-Moduls:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | sudo a2enmod ssl |
| | | </code> |
| | | </pre> |
| | | <p>Leserechte für den Rest der Welt an den Zertifikatsdateien setzen</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | chmod +r cert.pem key.pem |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Anpassung / Erstellung vhost in <code>sites-available</code></p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | sudo cp example.conf example-ssl.conf |
| | | </code> |
| | | </pre> |
| | | <p>Den vhost für HTTP / Port 80 so konfigurieren, dass dieser nach HTTPS / Port 443 weiterleitet:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # example.conf |
| | | # Sämtliche Proxy-Direktiven und andere Inhalt |
| | | # dienende Direktiven auskommentieren: |
| | | #ProxyPass ... |
| | | #ProxyPassReverse ... |
| | | |
| | | # hinzufügen (auf Ziel-Domäne achten) |
| | | Redirect Permanent / https://example.com |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Den vhost für HTTPS / Port 443 anpassen</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # example-ssl.conf |
| | | # Port anpassen |
| | | <VirtualHost *:443> |
| | | |
| | | # hinzufügen (auf korrekte Pfade achten) |
| | | SSLEngine on |
| | | SSLCertificateFile "/.../cert.pem" |
| | | SSLCertificateKeyFile "/.../key.pem" |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # neuen vhost für SSL aktivieren: |
| | | sudo a2ensite example-ssl.conf |
| | | </code> |
| | | </pre> |
| | | <p>Anschließend den Apache neu starten:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | sudo systemctl restart apache2 |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Aufgabe</p> |
| | | <p>Inspiziere erneut den Datenverkehr zwischen eurem Browser und dem Server mittels Wireshark. Was fällt auf?</p> |
| | | </section> |
| | | <section> |
| | | <p>Datenverkehr eines Browser in Wireshark sichtbar machen:</p> |
| | | <p>CMD öffnen:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | REM Umgebungsvariable setzen: |
| | | set SSLKEYLOGFILE=%USERPROFILE%\Desktop\sslkey.log |
| | | REM Beliebigen Browser per Konsole starten (Ordner nach Bedarf vorher wechseln): |
| | | chromium.exe |
| | | REM oder |
| | | firefox.exe |
| | | </code> |
| | | </pre> |
| | | <p>Die TLS-Schlüssel werden nun vom Browser in der festgeleten Datei geloggt</p> |
| | | </section> |
| | | <section> |
| | | <p>Eben angegebene Datei in Wireshark einstellen:</p> |
| | | <p>Bearbeiten > Einstellungen > Protocols > TLS > (Pre)-Master-Secret log filename</p> |
| | | </section> |
| | | <section> |
| | | Einrichtung eines Datenbank-Servers (Beispiel MySql) |
| | | </section> |
| | | <section> |
| | | <p>Datenbank installieren:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # Paketquellen aktualisieren |
| | | sudo apt update |
| | | |
| | | # MySql installieren |
| | | sudo apt install mysql-server |
| | | |
| | | # systemd neuladen |
| | | sudo systemctl daemon-reload |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Der Server sollte nun laufen:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | sudo systemctl status mysql.service |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Root-Passwort setzen/ändern:</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # Login mit generischen Credentials |
| | | sudo mysql --defaults-file=/etc/mysql/debian.cnf |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; |
| | | exit; |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # Server neustarten |
| | | sudo systemctl restart mysql.service |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | # Login mit neuen Credentials |
| | | mysql -uroot -p |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | CREATE DATABASE erp; |
| | | |
| | | use erp; |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | create table stores |
| | | ( |
| | | id int not null auto_increment primary key, |
| | | number varchar(5) not null |
| | | ); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | create table revenues |
| | | ( |
| | | id int not null auto_increment primary key, |
| | | store int not null, |
| | | revenue int not null, |
| | | foreign key (store) references stores (id) |
| | | ); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | insert into revenues (store, revenue) |
| | | values (1, 10000), |
| | | (1, 20000), |
| | | (1, 15000), |
| | | (2, 13000); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="sql" data-trim data-line-numbers> |
| | | select stores.number, sum(revenues.revenue) as revenue |
| | | from stores |
| | | inner join revenues on revenues.store = stores.id |
| | | group by stores.id; |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Zugriff in NodeJS</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | const mysql = require("mysql"); |
| | | |
| | | var connection = mysql.createConnection({ |
| | | host: 'localhost', user: 'root', password: 'root', database: 'erp' |
| | | }); |
| | | |
| | | connection.connect(); |
| | | |
| | | connection.query('select * from stores;', function (error, results, fields) { |
| | | if (error) throw error; |
| | | |
| | | console.log(results); |
| | | }); |
| | | |
| | | connection.end(); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Aufgabe</p> |
| | | <p>Implementiere das <code>GROUP BY</code>-Statement aus dem SQL-Beispiel im NodeJS-Beispiel und gebe pro Zeile die Filiale mit dem Umsatz aus</p> |
| | | </section> |
| | | <section> |
| | | <p>Lösung</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | const mysql = require("mysql"); |
| | | |
| | | var connection = mysql.createConnection({ |
| | | host: 'localhost', user: 'root', password : 'root', database : 'erp' |
| | | }); |
| | | |
| | | connection.connect(); |
| | | |
| | | const query = ` |
| | | select stores.number, sum(revenues.revenue) as revenue |
| | | from stores |
| | | inner join revenues on revenues.store = stores.id |
| | | group by stores.id; |
| | | `; |
| | | |
| | | connection.query(query, function (error, results, fields) { |
| | | if (error) throw error; |
| | | |
| | | for (const result of results) { |
| | | console.log(result.number + ": " + result.revenue); |
| | | } |
| | | }); |
| | | |
| | | connection.end(); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | </div> |
| | | </div> |