Search

Page tree
Skip to end of metadata
Go to start of metadata

Zertifikat aus Java Keystore anzeigen, exportieren und importieren

Das Kennwort lautet standardmäßig changme oder changeit.

# Zertifikate anzeigen
/usr/local/jdk1.7.0_67/jre/bin/keytool -list -v -keystore jdk1.7.0_67/jre/lib/security/cacerts 
 
# Zertifikat exportieren
/usr/local/jdk1.7.0_21/jre/bin/keytool -exportcert -alias 10.0.10.10 -file /tmp/root.crt -keystore jdk1.7.0_21/jre/lib/security/cacerts
 
# Zertifikat importieren
/usr/local/jdk1.7.0_67/jre/bin/keytool -import     -alias 10.0.10.10 -file /tmp/root.crt -keystore jdk1.7.0_67/jre/lib/security/cacerts
 
# CA Zertifikat importieren
./bin/keytool -import -trustcacerts -alias "CACert Root CA" -file /etc/ssl/certs/CACert-Root-CA.pem -keystore lib/security/cacerts
./bin/keytool -import -trustcacerts -alias "CACert Class3" -file /etc/ssl/certs/CACert-Class3.pem -keystore lib/security/cacerts


openssl


CSR für localhost mit subjectAltName erstellen

#!/bin/bash
server = $(hostname -f)
ip = $(host $server grep "has address" |cut -d " " -f 4)


cat > san_"$server".$(date --iso).cnf << EOL
[ req ]
default_bits    = 2048
prompt          = no
default_md      = sha256
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
C               = DE
ST              = Hamburg
L               = Hamburg
O               = Private Property
OU              = IT
CN            = $server

[ req_ext ]
basicConstraints = CA:FALSE
keyUsage        = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName  = @alt_names

[alt_names]
DNS.1   = $server
IP.1 = $ip
EOL


CSR erstellen

FQDN=host.example.tld; TIMESTAMP=$(date +%Y%m%d); openssl req -new -newkey rsa:2048 -nodes -sha256 -subj "/C=DE/ST=Hamburg/L=Hamburg/O=Private/OU=IT/CN=${FQDN}" -out ${FQDN}-csr-${TIMESTAMP}.pem -keyout ${FQDN}-key-${TIMESTAMP}.pem; ln -s ${FQDN}-csr-${TIMESTAMP}.pem ${FQDN}-csr.pem; ln -s ${FQDN}-key-${TIMESTAMP}.pem ${FQDN}-key.pem 

Selbst signieren

FQDN=host.example.tld; openssl x509 -req -days 365 -in ${FQDN}-csr.pem -signkey ${FQDN}-key.pem -out ${FQDN}-crt.pem


PUBKEY extrahieren - extract public key

openssl rsa -in  private.key  -out pubkey.pem -pubout -outform PEM

Fingerprint eines X509 Zertifikates ausgeben

openssl x509 -in /etc/ssl/certs/server.crt -fingerprint


Verschlüsselungen prüfen

HTTPS

# -servername ist wichtig für SNI 
openssl s_client -servername www.heise.de -host www.heise.de -port 443

CONNECTED(00000003)
[...]
---
Certificate chain
0 s:/C=DE/ST=Niedersachsen/L=Hannover/O=Heise Zeitschriften Verlag GmbH Co KG/OU=Netzwerkadministration/OU=Terms of use at www.verisign.com/rpa (c)05/CN=www.heise.de
i:/O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
1 s:/O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
[...]

Mit den von openssl bereitgestellten Informationen kann man zunächst die verwendeten Zertifikate überprüfen. Achtung: Wer das nicht tut, ist im Folgenden anfällig für Man-in-the-Middle-Angriffe. Es soll schon vorgekommen sein, dass technisch versierte Anwender, die ettercap bedienen konnten, auf diesem Weg an ein Admin-Passwort gekommen sind.

Der SSL-Client ver- und entschlüsselt den Eingabe- und Ausgabekanal transparent, so dass man nun direkt mit dem Server sprechen kann:

GET / HTTP/1.1
Host: www.heise.de

HTTP/1.1 302 Found
Date: Wed, 16 Sep 2009 10:24:44 GMT
Server: Apache/1.3.34
Location: http://www.heise.de/
[...]

IMAPS

openssl s_client -host imap.irgend.wo -port 993

[...]

* OK IMAP4 Ready 0.0.0.0 0001f994

1 Login user-ju secret

1 OK You are so in

2 LIST "" "*"

* LIST (\HasChildren) "." "INBOX"

* LIST (\HasNoChildren) "." "INBOX.AV"

[...]

2 OK Completed (0.130 secs 5171 calls)

3 logout

* BYE LOGOUT received

3 OK Completed Wichtig ist dabei die beliebig wählbare Sequenznummer, die dem eigentlichen IMAP-Befehl vorangestellt werden muss.

POP3S

openssl s_client -host pop.irgend.wo -port 995

