Selbst signierte Zertifikate

OpenSSL ist ein vielseitiges Kommandozeilen-Tool, das für eine Vielzahl von Kryptographischen Aufgaben im Zusammenhang mit Public Key Infrastructure (PKI) und HTTPS (HTTP über TLS) verwendet werden kann. Dieser Beitrag zeigt die Anwendung von OpenSSL für Zertifikate die für asymmetrische Verschlüsselung für Beta und Testaufgaben eingesetzt werden können, für interne oder in Entwicklungsumgebungen lohnen sich die mit kosten verbunden, CSR – Certificate Signing Request Zertifikate nicht, die von einem Trusted CA Zertifikatsaussteller ausgestellt werden. Hierzu in einem Beispiel die Generierung eines privaten Schlüssels mit Zertifikat Ausstellung und dessen Signierung.

Open Secure Socket Layer protocol

Selbst signiertes Zertifikat erstellen

Bei diesem Beispiel wird ein Privater Schlüssel mit einer länge von 4096 bit generiert, dieser 10 Jahre gültig ist, es werden die X509 Distinguished Key Identifier definiert, mit der Verschlüsselung des SHA256 Algorithmus, abschliessend wird das Zertifikat selbst signiert.

Das so generierte Self-signed certificat dient zur Kryptographischen Verschlüsselung für HTTPS / TLS Server und Client, Code Signing, IP End Point Security (SSL-VPN) oder für S/MIME – E-Mail.

Das Zertifikat cert.crt wird anschliessend im Zertifikatspeicher importiert, dies zu Vertrauenswürdige Stammzertifizierungsstellen und zu den Eigenen Zertifikate.

Zertifikat-Snap-In
Abbildung: Zertifikat-Snap-In

OpenSSL – Open Secure Socket Layer protocol gehört bei den meisten Linux Distributionen zum Standard, die Windows Binaries stehen auf sourceforge zur Verfügung.

Quelle: http://gnuwin32.sourceforge.net/packages/openssl.htm

Wer mit dem OpenSSL Kommandozeilen-Tool nicht vertraut ist, kann das Tool X Zertifikat – xca verwenden, dieses in einer GUI sämtliche Optionen bietet.

X Zertifikat und Key Management ist eine Schnittstelle für die Verwaltung von asymmetrischen Schlüsseln wie RSA oder DSA. Es ist für die Erstellung und Signierung von Zertifikaten gedacht. Für die kryptographischen Operationen wird die OpenSSL-Bibliothek verwendet.

Features

  • Start own PKI and create all kinds of certificates, requests or CRLs
  • Import and export in any format like PEM, DER, PKCS#7, PKCS#12
  • Use them for your IPsec, OpenVPN, HTTPs or any other certificate based setup
  • Manage your Smart-Cards via PKCS#11 interface
  • Export certificates and requests to a OpenSSL config file
  • Create Subject- and/or Extension- templates to ease issuing similar certs
  • Convert existing certificates or requests to templates
  • Get the broad support of x509v3 extensions as flexible as OpenSSL but user friendlier
  • Adapt the Columns to have your important information at a glance

Quelle: https://sourceforge.net/projects/xca/

X-Certificate-Key-management
Abbildung: X Certificate and Key management

Bevor Schlüssel und Zertifikate generiert werden können, muss eine Datenbank mit <Ctrl+N> angelegt werden. Nach dem generieren eines Privaten Schlüssels kann ein neues Zertifikat erzeugt werden. Die Privaten Schlüssel sollten Passwort geschützt aufbewahrt werden. Wird ein Privater Schlüssel für unautorisierte verfügbar, ist das Zertifikat nicht mehr sicher und muss ersetzt werden.

Schlüssel und Zertifikat überprüfen

Privat Key Prüfen und ausgeben

Zertifikat anzeigen

Certificate Signing Request Prüfen und ausgeben

Überprüfung des Privaten Schlüssels, des CSR und des Zertifikates auf Echtheit.

