SSL

Einrichtung eines SSL gesicherten Webservers

Mittlerweile habe ich mich fast ein wenig in das Thema reingesteigert 🙂 Schon der dritte Post über dieses Thema… Aber diesmal von der anderen Seite. Ihr möchtet wissen, wie ihr möglichst schnell einen so genannten LAMP Stack aufbauen könnt, der gleichzeitig auch noch mit einem gültigem SSL Zertifikat ausgestattet wird? Schaut einfach mal dieses Dokument an:

Webserver mit SSL Verschlüsselung

Statusmitteilung

Was ist SSL-Verschlüsselung?

Wie bereits im letzten Post geschrieben, habe ich mich ein wenig mit SSL Verschlüsselung von Internetseiten beschäftigt. Ich habe mich hiermit nicht im Studium beschäftigt. Könnte aber später noch einmal vorkommen 🙂

Was bedeutet denn eigentlich SSL-Verschlüsselung?

SSL

Das grüne Schloss bedeutet, dass die Kommunkation zwischen dem Server im Internet und eurem Computer verschlüsselt und nur von diesen beiden Computern verarbeitet werden kann.

Welchen Vorteil als Benutzer habe ich davon?

Ich persönliche finde, dass der Vorteil auf der Hand liegt. Nicht zuletzt werden über genau diese Verbindung Kennwörter oder Geburtsdaten bis hin zu Kontodaten, oder Online Banking Dokumenten gesendet. Diese können ohne Verschlüsselung ohne Probleme von jedem techn. Versiertem ausgelesen und missbraucht werden. Durch die Verschlüsselung der Verbindung wird dies verhindert.

Welche Voraussetzungen muss ich erfüllen?

Als Anwender wird ein aktueller Internetbrowser benötigt. Der Internetbrowser ist die Software, die gerade verwendet wird, um das Internet zu verwenden. Beispiele sind:

  • Mozilla Firefox
  • Google Chrome
  • Microsoft Edge
  • Micorosft Internet Explorer
  • Opera

Ansonsten muss der Benutzer keine weiteren Voraussetzungen erfüllen.

Was kostet mich das?

Das ist das schönste: NIX 🙂

winfer-blog jetzt auch mit SSL

Lange habe ich gedacht, dass ich SSL schon nicht benötigen werde. Nun habe ich mich am Wochenende damit beschäftigt auch eine gesicherte Verbindung zu einem Plesk basierten Webserver aufbauen zu können. Ihr könnt diesen Blog ab jetzt also auch überfolgende Internetadresse erreichen:

https://www.winfer-blog.de

Ziel war es hierfür eine möglichst günstige Möglichkeit zu finden, ein Zertifikat zu erhalten und zu installieren. Als erstes ist mir hierfür natürlich der Dienst Let´s Encrypt in den Kopf geschossen. Doch wie kann ich dies nun für einen Server einrichten, auf dem potenziell mehrere Internetseiten betrieben werden. Hierfür ist Let´s Encrypt nicht ausgelegt. Nach langer Suche im Internet bin ich dann auf ein Plug-In für Plesk gestoßen, dass genau dieses Problem behandelt. Das Plug-In befindet aktuell noch in Entwicklung. Ich kann aber berichten, dass es bereits stabil funktioniert!

Lang ist der letzte Post her

Lang ist es her, nun gibt es die nächsten Informationen über das Studium und das Theoriesemester 4 🙂 Wie üblich erhaltet ihr die Informationen zu jedem Fach.

Zuerst möchte ich auf das Fach Datenmanagement schauen: Hier haben wir tiefer in die Programmiersprache Java Einblick genommen. Wie funktionieren Listen in Java, oder wie kann ich einen Suchbaum in Java aufbauen. Aber auch für andere Programme haben wir neue Befehle gelernt. Die regulären Ausdrücke helfen so zum Beispiel beim genaueren Suchen im Internet und auf dem eigenem Computer.

Als nächstes kommt unser Investition und Finanzierung Fach. Es  ist nahezu wie Mathe.. Wir kriegen das Handwerkzeug, um zu entscheiden, ob und wenn ja welche Maschine ein Betrieb kaufen sollte und ab wann das Geld wieder eingenommen ist. Aber auch einige Finanzierungstricks kommen zum Vorschein. So lernt man, dass Finanzierungen beim Anbieter grundsätzlich günstiger scheinen, als bei einer Bank. Dies geschieht aber nur durch eine erhöhte Anzahlung zu Beginn der Laufzeit.

