1. Aktuelles
  2. Dashboard
  3. Forum
    1. Unerledigte Themen
  4. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
  5. Community vs. Enterprise
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Seiten
  • Erweiterte Suche
  1. efw-forum - Endian Firewall Support Forum
  2. Forum
  3. Archiv
  4. Endian Firewall 2.2
  5. VPN

OpenVPN: "ns-cert-type client"

  • devaux
  • 6. Januar 2009 um 11:22
  • Erledigt
  • devaux
    Anfänger
    Beiträge
    21
    • 6. Januar 2009 um 11:22
    • #1

    Hi Forum,
    Hab ein kleines Problem mit meinen OpenVPN-Verbindungen.

    Code
    persist-remote-ip
    ; logging and status
    
    
    writepid /var/run/openvpn/openvpn.pid
    ifconfig-pool-persist openvpn.leases
    status /var/log/openvpn/openvpn-status.log
    verb 1
    
    
    client-connect "/usr/local/bin/dir.d-exec /etc/openvpn/client-connect.d/"
    client-disconnect "/usr/local/bin/dir.d-exec /etc/openvpn/client-disconnect.d/"
    
    
    ; certificates and authentication
    
    
    dh /var/efw/openvpn/dh1024.pem
    pkcs12 /var/efw/openvpn/pkcs12.p12
    
    
    # ns-cert-type client
    Alles anzeigen

    Ist eigentlich die normale Config, die mit dem Wizard erstellt wird. Mit Ausnahme, dass ich das pk12-Cert ersetzt und die letzte Zeile auskommentiert habe.
    Wenn ich diese drin habe, kann ich mich naemlich nicht connecten. Weiss jemand den Grund dafuer und eventuell eine Loesung?
    Die Zertifikate habe ich unter Windows mit easy-rsa erstellt.

    Fast noch wichtiger waere mir, wenn mir wer sagen kann, wie ich Befehle automatisch nach dem Startup ausfuehren kann.
    Muss ich da selber ein Init-Script machen, oder ist da schon was dafuer vorgesehen?
    Nach einem Neustart ist naemlich immer "ns-cert-type client" wieder aktiv.

  • moppel
    Anfänger
    Beiträge
    7
    • 7. Januar 2009 um 23:42
    • #2

    Hallo,

    die Zertifikate können mit bestimmten Optionen generiert werden (ns-cert-type = Netscape-Zertifikattyp). Das CA- oder Server-Zertifikat wird meines Wissens in den OpenVPN-Standard-Skripten auch mit ns-cert-type=server generiert. Der Zertifikattyp wird optional beim Signieren der Zert.-Anforderung durch die CA angegeben. In der Praxis könnte das dann so aussehen (hier meine, von den OpenVPN-Skripten adaptierte Variante), das Skript heißt build-client-key:

    Bash
    #!/bin/sh
    
    
    # Variablen initialisieren
    . vars
    
    
    cd $KEY_DIR
    
    
    if ! [ -f index.txt -o -f serial ]
    then
      echo "
    CA-Datenbank ggf. korrupt. Werde index.txt und serial zuruecksetzen
    "
      echo -n > index.txt
      echo 01 > serial
    fi
    
    
    echo "
    Client-Zertifikat $1 generieren
    "
    openssl req -days 3650 -nodes -new -keyout ${1}.key -out ${1}.csr -config $KEY_CONFIG       # Zertifikat-Anforderung generieren
    openssl ca -extensions client -days 3650 -out ${1}.crt -in ${1}.csr -config $KEY_CONFIG     # Anforderung signieren
    openssl pkcs12 -export -inkey ${1}.key -in ${1}.crt -certfile ca.crt -out ${1}.p12          # Zertifikat als PKCS12 exportieren
    Alles anzeigen

    Damit werden dedizierte Client-Zertifikate generiert, die der Anforderung ns-cert-type=client gerecht werden. Wichtig ist dafür bei der Signierung (openssl ca) die Angabe des Parameters "-extensions client".

    Zu Deiner anderen Frage: Die Konfigurationen der efw werden in anderen Dateien gespeichert, als dort, wo sie nach Aktivierung der entsprechenden Dienste zu finden sind. D.h., nahezu jeder Dienst-Neustart (durch Aktivierung oder geänderte Konfiguration) führt dazu, dass die Konfigurationsdateien (z.B. /etc/openvpn/openvpn.conf) erneut geschrieben werden. Dadurch gehen händische Änderungen daran verloren. Es gibt zwar Mittel und Wege, auch diese händischen Eingriffe dauerhaft zu hinterlassen, aber in diesem Fall halte ich es für sinnvoller, einfach dedizierte Client-Zertifikate zu erstellen und gut iss... ^^

    Wenn Du näheres wissen möchtest, könnte Dir eine Suche in den Support-Foren nach Hinweisen zu /var/efw/inithooks helfen. Darin befinden sich Dateien, die Anpassungen für diverse Events (Neustart, Konfigurationsänderungen, u.ä.) enthalten können, und die nicht durch Upgrades überschrieben werden. Ich beziehe mich zwar gerade auf einen Artikel, der Firewall-Regeln betrifft, aber vielleicht ist das ja ein Ansatz. http://kb.endian.com/entry/27/

    Gruß,
    Andreas

  • devaux
    Anfänger
    Beiträge
    21
    • 8. Januar 2009 um 15:14
    • #3

    Hey, vielen Dank fuer die Antwort.
    Ich habe noch fast vermutet, dass es an soetwas liegt. Trotzdem schaffe ich es nicht die Client-Certs zu erstellen.
    Es scheint, als mache ich grundsaetzlich was falsch. Hier meine Vorgehensweise (Windows):
    - init-config.bat ausfuehren
    - vars.bat editieren
    - vars.bat ausfuehren
    - clean-all.bat ausfuehren
    - build-ca.bat ausfuehren
    - build-dh.bat ausfuehren
    - build-key-pkcs12.bat ausfuehren. Wobei ich diese Datei wiefolgt abgeaendert habe:

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

    Fehlermeldung:

    Code
    WARNING: can't open config file: /usr/local/ssl/openssl.cnf
    Using configuration from openssl.cnf
    Loading 'screen' into random state - done
    Error Loading extension section client
    532:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\b
    ss_file.c:126:fopen('keys/index.txt.attr','rb')
    532:error:2006D080:BIO routines:BIO_new_file:no such file:.\crypto\bio\bss_file.
    c:129:
    532:error:0E078072:configuration file routines:DEF_LOAD:no such file:.\crypto\co
    nf\conf_def.c:197:
    532:error:0E06D06C:configuration file routines:NCONF_get_string:no value:.\crypt
    o\conf\conf_lib.c:329:group=CA_default name=email_in_dn
    WARNING: can't open config file: /usr/local/ssl/openssl.cnf
    Loading 'screen' into random state - done
    No certificate matches private key
    C:\Programme\OpenVPN\easy-rsa\keys\*.old konnte nicht gefunden werden
    Alles anzeigen
  • moppel
    Anfänger
    Beiträge
    7
    • 8. Januar 2009 um 15:45
    • #4

    Hallo,

    sorry, ich hatte vergessen, das der Typ Client nicht im Standard von OpenVPN vorgesehen war. :oops: Für diese Lösung muss also außer den oben genannten Änderungen noch der folgende Code in die openssl.cnf eingefügt werden:

    Code
    [ client ]
    # JY ADDED -- Make a cert with nsCertType set to "client"
    basicConstraints=CA:FALSE
    nsCertType                      = client
    nsComment                       = "OpenSSL Generated Client Certificate"

    Dieser Absatz definiert überhaupt erst die extension "client" und daraus holt sich OpenSSL auch die Rahmenbedingungen für den gewünschten Typ. Ich habe die Erweiterung direkt nach dem Block "[ server ]" eingefügt und vor dem Block "[ v3_req ]":

    Code
    ...
    [ server  ]
    # JY ADDED -- Make a cert with nsCertType set to "server"
    basicConstraints=CA:FALSE
    nsCertType			= server
    nsComment			= "OpenSSL Generated Server Certificate"
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid,issuer:always
    
    
    [ client ]
    # JY ADDED -- Make a cert with nsCertType set to "client"
    basicConstraints=CA:FALSE
    nsCertType                      = client
    nsComment                       = "OpenSSL Generated Client Certificate"
    
    
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    ...
    Alles anzeigen

    Der Rest sollte dann eigentlich wieder wie gewohnt funktionieren.

    Gruß,
    Andreas

  • devaux
    Anfänger
    Beiträge
    21
    • 8. Januar 2009 um 16:19
    • #5

    Tausend dank fuer die schnelle und vorallem kompetente Hilfeleistung! :)
    Lag tatsaechlich an der openssl.cnf
    Jetzt mal testen, ob ich jetzt ohne anpassung Verbinden kann.


    EDIT: Ja, das hat ja wunderbar geklappt :)
    Nochmals vielen Dank.

Unterstützt von

Benutzer online in diesem Thema

  • 1 Besucher
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™