15.8. OpenSSL

Beigetragen von Tom Rhodes.

Es wird oft übersehen, dass OpenSSL Teil des FreeBSD-Basissystems ist. OpenSSL bietet eine verschlüsselte Transportschicht oberhalb der normalen Kommunikationsschicht und kann daher zusammen mit vielen Netzdiensten benutzt werden.

Anwendungsbeispiele für OpenSSL sind die verschlüsselte Authentifizierung von E-Mail-Clients oder Web-Transaktionen wie das Bezahlen mit einer Kreditkarte. OpenSSL kann während des Baus in viele Ports, wie www/apache22 und mail/claws-mail, integriert werden.

Anmerkung: Ist beim Aufruf von make die Variable WITH_OPENSSL_BASE nicht explizit auf yes gesetzt, baut die Ports-Sammlung meist den Port security/openssl.

Das OpenSSL von FreeBSD stellt die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur Verfügung. Die OpenSSL-Bibliotheken stellen kryptographische Funktionen bereit.

Anmerkung: Mit OpenSSL kann der IDEA-Algorithmus verwendet werden, wegen Patenten in den USA ist der Algorithmus in der Voreinstellung allerdings deaktiviert. Wenn Sie die IDEA-Lizenz akzeptieren, können Sie den IDEA-Algorithmus aktivieren, indem Sie die Variable MAKE_IDEA in make.conf setzen.

Meist wird OpenSSL eingesetzt, um Zertifikate für Anwendungen bereitzustellen. Die Zertifikate stellen die Identität einer Firma oder eines Einzelnen sicher. Wenn ein Zertifikat nicht von einer Zertifizierungsstelle (Certificate Authority, CA) gegengezeichnet wurde, erhalten Sie normalerweise eine Warnung. Eine Zertifizierungsstelle ist eine Firma wie VeriSign, die Zertifikate von Personen oder Firmen gegenzeichnet und damit die Korrektheit der Zertifikate bestätigt. Diese Prozedur kostet Geld, ist aber keine Voraussetzung für den Einsatz von Zertifikaten, beruhigt aber sicherheitsbewusste Benutzer.

15.8.1. Zertifikate erzeugen

Ein Zertifikat erzeugen Sie mit dem nachstehenden Kommando:

# openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SOME PASSWORD
An optional company name []:Another Name

Beachten Sie bitte, dass die Eingabe bei “Common Name” ein gültiger Domain-Name sein muss. Eine andere Eingabe erzeugt ein unbrauchbares Zertifikat. Das Zertifikat kann mit einer Gültigkeitsdauer und anderen Verschlüsselungsalgorithmen erzeugt werden. Die Hilfeseite openssl(1) beschreibt die zur Verfügung stehenden Optionen.

Das Verzeichnis, in dem Sie den letzten Befehl ausgeführt haben, enthält nun zwei Dateien: Die Anforderung für ein neues Zertifikat wurde in req.pem gespeichert. Diese Datei können Sie an eine Zertifizierungsstelle senden, wo Ihre Angaben geprüft werden. Nach erfolgreicher Prüfung wird das Zertifikat an Sie zurückgesandt. Die zweite Datei, cert.pem, enthält den privaten Schlüssel für Ihr Zertifikat und darf auch keine Fall in fremde Hände geraten, da ein Angreifer sonst in der Lage ist, anderen Personen oder Rechnern vorzugaukeln, dass es sich bei ihm um Sie handelt.

Wenn Sie keine Signatur einer Zertifizierungsstelle benötigen, können Sie ein selbst-signiertes Zertifikat erstellen. Erzeugen Sie dazu zuerst einen RSA-Schlüssel:

# openssl dsaparam -rand -genkey -out myRSA.key 1024

Erzeugen Sie dann den CA-Schlüssel:

# openssl gendsa -des3 -out myca.key myRSA.key

Erstellen Sie mit diesem Schlüssel das Zertifikat:

# openssl req -new -x509 -days 365 -key myca.key -out new.crt

Zwei neue Dateien befinden sich nun im Verzeichnis: Der Schlüssel der Zertifizierungsstelle myca.key und das Zertifikat selbst, new.crt. Sie sollten in einem Verzeichnis, vorzugsweise unterhalb von /etc abgelegt werden, das nur von root lesbar ist. Setzen Sie die Zugriffsrechte der Dateien mit chmod auf 0700.

15.8.2. Beispiel für Zertifikate

Was fangen Sie mit einem Zertifikat an? Sie könnten damit beispielsweise die Verbindungen zu Sendmail verschlüsseln. Dies würde die Klartext-Authentifizierung für Benutzer des lokalen MTA überflüssig machen.

Anmerkung: Das ist nicht unbedingt die beste Lösung, da einige MUAs Warnungen ausgeben, wenn ein Zertifikat nicht lokal installiert ist. Die Installation von Zertifikaten wird in der Dokumentation der MUAs beschrieben.

Ergänzen Sie die Konfigurationsdatei von sendmail (.mc) um die nachstehenden Zeilen:

dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl

Im Verzeichnis /etc/certs befindet sich der Schlüssel und das Zertifikat. Bauen Sie danach im Verzeichnis /etc/mail mit dem Kommando make install die .cf-Datei und starten Sie anschließend sendmail mit make restart neu.

Wenn alles gut ging, erscheinen keine Fehlermeldungen in der Datei /var/log/maillog und Sie sehen sendmail in der Prozessliste.

Testen Sie nun den Mailserver mit dem Kommando telnet(1):

# telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.

Wenn in einer Zeile STARTTLS erscheint, hat alles funktioniert.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.