Wenn die Ausgabe jedes Befehls identisch ist, ist die Wahrscheinlichkeit sehr hoch, dass das Zertifikat und der CSR mit dem private Schlüssel verwandt sind.

OpenSSH on Windows

OpenSSH ist das führende Konnektivitätstool für die Remote-Anmeldung mit dem SSH-Protokoll in Unix/Linux Umgebungen. OpenSSH verschlüsselt den Datenverkehr, darüber hinaus bietet OpenSSH eine große Auswahl an sicheren Tunneling-Funktionen, mehrere Authentifizierungsmethoden und anspruchsvolle Konfigurationsoptionen.

Für die Remoteverwaltung in heterogenen Netzwerken, haben Windows und Unix/Linux nicht viel gemeinsames. Unter Unix/Linux ist der Remote-Zugriff per SSH ein Standard für Datentransfer, Remote-Terminal sowie Port-Forwarding für Remote-X. Unter Windows ist ein wirklicher Standard noch nicht erreicht, neben WinRM, PowerShell-Remote, RDS und RSAT gibt es einige mehr. Hinzugekommen ist nun auch ein Port des freien OpenSSH Client/Server Tools, dies ermöglicht weitere Integration und Verwaltung von Windows und Linux/Unix Umgebungen.

Die OpenSSH Suite ist auf Github verfügbar und besteht aktuell aus folgenden Tools:

  • Remote-Operationen werden mit ssh, scp und sftp durchgeführt
  • Key Management mit ssh-add, ssh-keygen
  • Die Service-Seite besteht aus sshd, sftp-server und ssh-agent
Win32 OpenSSH Installation

Nach dem Download das Zip-Archive in C:\Program Files\OpenSSH entpacken.

Starte PowerShell als Administrator und wechsle in den Pfad C:\Program Files\OpenSSH und führe folgende Aktion aus.

Die SSH-Host-Schlüssel generieren mit allen Schlüssel die sshd für Key-auth erwartet.

Die Firewall auf Windows Server für SSH erweitern.

Bei der Windows Workstation werden eingehende SSH Verbindungen wie folgt erlaubt.

Der SSH-Agent hält den privaten Schlüssel im Arbeitsspeicher.

Nun können SSH Verbinden aufgebaut werden.

openSSH-client

Den SSH Daemon Auto-start (Boot) aktivieren.

Ein Schlüsselpar wird wie folgt generiert.

 

 

Outlook Junk E-Mail auf Smarthost

Niemand mag SPAM, um die Flut unerwünschter E-Mails einzudämmen, müssen eingehende E-Mails mehrere Filter und sogenannte Milter durchlaufen. Eine effiziente Filter Lösung bietet der Mail Transfer Agent – Postfix, das Open Source Programm wurde 1998 von Wietse Zweitze Venema entwickelt. Postfix ist ein leistungsfähiger Mail Transfer Agent für Unix und Unix-Derivate. Die Software sollte zum Entwicklungszeitpunkt eine kompatible Alternative zu Sendmail sein. Dabei wurde bei der Entwicklung insbesondere auf Sicherheitsaspekte geachtet. Der Quellcode von Postfix steht unter der IBM Public License. Postfix MTA’s werden von vielen Internet Providern und in Großunternehmen eingesetzt.

Die Architektur von Postfix erlaubt es eine Vielzahl an Filter einzubinden, wie das unter der Apache-Lizenz stehende SpamAssassin, um unerwünschte E-Mails herauszufiltern und zu markieren, oder Greylisting um das verhalten eines Senders zu überprüfen. Zum Schutz gegen Viren und Schadcode kann Clam AntiVirus eingebunden werden – ClamAV steht unter der GNU General Public License.

Workaround

Als E-Mail Client Software in Unternehmen ist MS Outlook im Exchange betrieb weit verbreitet. Für SPAM der nicht in einem Filter abgefangen wurde, bietet Outlook die Möglichkeit unerwünschte Absender zu sperren, hierbei ist die Bezeichnung nicht gerade zutreffend, denn die sogenannten Junk E-Mails werden auf dem Server nicht gesperrt, sondern sie werden beim Empfang viel mehr in den Outlook Ordner Junk-E-Mail verschoben. Besser wäre es aber wenn der vermeintliche Absender es gar nicht schafft es zuzustellen, also es zurückgewiesen wird.

outlook-junk-emails

Hier gibt es eine Möglichkeit einzugreifen, wenn der Exchange Server wie oft die E-Mails nicht direkt aus dem Internet empfängt, sondern über einen Smarthost abwickelt. Smarthosts sind meist Linux basierte Server die mit dem Postfix MTA arbeiten.

Abbildung: Junk-E-Mail Optionen: Blockierte Abesnder
Abbildung: Junk-E-Mail Optionen: Blockierte Abesnder
Installation

Der folgende PowerShell Script ruft die Junk-E-Mail Einträge aus der Outlook Sperrliste Blockierte Absender von allen Mailboxen aus und extrahiert die formatierte Ausgabe als Windows-ANSI Text und in eine ACSII-Text Datei. Anschliessend wird die erzeugte Datei extracted_JunkEmails.asc auf den Smarthost übertragen. Die Whitelist wird in der Datei extracted-TrustedEmails.asc angelegt.

Der Script wird auf dem Exchange Server in der Exchange Management Shell als Administrator ausgeführt, geeigneterweise als Job in der Aufgabenplanung zu jeder Stunde. Bei Zeile 8 soll anstelle des Platzhalters der Benutzername gefolgt vom Name des Smarthost stehen, dies als FQDN oder host IP.

Auf dem Exchange Server wird PuTTY benötigt, nach der Installation von PuTTY 64bit dient pscp.exe (PuTTY Secure Copy) zur Übertragung der Sperrliste Blockierte Absender auf den Smarthost. Damit es zu keiner Passwort abfrage kommt, muss mit PuTTY Key Generator (puttygen.exe) ein Schlüsselpar erzeugt werden, der erzeugte Public Key wird auf dem Smarthost unter das home Verzeichnis des Benutzers in das Verzeichnis .ssh in die Datei authorized_keys kopiert. Damit ist der Script mit pscp in der lage sich beim Smarthost zu authentifizieren.

Auf dem Linux Smarthost dient ein Shell Script um die Zeilen in das Unix (LF) Format zu konvertieren. Dieser Einzeiler erzeugt die passende Ausgabe in das Postfix Verzeichnis über pipe in die Datei junkbl_access und trusted_access.

Code in eine Datei junkbl.sh einfügen und unter dem Pfad /usr/bin/ speichern.

Der Shell Script wird ausführbar gemacht.

Der stream-editor – sed konvertiert die Zeilenumbrüche, entfernt leer Zeichen und fügt am ende jeder Zeile den SMTP Error Code 550 ein, damit werden die beim versuch der Zustellung nicht erwünschten E-Mails der Sperrliste Blockierte Absender zurückgewiesen.

Die Postfix lookup tables erstellen und aktualisieren.

In der Postfix Hauptkonfiguration werden die restriction checks hinzugefügt.

Nach einem postfix reload wird die Outlook Sperrliste von Postfix angewandt.

Per cronjob soll die Sperrliste laufend aktualisiert werden, zu jeder Stunde +5 min.

Anmerkung

Bei CentOS 7 ist es erforderlich den user zur Group sftp_users hinzuzufügen, mit usermod -G sftp_users {username}, in der sshd_config muss die direktive Match Group sftp_users angewandt werden.

Wie ein Script für die Exchange Management Shell aus der Aufgabenplanung ausgeführt wird, erklärt der Beitrag Exchange MailboxStatistics Mail-Report

OpenSSH Key Bereitstellung für Auto-login PuTTY Key Generator