[...]
+OK POP server ready H mimap3
USER user-ju
+OK password required for user "user-ju"
PASS secret
+OK mailbox "user-ju" has 0 messages (0 octets) H mimap3
quit
+OK POP server signing off Alternativ kann man auch telnet-ssl oder die Netcat-Weiterentwicklung Ncat einsetzen, die ebenfalls SSL-Funktionen bieten.

StartTLS

Vor allem Internet-Providern setzen bevorzugt den SSL-Nachfolger Transport Layer Security via StartTLS ein. Es hat den Vorteil, dass man es als zusätzliche Option anbieten kann, aber ein Client, der es nicht unterstützt, weiterhin mit dem Server unverschlüsselt kommunizieren kann. Anders herum muss auch ein Mail-Programm damit umgehen können, dass ein Server TLS verweigert.

Die bei vielen Clients zur Verschlüsselung voreingestellte Option "TLS nur, wenn möglich" birgt allerdings eine große Gefahr. Ein Angreifer in einer Man-In-The-Middle-Position könnte etwa aus dem Befehl StartTLS, der die Verschlüsselung aktivieren soll, unbemerkt ein XtartTLS machen. Das führt dann dazu, dass der Server sagt: "XtartTLS kann ich nicht" und manche Mail-Programme die Daten dann eben unverschlüsselt über die Leitung schicken, ohne dass der Anwender das bemerkt. Deshalb sollte man besser einmal testen, ob der Server StartTLS beherrscht und es dann zur Pflicht machen. Wenn dann eine Fehlermeldung erscheint, weiß man, dass etwas schief läuft.

Auf welchem Port ein TLS-fähiger Dienst läuft, hängt vom Anbieter ab. Prinzipiell kann man diese Form der Verschlüsselung transparent in den normalen Betrieb einbetten. Ob ein Mail-Server das unterstützt, verrät

$ nc smtp.irgend.wo smtp
220 Mailserver ESMTP Exim 4.69 Wed, 16 Sep 2009 13:05:15 +0200
ehlo test
250-Mailserver Hello loki [10.1.2.73]
250-SIZE 78643200
250-PIPELINING
250-STARTTLS
250 HELP
quit
221 Mailserver closing connection

In dieser Liste sollte der Befehl STARTTLS auftauchen, der die Verschlüsselung via Transport Layer Security aktiviert:

STARTTLS
220 TLS go ahead

Ab hier wird's mit netcat wieder schwierig, aber openssl springt erneut in die Bresche. Die Entwickler haben nämlich dem SSL-Client die notwendige Intelligenz spendiert, um in SMTP, POP3, IMAP und FTP nach TLS-Verschlüsselung zu fragen, was aber leider nicht mit allen Servern funktioniert.

$ openssl s_client -host mail.irgend.wo -port 25 -starttls smtp
CONNECTED(00000003)
[...]
250 HELP
ehlo test
250-Mailserver Hello loki [10.1.2.73]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP

Allerdings ist die Authentifizierung bei SMTP etwas komplizierter. Die meisten Server unterstützen wie der in diesem Beispiel das Verfahren AUTH PLAIN, beim dem die Zugangsdaten Base64-kodiert werden müssen. Das erledigt der Perl-Befehl

$ perl -MMIME::Base64 -e 'print encode_base64("\000user-ju\000secret")'
AHVzZXItanUAc2VjcmV0

dessen Ausgabe man an den SMTP-Server verfüttert:

AUTH PLAIN AHVzZXItanUAc2VjcmV0
235 Authentication succeeded

womit die Bahn frei ist, für weitere Mail-Kommandos.


LUKS

Dateisystem verschlüsseln mit LUKS

LUKS Homepage: http://code.google.com/p/cryptsetup/
pam_mount Modul: http://pam-mount.sourceforge.net/

Komplette Partition verschlüsseln

cryptsetup  -y -s 256 luksFormat /dev/sda1
  • Ich musste vorher ein modprobe dm_crypt machen
  • Ich konnte keine Key > 256Bit verwenden, sonst
    Failed to setup dm-crypt key mapping.
    Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify that /dev/sda1 contains at least 508 sectors.
    Failed to write to key storage.

Verschlüsselte Partition öffnen

cryptsetup luksOpen /dev/sda1 cr_sda

Danach steht die Partition unter /dev/mapper/cr_sda zur Verfügung und kann z.B. formatiert werden

mkfs.ext3 -m 0 /dev/mapper/cr_sda

Partitionsinformation ausgeben

cryptsetup -v luksDump /dev/sda

Schlüssel hinzufügen

cryptsetup -v luksAddKey /dev/sda

Danach erst einen beliebigen, gültigen Key eingeben und dann den Neuen.

Verschlüsselte Partition (unter SUSE) einbinden

/etc/init.d/boot.crypto start

Voraussetzung dafür ist die Datei /etc/crypttab

cr_sda /dev/sda none none sda ext3

Header sichern und wieder herstellen

cryptsetup luksHeaderBackup --header-backup-file h /dev/mapper/c1

cryptsetup luksHeaderRestore
--header-backup-file h /dev/mapper/c1

cryptfs

http://en.opensuse.org/Encrypted_Root_File_System_with_SUSE_HOWTO