In IT-Servicemanagement lernen wir den grundlegenden Aufbau des Service eines Betriebes. Wie funktioniert ein Helpdesk/Call Center und wie sind die Wege nachdem der Kunde bei der Service Hotline angerufen hat? Es wird hierbei deutlich ersichtlich, dass zwischen den unterschiedlichen Betrieben teilweise große Unterschiede im Aufbau gibt.

Die Datenanalyse kam in den ersten 3-4 Wochen sehr der Statistikvorlesung aus dem 2. Semester nahe. Die Themen wurde aufgefrischt und vertieft. Wie können wir anhand von Daten Gruppen bilden, die zusammenhören. Wie kann ich bestimmen, zu welcher Gruppe ein weiteres Element passt? Solche Fragen sind die grundlegenden Fragestellungen. Nach der 4. Woche hat sich Mathe ein wenig in den Hintergrund verabschiedet. 🙂

Zu guter Letzt ist dann noch Projektmanagement für Informationssysteme übrig… Als begleitende Fragen könnten folgende auftretende: Wie muss ich ein IT-Projekt aufbauen. Welche Dokumente benötige ich, damit das IT-Projekt ein Erfolg wird. Was ist eine Anforderung und wie kann ich Anforderungen an eine Software aufnehmen, aber auch grundlegendere Projektplanungen gehören zum Unterrichtsstoff

 

Und weiter geht’s

Nächste Woche geht es wieder an die Hochschule, irgendwie verfliegt die Lust, wenn die Gedanken an das Praxisprojekt gehen. Es ist schon spannend, wie dann jede Zeile Text eine Freude darstellen kann.
Naja so langsam bin ich in den letzten Zügen und mache nun das Feintuning…
Nächsten Donnerstag ist die Deadline. Das sollte passen 🙂

Video

Lernen kann Spaß machen :)

Ist ja schon ein bisschen her, seit meinem letzten Beitrag..

Nun, letzte Woche gab es eine Schulung zur Persönlichkeitsentwicklung. Hier fielen dann die Worte, dass Schule ein absolutes schlechtes Lernkonzept hätte. Man müsse sich die neu eingeschulten Kinder anschauen. Die haben noch richtig Lust zum Lernen. Daneben müsste man dann die Schüler in der 3. Klasse anschauen. Da ist schon der Spaß am Lernen vorüber.

Ganz im Gegenteil arbeitet diese Schule in den USA. Schaut euch einfach mal die Dokumentation von Galileo an:

 

Extended ArrayList

Am Wochenende habe ich mich damit beschäftigt eine 3 Spaltige Tabelle mit Listen aufzubauen. Hierbei werden derzeit für jede Spalte eine ArrayList erstellt. Zusätzlich gibt es noch eine HashListe. Diese stellt die Prüfmöglichkeit dar, ob Integrität der Tabelle noch gegeben ist. Sobald die Datenintegrität nicht mehr gegeben ist, wird ein Fehler geworfen. Für die Zukunft möchte ich noch versuchen eine Überprüfung mit anschließender „Selbstheilung“ zu implementieren. Dies wird vermutlich aber noch ein wenig dauern. Verfolgt werden kann dieses kleine Projekt auf GitHub unter: ExtendedArrayList

Über Rückmeldung, Verbesserungswünsche freue ich mich natürlich immer 🙂

package voltoviper;

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;

import java.util.ArrayList;

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;

import java.util.ArrayList;

/**
 * Diese ArrayList bietet die Möglichkeit eine 3-spaltige ArrayListe aufzubauen. Es werden hierbei für jede Spalte eine
 * neue ArrayList angelegt auf denen dann alle Aktionen gleichzeitig ausgeführt werden. Durch eine Hash-Überprüfung wird
 * sichergestellt, dass die Daten nicht durch irgendwelche Umstände verändert werden können.
 * @author Christoph Nebendahl
 */
public abstract class ExtendedArrayList<T, U, V>{

    ObjectProperty<ArrayList<T>> data1;
    ObjectProperty<ArrayList<U>> data2;
    ObjectProperty<ArrayList<V>> data3;
    ObjectProperty<ArrayList<String>> hashlist;

    /**
     *
     */
    public ExtendedArrayList() {
        data1 = new SimpleObjectProperty<>(new ArrayList<>());
        data2 = new SimpleObjectProperty<>(new ArrayList<>());
        data3 = new SimpleObjectProperty<>(new ArrayList<>());
        hashlist = new SimpleObjectProperty<>(new ArrayList<>());

    }

    /**
     * Fügt die übergebenen Objekte in die ExtendedArrayList ein, und überprüft anschließend, ob die Daten korrekt eingetragen wurden.
     *
     * @param data1 Object1 dass eingetragen werden soll.
     * @param data2 Object2 dass eingetragen werden soll.
     * @param data3 Object3 dass eingetragen werden soll.
     * @throws Exception sobald beim Eintragen ein Fehler auftritt.
     */
    public void add(T data1, U data2, V data3){
        this.data1.getValue().add(data1);
        this.data2.getValue().add(data2);
        this.data3.getValue().add(data3);
        this.hashlist.getValue().add(generateHash(data1, data2, data3));
        try {
            checkData(data1, data2, data3);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Generiert einen HashString der aus den drei übergebenen Objekten zusammengesetzt wird.
     *
     * @param data1 Objekt 1, aus dem der HashWert berechnet werden soll.
     * @param data2 Objekt 2, aus dem der HashWert berechnet werden soll.
     * @param data3 Objekt 3, aus dem der HashWert berechnet werden soll.
     * @return Gibt einen String zurück, der den zusammengesetzten HashString enthält.
     */
    private String generateHash(T data1, U data2, V data3) {
        StringBuilder hash = new StringBuilder();
        hash.append(data1.hashCode());
        hash.append(data2.hashCode());
        hash.append(data3.hashCode());
        return hash.toString();
    }

    /**
     * Überprüft die gesamte ExtendedArrayList, ob die integrität gegeben ist.
     *
     * @return Gibt true zurück, wenn alle Elemente korrekt liegen.
     * @throws IntegrityException wird geworfen, sobald ein Hashwert oder Länge der ArrayList nicht übereinstimmt.
     */
    public boolean check() throws IntegrityException {
        for (int i = 0; i < getMaxSize(); i++) {
            if (!generateHash(data1.getValue().get(i), data2.getValue().get(i), data3.getValue().get(i)).equals(hashlist.getValue().get(i))) {
                throw new IntegrityException("List Elements are not equal");
            }
        }
        return true;
    }

    /**
     * Gibt die Größe der Listen zurück und überprüft, ob diese gleich groß sind.
     *
     * @return Integer Wert der die Größe der Listen darstellt
     * @throws IntegrityException wird geworfen, sobald die Listen nicht gleich groß sind.
     */
    private int getMaxSize() throws IntegrityException {
        int size = data1.getValue().size();
        if (data2.getValue().size() != size) {
            throw new IntegrityException("Lists Size are not equal");
        }
        if (data3.getValue().size() != size) {
            throw new IntegrityException("Lists Size are not equal");
        }
        if (hashlist.getValue().size() != size) {
            throw new IntegrityException("Lists Size are not equal");
        }
        return size;
    }

    /**
     * Überprüft, ob die Integrität der Extended ArrayList gegeben ist.
     *
     * @param data1 Objekt1 das überprüft werden muss
     * @param data2 Objekt2 das überprüft werden muss
     * @param data3 Objekt3 das überprüft werden muss
     * @return Gibt ein true zurück, sobald alle 3 Objekte an der gleichen ID stehen
     * @throws IntegrityException Wirft eine Integrity Exception sobald die Integrität der gegeben Daten nicht übereinstimmt.
     */
    private boolean checkData(T data1, U data2, V data3) throws Exception {
        int id = this.data1.getValue().indexOf(data1);
        if ((this.data2.getValue().indexOf(data2) == id) && (this.data3.getValue().indexOf(data3) == id)) {
            return true;
        } else {
            throw new IntegrityException("ExtendedArrayList not safe!");
        }
    }

    /**
     * Gibt eon Object[] zurück, der die Werte an der angegebenen Stelle der ArrayList zurück.
     * @param i Stelle, dessen Werte zurückgegeben werden sollen.
     * @return Gibt ein Ibject[] zurück, sobald während der Abfrage weder eine Integritätats Exception festgestellt wird,
     * noch eine Stelle ausgewählt wird, die nicht vorhanden ist.
     */
    public Object[] get(int i){
        Object[] objects = null;
        try {
            check();
            objects = new Object[3];
            objects[0] = data1.getValue().get(i);
            objects[1] = data2.getValue().get(i);
            objects[2] = data3.getValue().get(i);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objects;
    }

    /**
     * Gibt die 1. ArrayList zurück
     * Diese Methode sollte nicht von außen verwendet werden. Da bei Änderungen die Hash Werte nicht mehr mit der Referenz Liste übereinstimmt!!!
     * @return ArrayList der entsprechenden Klasse
     */
    private ArrayList<T> getDataList1(){
        return data1.getValue();
    }

    /**
     * Gibt die 2. ArrayList zurück
     * Diese Methode sollte nicht von außen verwendet werden. Da bei Änderungen die Hash Werte nicht mehr mit der Referenz Liste übereinstimmt!!!
     * @return ArrayList der enrsprechenden Klasse
     */
    private ArrayList<U> getDataList2(){
        return data2.getValue();
    }
    /**
     * Gibt die 3. ArrayList zurück
     * Diese Methode sollte nicht von außen verwendet werden. Da bei Änderungen die Hash Werte nicht mehr mit der Referenz Liste übereinstimmt!!!
     * @return ArrayList der enrsprechenden Klasse
     */
    private ArrayList<V> getDataList3(){
        return data3.getValue();
    }
    /**
     * Gibt die ArrayList mit den Hash Werten zurück
     * Diese Methode sollte nicht von außen verwendet werden. Sobald die Werte nicht mehr mit den anderen Listen übereinstimmt ist die Integrität nicht mehr gewährleistet werden.
     * @return ArrayList der enrsprechenden Klasse
     */
    private ArrayList<String> getHashList(){
        return hashlist.getValue();
    }
}

 

Wie schnell ein Plan …

Heute habe ich tatsächlich das erste mal so richtig erlebt,wenn in einem Projekt (steht in diesem Fall für mein Praxisprojekt) der Zeitplan komplett über den Haufen geworfen werden muss… Da programmiere den Prototypen so pünktlich, dass das eigentliche Schreiben der Arbeit diese Woche beginnen soll. Nun hat sich die Konzeption aber heute plötzlich grundlegend gewandelt.
Was heißt das genau? Nun, es soll jetzt eine grundlegend andere Softwarearchitektur verwendet werden. Dies wird dann vermutlich die nächsten 3 Wochen in Zeit beanspruchen. Diese Zeit muss dann also beim Schreiben aufgeholt. Doch nicht nur das, es  Technik verwendet die für ein Server-Client Prinzip gedacht und ausgelegt wird. Diese wird nun allerdings aussschließlich lokal verwendet… Da ist irgendwie der Sinn verfehlt.

Windows Update

Windows 10

Etwas mehr als ein halbes Jahr ist es nun her, seitdem Windows 10 veröffentlicht wurde. Es hat sich gezeigt (zumindest bei mir) dass Updates funktionieren, manchmal aber auch nicht J Im Bekannten Kreis gehen ca. 30% der Upgrades auf Windows 10 schief.

Nun startet Microsoft demnächst (Zeitpunkt steht noch nicht fest) die nächste Stufe in der Softwareverteilung. Nachdem bereits 200 Millionen Geräte auf der Welt mit Windows 10 funktionieren, wird Windows 10 nun zu einem „empfohlenem Update“. Doch was heißt das jetzt eigentlich als Windowsnutzer?

Windows ist standardmäßig meistens(!) so konfiguriert, dass „Empfohlene Updates“ automatisch installiert werden. Dadurch, dass Windows 10 nun hoch gestuft wird, wird durch diesen Haken Windows 10 installiert. Gewollt oder nicht…

Windows hat in einem eigenem Blogbeitrag ein paar nähere Informationen zur Verfügung gestellt (englisch):

https://blogs.windows.com/windowsexperience/2015/10/29/making-it-easier-to-upgrade-to-windows-10/

Sobald der unten markierte Haken entfernt wird, wird verhindert, dass Microsoft auf dem Rechner installiert wird. Das Fenster kann wie folgt erreicht werden:

Start –> Systemsteuerung –> System und Sicherheit –> Windows Update –> Einstellungen ändern

Windows Update

Star Wars VII