Tutorials - OpenSSL Tutorial

Sprachenübersicht/Betriebssysteme/Linux/Security

OpenSSL Tutorial

Diese Seite wurde 180546 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: OpenSSL, installieren, Zertifikat, public, private

Inhaltsverzeichnis



Vorwort Top



OpenSSL ist eine Open-Source-Version des SSL/TLS-Protokolls, und hat
die Aufgabe, sichere, verschlüsselte Verbindungen aufzubauen.
SSL wird vor allem bei HTTP, aber auch bei Applikationen wie z.B. SSH und OpenVPN eingesetzt. In diesem Tutorial lernen wir, wie wir OpenSSL
benutzen und Zertifikate erstellen.

Installation Top



  • Debian

    Unter Debian kann man OpenSSL mit apt-get install openssl installieren lassen.


  • RedHat RPM

    Wenn das Packetverwaltungssystem RPM installiert ist, müssen Sie nur
    das rpm Packet (google: openssl .rpm "index of") herunterladen, und
    es ausführen.


  • Source Code

    Die Source Codes können wir unter
    www.openssl.org/source/ herunterladen, in meinem
    Fall ist es die Datei www.openssl.org/source/openssl-0.9.8.tar.gz und
    www.openssl.org/source/openssl-0.9.8.tar.gz.md5.

    Nachdem wir die Datei heruntergeladen haben verschieben wir sie in
    das Verzeichnis /usr/src, und prüfen den md5 Wert:



    vsn-server:/usr/src# md5sum openssl-0.9.8.tar.gz && cat
    openssl-0.9.8.tar.gz.md5

    9da21071596a124acde6080552deac16 openssl-0.9.8.tar.gz
    9da21071596a124acde6080552deac16



    Die beiden Werte passen überein, also passt das ganze.

    Jetzt können wir die Datei entpacken und installieren:




    vsn-server:/usr/src# tar -xzvf openssl-0.9.8.tar.gz
    vsn-server:/usr/src# cd openssl-0.9.8
    vsn-server:/usr/src# ./configure
    vsn-server:/usr/src# make
    vsn-server:/usr/src# make test
    vsn-server:/usr/src# make install




    Jetzt sollte OpenSSL installiert sein.



Beispiel OpenVPN Top



Als Beispiel erstellen wir hier ein Zertifikat für die Benutzung von
OpenVPN. Für andere Optionen siehe man openssl.

Wichtig:


Wichtig ist, das man keine doppelten common names benutzt, das kann
später Fehler verursachen.



Schlüsselpaar für CA Top



Als erstes erstellen wir ein Schlüsselpaar für unsere Certificate Authority (CA). Dazu erstellen wir zuerst einen
Schlüssel(vpn-cakey.pem) und danach das Zertifikat(vpn-ca.pem). Der Schlüssel hat in diesem Beispiel
2048 Bit, je nach Anspruch kann er natürlich stärker oder schwächer
gewählt werden. Die Dateiendung .pem steht für ein Base64 kodiertes
X.509 (ein Public- Key-Infrastruktur Protokoll) Zertifikat.




#entweder openssl oder ssl
vsn-server:/usr/src# cd /usr/local/ssl
# Anm.: Bei Debian 3.1 befindet sich openssl unter /usr/lib/ssl
# Bei Fedora unter /usr/share/ssl
vsn-server:/usr/local/ssl# openssl genrsa -aes256 -out private/vpn-cakey.pem 2048
Generating RSA private key, 2048 bit long modulus
................................+++
...............+++
e is 65537 (0x10001)
Enter pass phrase for private/vpn-cakey.pem:
Verifying - Enter pass phrase for private/vpn-cakey.pem:

vsn-server:/usr/local/ssl# openssl req -new -x509 -days 3650 -key
private/vpn-cakey.pem -out vpn-ca.pem -set_serial 1

Enter pass phrase for private/vpn-cakey.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]:
State or Province Name (full name) [Some-State]:Vorarlberg
Locality Name (eg, city) []:Dornbirn
Organization Name (eg, company) [Internet Widgits Pty
Ltd]:Online-tutorials.net
Organizational Unit Name (eg, section) []:vsn
Common Name (eg, YOUR name) []:VPN

#Zugriffsrechte entziehen
vsn-server:/usr/local/ssl# chmod 0700 private




Zertifikate für den Server Top



Jetzt erstellen wir die Zertifikate für die Clients, dazu müssen wir
zuerst ein paar Vorbereitungen treffen:

Wir erstellen ein Inhaltsverzeichnis für die Zertifikate und
numerieren Sie durch. Damit keine doppelten Zertifikate vergeben
werden erstellen wir eine CRL (certificate revocation list,
Zertifikatsperrliste).




vsn-server:/usr/local/ssl# touch index.txt && echo "01" > serial




Jetzt erstellen wir eine Zertifikatsanfrage für den Schlüssel vom
Server:

Achtung:

Die Option "Common Name (eg, YOUR name) []:<server>" wird später von OpenVPN in der Option "tls-remote 
<server> verwendet."






vsn-server:/usr/local/ssl# openssl req -new -newkey rsa:1024 -out
certs/servercsr.pem -nodes -keyout private/serverkey.pem -days
3650

Generating a 1024 bit RSA private key
...........++++++
........++++++
writing new private key to 'private/serverkey.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]:
State or Province Name (full name) [Some-State]:Vorarlberg
Locality Name (eg, city) []:Dornbirn
Organization Name (eg, company) [Internet Widgits Pty
Ltd]:Online-tutorials.net
Organizational Unit Name (eg, section) []:vsn
Common Name (eg, YOUR name) []:server
Email Address []:simon_hecht@online-tutorials.net

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





Jetzt können wir Server-Zertifikat erstellen:




vsn-server:/usr/local/ssl# openssl x509 -req -in
certs/servercsr.pem -out certs/servercert.pem -CA vpn-ca.pem -CAkey
private/vpn-cakey.pem -CAserial /usr/local/ssl/serial -days 3650

Signature ok
subject=/C=AU/ST=Vorarlberg/L=Dornbirn/O=Online-tutorials.net/CN=Simon
Hecht/emailAddress=simon_hecht@online-tutorials.net
Getting CA Private Key
Enter pass phrase for private/vpn-cakey.pem:





Das CSR brauchen wir nicht mehr:

Code:

rm certs/servercsr.pem



Zertifikate für die Clients Top



Wir können jetzt die Paare für die einzelnen Clients erstellen, dazu
erstellen wir wieder ein CSR, und danach das Zertifikat




vsn-server:/usr/local/ssl# openssl req -new -newkey rsa:1024 -out
certs/simon_lan_csr.pem -nodes -keyout private/simon_lan_key.pem
-days 3650

Generating a 1024 bit RSA private key
.....++++++
.......................++++++
writing new private key to 'private/simon_lan_key.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]:
State or Province Name (full name) [Some-State]:Vorarlberg
Locality Name (eg, city) []:Dornbirn
Organization Name (eg, company) [Internet Widgits Pty
Ltd]:Online-tutorials.net
Organizational Unit Name (eg, section) []:HomeLan
Common Name (eg, YOUR name) []:Home
Email Address []:simon_hecht@hotmail.com

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

vsn-server:/usr/local/ssl# openssl x509 -req -in certs/simon_lan_csr.pem -out certs/simon_lan_cert.pem -CA vpn-ca.pem
-CAkey private/vpn-cakey.pem -CAserial /usr/local/ssl/serial -days 3650

Signature ok
subject=/C=AU/ST=Vorarlberg/L=Dornbirn/O=Online-tutorials.net/CN=Simon
Hecht/emailAddress=blub[at]blubb.com
Getting CA Private Key
Enter pass phrase for private/vpn-cakey.pem:


vsn-server:/usr/local/ssl# rm certs/simon_lan_csr.pem





Wenn man auf der Clientenseite den Schlüssel mit einer Kennwortabfrage
absichern will, wird im ersten Aufruf der Parameter -nodes
weggelassen.

Diffie-Hellmann Parameter erzeugen Top



Am Schluss brauchen wir noch ein Diffie-Hellmann Parameter:





vsn-server:/usr/local/ssl# openssl dhparam -out dh1024.pem
1024

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..+...+...........+......+..[abgekürzt]............+....++*++*++*





Jetzt sollten die Zertifikate bereit sein.

Hier finden sie anschließend ein OpenVPN
Tutorial, das zeigt, wie man ein VPN mit OpenVPN einrichtet.

Informationen über Zertifikate anzeigen Top



Um die Informationen über das Zertifikat als Text auszugeben können
Sie den Befehl openssl x509 -in <cert> -text benutzen. Um mehr
Details herauszufinden können Sie openssl asn1parse -i -in <cert>
-dump
anwenden.

Automatisieren Top



Die folgenden Scripts erzeugen den Ordner certs/ und erstellen die
jeweiligen Scripts in dem Verzeichnis. Sie müssen zuerst mit chmod a+x
ausführbar gemacht werden.

Erstellen des VPN Certs und des CA Certs:





#!/bin/bash

mkdir certs
cd certs
echo "CA Cert erstellen..."
openssl genrsa -aes256 -out ca_key_vpn.pem 2048
openssl req -new -x509 -days 3650 -key ca_key_vpn.pem -out ca_cert_vpn.pem -set_serial 1
chmod 700 ../certs
touch serial
echo "01" > serial

echo ""
echo "Server Cert erstellen..."
echo "Wichtig: Common Name einzigartig halten und merken - wird sp�eter im VPN Script gebraucht"
echo ""
openssl req -new -newkey rsa:2048 -out server_csr_vpn.pem -nodes -keyout server_key_vpn.pem -days 3650
openssl x509 -req -in server_csr_vpn.pem -out server_cert_vpn.pem -CA ca_cert_vpn.pem -CAkey ca_key_vpn.pem -CAserial serial -days 3650
rm server_csr_vpn.pem

echo ""
echo "Zufallszahlen erstellen..."
openssl dhparam -out dh2048.pem 2048
echo ""

echo "Client Certs mit folgendem Commando vorbereiten:"
echo "./clientcerts <clientname>"





Erstellen der Clientcerts: createclients

Benutzung: ./createclients <clientname>





#!/bin/bash

cd certs
echo "Client Cert vorbereiten..."
openssl req -new -newkey rsa:2048 -out $1_csr_vpn.pem -nodes -keyout $1_key_vpn.pem -days 3650

echo ""
echo "Client Certs erstellen..."
openssl x509 -req -in $1_csr_vpn.pem -out $1_cert_vpn.pem -CA ca_cert_vpn.pem -CAkey ca_key_vpn.pem -CAserial serial -days 3650
echo ""
echo "CSR Cert loeschen..."
rm $1_csr_vpn.pem
echo "Clientcert $1_cert_vpn.pem und Clientkey $1_key_vpn.pem erstellt..."
cd ..





Weblinks Top


Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Betriebssysteme/Linux/Security/OpenSSL Tutorial