OpenVPN: "ns-cert-type client"

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

  • OpenVPN: "ns-cert-type client"

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

    Quellcode

    1. persist-remote-ip
    2. ; logging and status
    3. writepid /var/run/openvpn/openvpn.pid
    4. ifconfig-pool-persist openvpn.leases
    5. status /var/log/openvpn/openvpn-status.log
    6. verb 1
    7. client-connect "/usr/local/bin/dir.d-exec /etc/openvpn/client-connect.d/"
    8. client-disconnect "/usr/local/bin/dir.d-exec /etc/openvpn/client-disconnect.d/"
    9. ; certificates and authentication
    10. dh /var/efw/openvpn/dh1024.pem
    11. pkcs12 /var/efw/openvpn/pkcs12.p12
    12. # 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.
  • Re: OpenVPN: "ns-cert-type client"

    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:

    Shell-Script

    1. #!/bin/sh
    2. # Variablen initialisieren
    3. . vars
    4. cd $KEY_DIR
    5. if ! [ -f index.txt -o -f serial ]
    6. then
    7. echo "
    8. CA-Datenbank ggf. korrupt. Werde index.txt und serial zuruecksetzen
    9. "
    10. echo -n > index.txt
    11. echo 01 > serial
    12. fi
    13. echo "
    14. Client-Zertifikat $1 generieren
    15. "
    16. openssl req -days 3650 -nodes -new -keyout ${1}.key -out ${1}.csr -config $KEY_CONFIG # Zertifikat-Anforderung generieren
    17. openssl ca -extensions client -days 3650 -out ${1}.crt -in ${1}.csr -config $KEY_CONFIG # Anforderung signieren
    18. 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. kb.endian.com/entry/27/

    Gruß,
    Andreas
  • Re: OpenVPN: "ns-cert-type client"

    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:

    Quellcode

    1. WARNING: can't open config file: /usr/local/ssl/openssl.cnf
    2. Using configuration from openssl.cnf
    3. Loading 'screen' into random state - done
    4. Error Loading extension section client
    5. 532:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\b
    6. ss_file.c:126:fopen('keys/index.txt.attr','rb')
    7. 532:error:2006D080:BIO routines:BIO_new_file:no such file:.\crypto\bio\bss_file.
    8. c:129:
    9. 532:error:0E078072:configuration file routines:DEF_LOAD:no such file:.\crypto\co
    10. nf\conf_def.c:197:
    11. 532:error:0E06D06C:configuration file routines:NCONF_get_string:no value:.\crypt
    12. o\conf\conf_lib.c:329:group=CA_default name=email_in_dn
    13. WARNING: can't open config file: /usr/local/ssl/openssl.cnf
    14. Loading 'screen' into random state - done
    15. No certificate matches private key
    16. C:\Programme\OpenVPN\easy-rsa\keys\*.old konnte nicht gefunden werden
    Alles anzeigen
  • Re: OpenVPN: "ns-cert-type client"

    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:

    Quellcode

    1. [ client ]
    2. # JY ADDED -- Make a cert with nsCertType set to "client"
    3. basicConstraints=CA:FALSE
    4. nsCertType = client
    5. 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 ]":

    Quellcode

    1. ...
    2. [ server ]
    3. # JY ADDED -- Make a cert with nsCertType set to "server"
    4. basicConstraints=CA:FALSE
    5. nsCertType = server
    6. nsComment = "OpenSSL Generated Server Certificate"
    7. subjectKeyIdentifier=hash
    8. authorityKeyIdentifier=keyid,issuer:always
    9. [ client ]
    10. # JY ADDED -- Make a cert with nsCertType set to "client"
    11. basicConstraints=CA:FALSE
    12. nsCertType = client
    13. nsComment = "OpenSSL Generated Client Certificate"
    14. [ v3_req ]
    15. basicConstraints = CA:FALSE
    16. keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    17. ...
    Alles anzeigen


    Der Rest sollte dann eigentlich wieder wie gewohnt funktionieren.

    Gruß,
    Andreas