Sascha Schulz
2025-08-25 deb50954f0776638e269211a512d361951ad48d2
index.html
@@ -4943,10 +4943,10 @@
                        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>
@@ -4965,6 +4965,276 @@
                  </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
                        &lt;VirtualHost *:443&gt;
                        # 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>