Eine weitere SSH Lösung bietet OpenSSH on Windows

Release Update und Bugfix auf Github

Outlook 2016 Indizierung

Bei Outlook 2016 funktioniert die Suche von Kontakte und Kalender nach Update nicht mehr. Die Ursache liegt bei der Windows Indizierung und der Indizierung von Outlook 2016.

Lösung

Die Indizierung der Outlook Suche abschalten. Die deaktivierung der Windows Indizierung für Outlook kann über die Indizierungsoptionen mit +R=control /name Microsoft.IndexingOptions vorgenommen werden.

Indizierungsoptionen Ausführen
Indizierungsoptionen Ausführen

Zu den Indizierungsoptionen kommt man auch über Datei -> Optionen -> Suche

Im Fenster Indizierungsoptionen auf Ändern klicken.

Outlook-indizierungsoptionen
Outlook Indizierungsoptionen

Im Fenster Indizierte Orte den Hacken bei Outlook entfernen

Indizierte Orte
Indizierte Orte

Die Suche im Kontakt und Termine Ordner sollte nun wieder möglich sein.

PowerShell Loop Hands-On

Beim programmieren kommen oft Arrays und Schlaufen-(Loops) zur Anwendung, so auch beim arbeiten mit PowerShell Scripts. In folgendem Beispiel werden 4 Array Werte angelegt, diese mittels der ID wieder aufgerufen werden.

Ein Array erstellt man mit folgendem Befehl:

Mit For-Schleife Array Werte ausgeben:

Die Länge des Arrays, bzw. die Anzahl der gespeicherten Werte, wird mit $array.length ausgelesen. Die Variable ($i) dient als Zähler, um zu Zählen wann die Schleife verlassen werden soll. Dem Zähler wird ein Startwert zugewiesen ($i=0). Der Startwert soll bei jedem Durchlauf der Schleife um 1 erhöhen ($i++) bis der Endwert erreicht ist. Der Endwert ist die Länge des Array ($array.length). Bei der Überprüfung des Endwert gibt es eine Bedingung: solange $i kleiner der Anzahl der Werte ($i -lt $array.length) ist.

For loop

Die For-Schleife: for ($i=0; $i -lt $array.length; $i++)
Startwert $i=0: Die Variable $i startet mit dem Wert 0
ist $i kleiner (-lt) $i -lt $array.length Bedingung: die For Schleife wird solange ausgeführt, solange diese Bedingung erfüllt ist: solange die Variable $i kleiner als $array.length ist, solange also $i kleiner 4 ist. Die Aktion beim Durchlauf der Schleife: $i++ bedeutet, den Wert der Variable $i um 1 erhöhen, bei jedem Durchlauf der Schleife wird $i um 1 grösser: 0 .. 1 .. 2 .. 3 …

while loop

Beispiel mit Startwert $i vor der Schleife definiert ($i=0)
while ($i -lt $array.length){
Innerhalb von while steht die Bedingung für den Durchlauf der Schleife, der Loop wid nicht verlassen, solange diese erfüllt ist:
$i -lt $array.length … solange $i kleiner $array.length ist
Die Variable $i wird innerhalb der Schleife jeweils um den Wert 1 erhöht: $i++

Endless Loop

while kann für eine Endlosschleife wie folgt verwendet werden: mit break kann die Endlosschleife wieder verlassen werden. Folgendes Beispiel durchläuft die Schleife bis break ausgeführt wird, dies geschieht wenn $i nicht mehr kleiner dem Wert 10 ist:

do loop

foreach

foreach ($i in $array)  Aufruf aller Werte des Array ($array). Die Variable $i enthält bei jedem Durchlauf den aktuell ausgelesenen Wert.

Operators

-eq  ist gleich
-ne  ist nicht gleich
-gt  ist grösser als
-ge  ist grösser oder gleich
-lt  ist kleiner als
-le  ist kleiner oder gleich