x.509 Zertifikate erstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • x.509 Zertifikate erstellen

      Aufbauen einer OpenVPN-Verbindung zwischen der Endian und Client-PCs.
      Hier am Beispiel eines Windows-Clients.
      Unter Linux geht man aehnlich vor (Scripts sind anders). Da liegen die Config-Dateien einfach unter /etc/openvpn/ und enden mit .conf
      Alternativ kann man auch den network-manager nutzen, der inzwischen bei praktisch jedem Desktopenvironment mitgeliefert wird. Leider laesst dieser aber keine pkc12-Zertifikate verwenden, sodass man die p12-Dateien erst extrahieren muss.
      Vielleicht schreib ich dazu dann auch mal ein Howto oder (noch besser) die Leuts von network-manager implementieren es in Zukunft ;)


      1. Installation OpenVPN:
      ====================
      Download und Installation OpenVPN. Am besten nehmt Ihr die aktuellste Version. Diese verhaelt sich bei mir sehr stabil (openvpn-2.1_rc15-install.exe). Zudem hat sie den Vorteil, dass das Programm OpenVPN-GUI mitgeliefert wird, welches eine einfache Verwaltung der Verbindungen erlaubt.


      2. Verwendung von Easy-RSA:
      =========================
      easy-rsa hilft uns mit wenigen Befehlen Zertifikate auszustellen, damit die Befehle nicht jedes Mal haendisch eingetippt werden muessen:

      Ins easy-rsa-Verzeichnis wechseln %programfiles%\OpenVPN\easy-rsa. Dort musst man ein paar Anpassungen machen:

      openssl.cnf.sample:
      Folgendes hinzufuegen, da sonst kein nsCert erstellt wird, was Endian aber voraussetzt.
      Wir schreiben dies in die Datei openssl.cnf.sample, da diese bei jedem Ausfuehren von init-config.bat (weiter unten) zu openssl.cnf kopiert wird.

      Quellcode

      1. [ client ]
      2. basicConstraints=CA:FALSE
      3. nsCertType = client
      4. nsComment = "OpenSSL Generated Client Certificate"



      3. Scripts zum Generieren des Server- und der Client-Zertifikaten erstellen:
      ================================================================
      Die beiden Scripts werden erstellt, damit man in kurzer Zeit Zertifikate ausstellen kann. Diese einfach ins easy-rsa-Verzeichnis kopieren.
      build-key-server-pkcs12.bat wird verwendet um das serverseitige Zertifikat zu erstellen.
      Mit build-key-client-pkcs12.bat werden die Client-Zertifikate erstellt, die dann an die Leute weitergegeben werden.

      build-key-server-pkcs12.bat erstellen

      Quellcode

      1. @echo off
      2. cd %HOME%
      3. rem build a request for a cert that will be valid for ten years
      4. openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
      5. rem sign the cert request with our ca, creating a cert/key pair
      6. openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
      7. rem delete any .old files created in this process, to avoid future file creation errors
      8. del /q %KEY_DIR%\*.old
      9. openssl pkcs12 -export -inkey %KEY_DIR%\%1.key -in %KEY_DIR%\%1.crt -certfile %KEY_DIR%\ca.crt -out %KEY_DIR%\%1.p12
      10. rem delete any .old files created in this process, to avoid future file creation errors
      11. del /q %KEY_DIR%\*.old
      Alles anzeigen


      build-key-client-pkcs12.bat erstellen

      Quellcode

      1. @echo off
      2. cd %HOME%
      3. rem build a request for a cert that will be valid for ten years
      4. openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
      5. rem sign the cert request with our ca, creating a cert/key pair
      6. openssl ca -extensions client -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
      7. rem convert the key/cert and embed the ca cert into a pkcs12 file.
      8. openssl pkcs12 -export -inkey %KEY_DIR%\%1.key -in %KEY_DIR%\%1.crt -certfile %KEY_DIR%\ca.crt -out %KEY_DIR%\%1.p12
      9. rem delete any .old files created in this process, to avoid future file creation errors
      10. del /q %KEY_DIR%\*.old



      4. Generieren der Keys:
      ====================
      WICHTIG: Jeder PC muss ein eigenes, inviduelles Client-Zertifikat haben, da sich die Verbindungen ansonsten gegenseitig konkurrieren. Zudem sieht man dann in der Endian eine schoene Uebersicht, wer gerade und wie lange schon verbunden ist.
      Ich verwende fuer das Server-Zertifikat meist endian.$subdomain.$domain.$tld und fuer den Client $domain-client01, $domain-client02...
      Dies vereinfacht dann die Zuordnung der Dateien ungemein. Aber natuerlich kann man auch einfachere Namen nehmen.
      Im Beispiel habe ich aus Gruenden der Vereinfachung einfach "endian" und "client01" genommen.

      - cmd-Fenster öffnen und ins easy-rsa wechseln
      - init-config.bat ausfuehren
      - vars.bat in Texteditor anpassen (KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG und KEY_EMAIL)
      - vars.bat ausfuehren
      - clean-all.bat ausfuehren
      - build-ca.bat ausfuehren # alles mit Enter bestaetigen
      - build-dh.bat ausfuehren # alles mit Enter bestaetigen
      - build-key-server-plcs12.bat endian # alles mit Enter/y aber "Common Name" muss im Dialog ausgefuellt werden (z.B. mit endian)
      - build-key-client-pkcs12.bat client01 # alles mit Enter/y aber "Common Name" muss im Dialog ausgefüllt werden (z.B. mit client01)


      5. Import des Serverzertifikates in die Endian Firewall:
      ===============================================
      - Weblogin auf die Endian-Firewall
      - VPN => OpenVPN Server => Erweitert
      - "Authentifzierungs Einstellungen" auf "X.509 Zertifikat" umstellen
      - Erstelltes endian.p12 Zertifikat auf die Endian laden (Serverzertifikat von einer externen Zertifikatsauthorität (CA) importieren)


      6. Client-Config erstellen:
      ======================
      Dann gehts auf den Client wo wir die Client-Config erstellen: Diese legen wir im Config-Verzeichnis ab (%programfiles%\OpenVPN\config)

      Quellcode

      1. client
      2. dev tap
      3. proto udp
      4. remote (IP oder Hostname wo die Endian ueber das Internet erreichbar ist)
      5. resolv-retry infinite
      6. nobind
      7. persist-key
      8. persist-tun
      9. pkcs12 client01.p12
      10. verb 3
      11. comp-lzo
      12. ns-cert-type server
      Alles anzeigen



      7. Handhabung:
      ==============
      Mit dem mitgelieferten Programm OpenVPN-GUI kann man die Verbindung on Demand mit einfachem Mausklick im Infobereich der Taskleiste bei Bedarf starten und beenden.
      Wer eine permanente OpenVPN-Verbindung (bei jedem PC-Start wird die OpenVPN-Verbindung automatisch gestartet) erreichen will, kann den Starttyp von OpenVPN in den Diensten von Windows auch auf "Automatisch" stellen.
      Nun werden alle .ovpn-Verbindungen im %programfiles%\OpenVPN\config Verzeichnis ausgefuehrt. Wichtig ist, dass die .ovpn-Dateien (Konfiguration) direkt im Ordner %programfiles%\OpenVPN\config liegen.
      Die Keys (in diesem Falle pkc12 Schluessel, die auf .p12 enden) koennen aber auch in einem Unterverzeichnis abgelegt werden. Wichtig ist dann einfach, dass der Ordnerpfad in der Config escaped wird.
      z.B. pkcs12 heimnetz\\client01.p12

      Pro OpenVPN-Verbindung muss ein TAP-Device vorhanden sein. Standardmaessig wird ein einzelnes Device erstellt. Moechte man mehrere OpenVPN-Verbindungen parallel nutzen, so muss man weitere Devices erstellen.
      Dies funktioniert sehr einfach ueber das mitgelieferte Script (%programfiles%\OpenVPN\bin\addtap.bat)


      Vielleicht kann noch jemand Scripts zum Erstellen unter Linux anbieten.


      p.s. vielen Dank an moppel, der mir beim Erstellen der Zertifikate geholfen hat.
    • Re: x.509 Zertifikate erstellen

      Hallo devaux,

      ich bin nach Deinem Howto und Deinen Script vorgegangen. Hat alles wunderbar geklappt - vielen Danke für das Howto.

      Jetzt habe ich folgendes festgestellt: Die Clients (TAP Interface) bekommen bei dieser Betriebsart keinen Standard Gateway mehr. Die Push Standard Gateway Funktion scheint ausgehebelt zu sein.

      Bei Kommunikation über das blaue Interface sehe ich das als nicht so schlimm an - es kann ja nur über den Proxy gehen und muss somit verschlüsselt sein. Was ist aber bei Verbindungen aus dem Internet. Ich hätte die Roadwarrier lieber mit Standard Gateway auf dem TAP-Interface.

      Kann mir jemand sagen, wie ich das TAP-Interface in den Griff bekomme? Ich habe versucht die /etc/openvpn/oenvpn.conf um die Zeile push "standard-gateway u.v.w.x" zu erweitern. Diese wird aber mit jedem Neustart des OpneVPN Servers gelöscht.
    • Re: x.509 Zertifikate erstellen

      Bei mir klappt auch alles soweit bis beim Verbindungsaufbau folgender Fehler kommt:

      Sat May 02 17:23:05 2009 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
      Sat May 02 17:23:05 2009 TLS Error: TLS handshake failed

      da komm ich nicht weiter, eigentlich ist alles richtig durchgeroutet usw...
    • Re: x.509 Zertifikate erstellen

      "mschoen" schrieb:

      Bei mir klappt auch alles soweit bis beim Verbindungsaufbau folgender Fehler kommt:

      Sat May 02 17:23:05 2009 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
      Sat May 02 17:23:05 2009 TLS Error: TLS handshake failed

      da komm ich nicht weiter, eigentlich ist alles richtig durchgeroutet usw...



      also bei mir war der Fehler das ich die Geschwungenen Klammer nicht raus genommen haben

      Quellcode

      1. remote (IP oder Hostname wo die Endian ueber das Internet erreichbar ist)


      Richtig sieht es so aus
      remote 58.185.155.558 1195
      Albert Einstein:
      Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
    • Re: x.509 Zertifikate erstellen

      das ist bei mir alles richtig...

      Quellcode

      1. remote xxxxxx.dyndns.org 1194


      hab vor die efw noch ne fritzbox beschaltet und dort an die efw die weiterleitung für den port 1194 gemacht...

      sonst mal meine config:

      Quellcode

      1. client
      2. dev tap
      3. proto udp
      4. remote xxxxxxx.dyndns.org 1194
      5. resolv-retry infinite
      6. nobind
      7. persist-key
      8. persist-tun
      9. pkcs12 t61p.p12
      10. verb 3
      11. comp-lzo
      12. ns-cert-type server
      Alles anzeigen
    • Re: x.509 Zertifikate erstellen

      "mschoen" schrieb:

      das ist bei mir alles richtig...

      Quellcode

      1. remote xxxxxx.dyndns.org 1194


      hab vor die efw noch ne fritzbox beschaltet und dort an die efw die weiterleitung für den port 1194 gemacht...

      sonst mal meine config:

      Quellcode

      1. client
      2. dev tap
      3. proto udp
      4. remote xxxxxxx.dyndns.org 1194
      5. resolv-retry infinite
      6. nobind
      7. persist-key
      8. persist-tun
      9. pkcs12 t61p.p12
      10. verb 3
      11. comp-lzo
      12. ns-cert-type server
      Alles anzeigen



      Heist dein Zertifikat auch t61p.p12?
      Albert Einstein:
      Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
    • Re: x.509 Zertifikate erstellen

      Hallo,
      zuerst einmal will ich ein dickes lob für diese Anleitung aussprechen!!!!!!!!!

      Ich habe Schritt für Schritt befolgt, jedoch hat sich irgendwo ein kleiner Fehler eingeschlichen.
      Wenn der Client sich mit dem Server verbinden will, erhält er dauernd folgende Meldung:

      Thu Jul 23 14:17:20 2009 WARNING: --remote address [192.168.1.15] conflicts with --ifconfig subnet [192.168.1.201, 255.255.255.0] -- local and remote addresses cannot be inside of the --ifconfig subnet. (silence this warning with --ifconfig-nowarn)
      Thu Jul 23 14:17:20 2009 TAP-WIN32 device [LAN-Verbindung 2] opened: \\.\Global\{B5C3E5E5-39D5-42D3-815C-CE921BAC4F25}.tap
      Thu Jul 23 14:17:20 2009 TAP-Win32 Driver Version 8.4
      Thu Jul 23 14:17:20 2009 TAP-Win32 MTU=1500
      Thu Jul 23 14:17:20 2009 Notified TAP-Win32 driver to set a DHCP IP/netmask of 192.168.1.201/255.255.255.0 on interface {B5C3E5E5-39D5-42D3-815C-CE921BAC4F25} [DHCP-serv: 192.168.1.0, lease-time: 31536000]
      Thu Jul 23 14:17:20 2009 Successful ARP Flush on interface [3] {B5C3E5E5-39D5-42D3-815C-CE921BAC4F25}
      Thu Jul 23 14:17:20 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:20 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:21 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:21 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:22 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:22 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:23 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:23 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:25 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:25 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:26 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:26 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:27 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:27 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:28 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:28 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:29 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:29 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:30 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:30 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:31 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:31 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:33 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:33 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:34 2009 TEST ROUTES: 0/0 succeeded len=1 ret=0 a=0 u/d=down
      Thu Jul 23 14:17:34 2009 Route: Waiting for TUN/TAP interface to come up...
      Thu Jul 23 14:17:34 2009 TCP/UDP: Closing socket
      Thu Jul 23 14:17:34 2009 Closing TUN/TAP interface
      Thu Jul 23 14:17:34 2009 SIGTERM[hard,] received, process exiting

      Anschließend, erscheint im OpenVPN Menü der Endian, dass der Benutzer verbunden ist und eine korrekte IP Adresse besitzt.
      Jedoch wenn ich am Client die IP Adresse nachschaue, sehe ich dass dieser sich selber eine IP zugewiesen hat, welche nicht vom DHCP kommt.
      Hätte hier jemand von euch einen Lösungsvorschlag?
      LG
      Simon
    • Re: x.509 Zertifikate erstellen

      Habe eben das How-To benutzt und es klappt wunderbar. Vielen Dank!

      Einige Fragen habe ich aber noch falls da jemand helfen kann.

      Wie erstelle ich zu einem späteren Zeitpunkt mehr Client Zertifikate? Habe versucht das ganze How-To später nochmal zu nutzen um ein weiteres Client Zertifikat zu erstellen, aber dieses erstellte Client Zertifikat hat nicht funktioniert. Nur wenn ich gleich auch ein neues Server Zertifikat erstelle funktioniert es (wodurch natürlich die ganzen alten Client Zertifikate unbrauchbar werden).

      Bieten die x.509 Zertifikate gleichzeitig auch eine Verschlüsselung der Daten die durch das VPN gehen?

      Vielen Dank für die Hilfe!
    • Re: x.509 Zertifikate erstellen

      Ich habe das Script für die Client-Zertifikat erstellung angepasst, damit man ganz einfach weitere Zertifikate erstellen kann.

      BITTE BEACHTEN DIE ZERTIFIKATE DIE HIERMIT ERSTELLT WERDEN GELTEN NUR 360 TAGE

      Sonst bitte den Wert

      Quellcode

      1. -days 360
      auf -

      Quellcode

      1. days XXXX
      setzen

      Quellcode

      1. @echo off
      2. @echo off
      3. rem Edit this variable to point to
      4. rem the openssl.cnf file included
      5. rem with easy-rsa.
      6. set HOME=%ProgramFiles%\OpenVPN\easy-rsa
      7. set KEY_CONFIG=openssl.cnf
      8. rem Edit this variable to point to
      9. rem your soon-to-be-created key
      10. rem directory.
      11. rem
      12. rem WARNING: clean-all will do
      13. rem a rm -rf on this directory
      14. rem so make sure you define
      15. rem it correctly!
      16. set KEY_DIR=keys
      17. rem Increase this to 2048 if you
      18. rem are paranoid. This will slow
      19. rem down TLS negotiation performance
      20. rem as well as the one-time DH parms
      21. rem generation process.
      22. set KEY_SIZE=2048
      23. rem These are the default values for fields
      24. rem which will be placed in the certificate.
      25. rem Change these to reflect your site.
      26. rem Don't leave any of these parms blank.
      27. set KEY_COUNTRY=DE
      28. set KEY_PROVINCE=NRW
      29. set KEY_CITY=Duesseldorf
      30. set KEY_ORG=FrancaTradingGmbH
      31. set KEY_EMAIL=daniel.dietz@traders-alliance.de
      32. cd %HOME%
      33. rem build a request for a cert that will be valid for one year
      34. openssl req -days 360 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
      35. rem sign the cert request with our ca, creating a cert/key pair
      36. openssl ca -extensions client -days 360 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
      37. rem convert the key/cert and embed the ca cert into a pkcs12 file.
      38. openssl pkcs12 -export -inkey %KEY_DIR%\%1.key -in %KEY_DIR%\%1.crt -certfile %KEY_DIR%\ca.crt -out %KEY_DIR%\%1.p12
      39. rem delete any .old files created in this process, to avoid future file creation errors
      40. del /q %KEY_DIR%\*.old
      Alles anzeigen
    • Re: x.509 Zertifikate erstellen

      Hallo,

      ich hätte da mal eine Frage:

      ich habe die Zertifikate anhand des Howto's erstellt, es funktioniert auch alles, aber jetzt wollte ich mal spaßeshalber ein Client Zertifikat zurückziehen (wenn ich das alles richtig verstanden haben, sollte das ja möglich sein).

      Dazu ist ja sicherlich die Funktion: "Zertifikat zurückziehen" gedacht.

      Da gibt das Feld: "Importiere Rückzugsliste (CRL) als PEM Datei:"
      Welche Datei soll ich da hoch landen?
      Alle die ich probiert habe, brachten die Fehlermeldung: "Ungültige Zertifikatsrückzugliste! Import fehlgeschlagen!"

      Was mache ich falsch?

      VG
      Christian
    • Re: x.509 Zertifikate erstellen

      Leider wird hier nicht erwähnt auf welche Endian Version sich dieses HowTo bezieht. Auch die OpenVPN Version 2.1_RC15 ist schon etwas alt und nur noch im Archive von OpenVPN.Net zu finden.

      Also ich bekomme hier nur Errors beim Generieren der Keys. Vielleicht kann mir jemand sagen ob das auch mit Endian v2.3 und OpenVPN v2.1.1 funktioniert?
    • Re: x.509 Zertifikate erstellen

      Hallo,

      ich nutze den openVPN Client Version 2.1.1 (halt der aktuellste der zum Download angeboten wird).
      Als Firewall läuft: Endian Firewall Community release 2.3.0 (in einer VM)

      Meine Benutzer nutzen als Client WinXP / Vista / Win7 / Debain.

      Ich hatte bei der Zertifikaterstellung anfänglich auch Probleme (habe es nicht geschafft gültige Zertifikate mit Win7 zu erzeugen), aber als ich WinXP zum erzeugen der Zertifikate genutzt habe, funzte alles perfekt.

      Was für eine Fehlermeldung bekommst du denn?
    • Re: x.509 Zertifikate erstellen

      Ich habe es nochmal unter XP versucht. Leider sind die p12 Files alle leer, 0 Byte groß. Die letzte Ausgabe der build-key-*-pkcs12.bat war immer 'No certificate matches private key'.

      Ich Sag mal an was ich so selber eingegeben habe, kann ja sein das dort ein Fehler drin steckt.
      Den Variablen KEY_PROVINCE, KEY_CITY und KEY_EMAIL habe ich einfach ein Leerzeichen verpasst. KEY_COUNTRY auf DE und KEY_ORG auf PrivateHomeNetwork. Bei der frage ob das Zertifikat Signiert werden soll habe ich einfach Eingabe gedrückt, dadurch wurden es auch nicht Signiert. Alles andere habe ich nach dem HowTo gemacht.
      Ist da ein Fehler in meinen eingaben?