Anzeige:
Ergebnis 1 bis 2 von 2

Thema: OpenVPN Verbindung mit OpenSSL

  1. #1
    Grehdl
    Gast

    OpenVPN Verbindung mit OpenSSL

    Warum dieses HowTo?

    Ich schreibe dieses HowTo, weil ich kein HowTo, hier, im VPNForum noch bei Onkel Google, ein Komplettes HowTo gefunden habe.
    Es gibt immer nur HowTo's über OpenVPN oder OpenSSL, aber nie beides zusammen. Mein Ziel ist es, das jeder im nachhinein versteht was er durchführt und auch die einzelnen Syntaxpunkte von OpenSSL und OpenVPN, zumindest ein wenig, für sich verständlich erklären kann.

    Vorraussetzungen

    Ich fange nicht ganz von vorne an, selbst einem Neuling müsste Klar sein das er OpenVPN und OpenSSL installiert haben muss damit es überhaupt funktionieren kann.
    Die Verzeichnisse die ich verwende können auch abweichen, ich gehe von meinem SuSe 9.3 aus.

    OpenSSL

    Wir beginnen damit uns die geeigneten Schlüsselpaare und Zertifikate zu erstellen. Verschlüsselungswerte sind, sagen wir mal so, Richtwerte die jeder für sich entscheiden kann wie er will.

    Wir wechseln hierzu zunächst erstmal in unser OpenSSL Verzeichnis, bei mir ist das unter /etc/ssl/

    Code:
    cd /etc/ssl/
    Der übersicht halber erstellen wir das Unterverzeichnis "Zertifikate" wo wir später unsere ganzen erstellten Zertifikate ablegen. Es gibt zwar ein Standartverzeichnis für Zertifikate "certs", dieses ist sehr unübersichtlich später, da hier noch andere Skripte und Zertifikate liegen.

    Code:
    mkdir Zertifikate/
    Danach schauen wir uns die openssl.cnf.

    Um uns die spätere Arbeit ein wenig zu erleichtern, öffnen wir diese und berabeiten sie.

    Code:
    vi openssl.cnf
    Hier stehen am Anfang einige Variablen mit Verzeichnissen, diese sollten wir anpassen, aufgrund späterer Arbeiten.

    Code:
    dir             = .                     # Where everything is kept
    hier unser Verzeichnis selbst (mit dem ".") angeben.

    Code:
    certs           = $dir/Zertifikate      # Where the issued certs are kept
    diese Zeile anpassen um später unsere Zertifikate wieder zu finden und immer so weiter.

    Nun kann ich alle Standartwerte editieren, damit ich nicht bei jedem Zertifikat alles neu Eingeben muss. Diese Werte findet ihr ab Zeile 123.
    Dort steht dann zum Beispiel: CountryName_default = AU
    das kann ich dann in CountryName_default = DE ändern.
    Bei Punkten ohne ein "BlaBla_default" einfach so eine Zeile erstellen, ausser bei CommonName.

    Der CommonName muss IMMER verschieden sein bei jedem Zertifikat, er darf also nur einmal vorkommen, dies kann sonst zu Problemen führen.

    So jetzt fangen wir mit dem Schlüssel für unsere CA (Certificate Authority) an.

    Code:
    openssl genrsa -aes256 -out private/vpn-cakey.pem 2048
    Mit openssl rufen wir die Prozedur auf,
    genrsa generiert den Schlüssel,
    -aes256 ist ein Verschlüsselungsalgorithmus für unsere Datei, hier kann auch eine andere Methode verwendet werden, jedoch ist dieser AES256 sehr sicher, er wird von der amerikanischen Regierung für vertrauliche Dokumente verwendet (Wikipedia: AES),
    -out bennent/erstellt unsere Ausgabedatei und
    2048 gibt an wieviel Bit Groß unser Schlüssel sein soll (hier gilt auch: 1024 reichen völlig aus).

    Wenn wir diesen Befehl ausgeführt haben, werden wir aufgefordert ein Passwort einzugeben (Enter Pass Phrase for vpn-cakey.pem: ). Dieses Passwort brauchen wir später um unsere Zertifikate zu verifizieren.

    unser nächster schritt erstellt unsere CA:
    Code:
    openssl req -new -x509 -days 3650 -key private/vpn-cakey.pem -out vpn-ca.pem -set_serial 1
    req erstellt eine Anfrage ("Request"),
    -new sagt uns das wir eine neue Anfrage schicken,
    -x509 ist der verwendete Standart für unsere CA (Wikipedia: X509),
    -days gibt die Gültigkeitsdauer unseres Zertifikats an,
    -key unseren verwendeten "Masterschlüssel" zum erstellen der CA,
    -set_serial startet unsere Seriennummern die später hochgezählt werden.

    Nach ausführen des Befehls werden wir zu Angaben über uns Aufgefordert. Die Werte in Eckigen Klammern sind die Default Werte, welche wir vorhin verändert haben und diese können wir einfach mit der Enter-Taste bestätigen, ausser unseren Common Name, hier könnte man Bspw. "Server" eingeben.

    Um das ganze schliesslich noch etwas sicherer zu machen entziehen wir unserem Ordner private/ noch die Zugriffsrechte:
    Code:
    chmod 0700 private/
    Nun kommen wir zu unseren Clientzertifikaten. Ich werde nachher noch einen Code posten für die automatische erstellung der Zertifikate, jedoch hier einmal in ausführlicher schreibweise:

    Der Serverschlüssel erstellen wir als erstes von den Schlüsselpaaren, das geschieht wie folgt:

    Code:
    touch index.txt && echo "01" > serial
    index.txt um später die Zertifikate zu sperren
    echo "01" > serial um eine 01 in die serial Datei zu schreiben

    zunächst die Zertifikatsanfrage und den Schlüssel erstellen:

    Code:
    openssl req -new -newkey rsa:2048 -out Zertifikate/server_csr.pem -nodes -keyout private/server_key.pem -days 365
    -newkey einen neuen Schlüssel erstellen und
    rsa:2048 die Schlüssellänge, hier reicht völlig auch ein 1024
    -nodes hier wird kein Passwort auf das Zertifikat gelegt, bei einem Server sehr sinnvoll, damit man beim Starten nicht immer das Passwort eingeben muss, bei den Clients später lassen wir das "-nodes" weg um sicher zu stellen das niemand ungewollt zum Server connecten kann (z.B. wenn der Laptop mit dem Zertifikat geklaut wird)
    -keyout auszugebender Schlüssel (Datei)
    server_csr.pem ist eine Zertifikatsanfrage

    Nun der Schlüssel für den Server und das Signierte Zertifikat:

    Code:
    openssl x509 -req -in Zertifikate/server_csr.pem -out certs/server_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 365
    -in sagt uns welche Zertifikatsanfrage verarbeitet werden soll,
    -out so wird unser Zertifikat heißen
    -CA unsere CA die das Zertifikat "unterzeichnet"
    -CAkey unser "Masterschlüssel" der uns erlaubt dieses Zertifikat zu erstellen.

    Die Clients laufen vom Prinzip her gleich ab:

    Code:
    openssl req -new -newkey rsa:2048 -out Zertifikate/Client1_csr.pem -keyout private/Client1_key.pem -days 365
    
    openssl x509 -req -in Zertifikate/Client1_csr.pem -out Zertifikate/Client1_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 365
    Um unseren Zertifikateordner sauber zu halten können wir noch die nun nicht mehr benötigte _csr datei löschen.

    Code:
    rm Zertifikate/Client1_csr.pem
    zu guter letzt erzeugen wir noch einen Diffie Hellman Parameter (Wikipedia: Diffie Hellmann):
    Code:
    openssl dhparam -out dh2048.pem 2048
    Achtung bei 2048 Bit kann es sehr sehr lange dauern, bei mir dauerte dies fast über eine Stunde. 1024 geht dabei wesentlich schneller und reicht für den normalen Gebrauch völlig aus.

    Und hier wie Versprochen das Skript um die Zertifikate zu erstellen,einfach in das /etc/ssl/ Verzeichnis kopieren und ausführen...

    Code:
    ./clientzertifikaterstellen Client2

  2. #2
    Grehdl
    Gast
    Endlich sind wir dann nun bei unserem OpenVPN angelangt

    Hier müssen wir auf jedem Client OpenVPN installieren (www.openvpn.net). Auf dem Server müssen wir zunächst eine Config erstellen, mit der der Server laufen soll. Ich weiß es klingt vielleich nicht nach einem HowTo die Conig, jedoch ist dort alles Kommentiert.

    Code:
    # Port Standartport 1194
    port 12345
    
    # Die Revoke Liste überprüfen
    crl-verify /etc/ssl/crl.pem
    
    # TCP oder UDP?
    proto udp
    mode server
    tls-server
    
    dev tun
    
    #Unsere Server IP
    ifconfig 10.10.10.1 255.255.255.255
    
    #Server IP Adresse (Adressbereich. in dem Fall alles von 10.10.10.0)
    server 10.10.10.0 255.255.255.0
    
    #Wo liegen unsere Zertifikate
    ca /etc/ssl/vpn-ca.pem
    cert /etc/ssl/Zertifikate/server_cert.pem
    key /etc/ssl/private/server_key.pem
    
    #Diffie-Hellmann Parameter
    dh /etc/ssl/dh2048.pem
    
    #Die Selbe IP in der nächsten Sitzung vergeben
    ifconfig-pool-persist ipp.txt
    
    #IPs in den IP Tables eintragen, DNS neu vergeben und über Den Server das Routing machen, dass man z.B. über den Tunnel auf ein lokaes Intranet zuzugreifen
    push "route 10.0.0.0 255.0.0.0"
    push "dhcp-option DNS 192.168.1.xyz"
    push "redirect-gateway"
    push "route 0.0.0.0 0.0.0.0"
    
    #Authentifizierungsmethode
    auth SHA1
    
    #Verschlüsselungs Algorithmus
    cipher aes-256-cbc
    
    #Benutze Komprimierung
    comp-lzo
    
    #Setzt die Rechte
    user nobody
    group nogroup
    
    #Wird wegen user nobody/group nobody benötigt.
    persist-key
    persist-tun
    
    #Logging 0, (Zum testen:5)
    verb 7
    Nun die Client.ovpn (wichtig das auf Windowsclients die Datei mit .ovpn endet um die Datei mit OpenVPN zu assoziieren).

    Code:
    #Festlegen als was fungiert wird
    tls-client
    pull
    
    # Methode festlegen tun oder tap
    dev tun
    
    # Protokoll auswaehlen udp oder tcp
    proto udp
    
    # IP/Name und Port des Servers
    remote testserver.dyndns.org 12345
    
    # Auflösen des Hostnames des Servers (wegen nicht permanent mit dem Internet verbundenen Rechnern)
    resolv-retry infinite
    
    # Lacalen Port festlegen oder freigeben
    nobind
    
    
    # Verbindung immer gleich halten
    persist-key
    persist-tun
    
    #zu verwendende Zertifikate und Schlüssel
    ca vpn-ca.pem
    cert ZERTIFIKAT_cert.pem
    key SCHLUESSEL_key.pem
    
    # Verschlüsselung
    cipher AES-256-CBC
    
    # Komprimiernug
    comp-lzo
    
    # Authentifizierungsmethode
    auth SHA1
    
    # "Gesprächigkeit" des Tunnels
    verb 3
    
    # Silence repeating messages
    mute 20
    So zum Schluss nur noch die Dateien

    vpn-cakey.pem
    client.ovpn
    client_cert.pem
    client_key.pem

    sicher (z.B. per USB Stick, WinSCP, oder WinRAR mit Passwort) auf den Client kopieren und loslegen.

    Ich hoffe es war hilfreich und hat Euch weitergeholfen.

    Hier meine verwendete Quellen:

    www.openvpn.net
    www.openssl.org
    http://www.online-tutorials.net/secu...-t-69-207.html
    http://www.online-tutorials.net/secu...-t-69-209.html
    Dank auch an DaGrr linuxforen.de für sein Deutsches OpenVPN HowTo dies hat mir auch den Einstieg erleichtert wenn auch nicht ganz geholfen.
    Und an das VPN Forum

Ähnliche Themen

  1. Bouncer stürzen ab
    Von Soldier89 im Forum Linux Allgemein
    Antworten: 16
    Letzter Beitrag: 24.06.07, 15:26
  2. Xp Client kann keine Verbindung zum OPENVPN herstellen
    Von Fly im Forum Router und Netzaufbau
    Antworten: 5
    Letzter Beitrag: 27.08.06, 13:13
  3. Antworten: 2
    Letzter Beitrag: 04.10.05, 11:09
  4. OpenVPN kein ping keine verbindung ?routings?
    Von eviluser im Forum Router und Netzaufbau
    Antworten: 2
    Letzter Beitrag: 14.09.05, 19:59
  5. openvpn legt verbindung immer auf?
    Von muell200 im Forum Sicherheit
    Antworten: 2
    Letzter Beitrag: 10.11.04, 09:34

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •