149 lines
6.8 KiB
TeX
149 lines
6.8 KiB
TeX
\chapter{Aufbau einer CA für den VPN-Dienst}
|
|
|
|
\begin{itemize}
|
|
\item Beschaffung der gewünschten Version von EasyRSA + Verifikation
|
|
\item Integration der eigenen Anleitungen und Konfiguration
|
|
\item Verpacken für Clients/Server und CA selbst
|
|
\item Installation von easy-rsa
|
|
\end{itemize}
|
|
|
|
Voraussetzung: openssl muss bereits installiert sein und im Pfad eingetragen sein.
|
|
Unter Windows kann das von OpenVPN mitgebrachte openssl verwendet werden - dazu kann der Ordner "bin" einfach in den Pfad eingetragen werden.
|
|
Ein Neustart des Computers ist notwendig, um die Änderung zu übernehmen.
|
|
Mehr dazu unter https://github.com/OpenVPN/easy-rsa/blob/v3.0.4/distro/windows/README-Windows.txt
|
|
|
|
OpenSSL setzt eine Konfigurationsdatei voraus - unter Windows fehlt diese gegebenenfalls.
|
|
Unter Windows ist es ggf. möglich den Pfad der openssl.exe in der vars-Datei zu hinterlegen.
|
|
Das könnte einige Probleme lösen.
|
|
\begin{lstlisting}
|
|
# Diese Zeile ist unter Windows notwendig.
|
|
set_var EASYRSA_OPENSSL "C:/Program Files/OpenVPN/bin/openssl.exe"
|
|
\end{lstlisting}
|
|
|
|
\begin{lstlisting}
|
|
# Vorgeschlagene Einstellungen, die in der vars-Datei getätigt werden sollten.
|
|
set_var EASYRSA_DN "org"
|
|
|
|
set_var EASYRSA_REQ_COUNTRY "DE"
|
|
set_var EASYRSA_REQ_PROVINCE "Niedersachsen"
|
|
set_var EASYRSA_REQ_CITY "Hannover"
|
|
set_var EASYRSA_REQ_ORG "Hochschule Hannover"
|
|
set_var EASYRSA_REQ_EMAIL "F4-I-IT-Team@hs-hannover.de"
|
|
set_var EASYRSA_REQ_OU "Abteilung Informatik"
|
|
|
|
set_var EASYRSA_KEY_SIZE 4096
|
|
set_var EASYRSA_ALGO rsa
|
|
|
|
set_var EASYRSA_CA_EXPIRE 3650
|
|
set_var EASYRSA_CERT_EXPIRE 180
|
|
set_var EASYRSA_CRL_DAYS 180
|
|
\end{lstlisting}
|
|
|
|
Daher muss durch die CA mindestens diese Datei bereitgestellt werden.
|
|
In dem Zug kann man auch gleich ein vorkonfiguriertes Paket mit EasyRSA bereitstellen.
|
|
|
|
\section{Beschaffung/Installation von EasyRSA}
|
|
|
|
Aktuelle Releases sind unter \url{https://github.com/OpenVPN/easy-rsa/releases} zu finden.
|
|
GPG-Schlüssel zur Authentisierung der Releases sind im easy-rsa Repository unterhalb von \texttt{./release-keys/README.md} aufgeführt.
|
|
\url{https://github.com/OpenVPN/easy-rsa/tree/master/release-keys}
|
|
|
|
\begin{lstlisting}
|
|
# Aktuelles Release v3.0.4 beschaffen und den dazu passenden GPG-Key
|
|
gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3
|
|
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
|
|
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz.sig
|
|
gpg --verify EasyRSA-3.0.4.tgz.sig EasyRSA-3.0.4.tgz
|
|
tar xzf EasyRSA-3.0.4.tgz
|
|
cd EasyRSA-3.0.4
|
|
\end{lstlisting}
|
|
|
|
\section{Initialisierung der CA}
|
|
|
|
\begin{lstlisting}
|
|
cp vars.example vars
|
|
vim vars
|
|
# Konfiguration der CA anpassen:
|
|
# * Standardgültigkeit für ausgestellte Zertifikate
|
|
EASYRSA_CERT_EXPIRE=730 ./easyrsa sign-req server aither.inform.hs-hannover.de
|
|
|
|
# * Name der CA, etc
|
|
\end{lstlisting}
|
|
|
|
Frage: Welche Einstellungen sind anzupassen?
|
|
|
|
RSA vs EC? (Geht das mit allen OpenVPN-Clients?)
|
|
* Die Wahl der Algorithmen wirkt sich höchstens auf die Dauer der Authentisierung beim Verbindungsaufbau aus, der reguläre Betrieb wird davon nicht berührt.
|
|
* Da OpenVPN-Clients für alle Plattformen den selben Code verwenden, sollte bei gleichbleibenden Versionen von OpenSSL (bzw. kompatiblen mbed-TLS-Bibliotheken) die Wahl sich nicht auf die Kompatibilität auswirken.
|
|
* RSA ist lange erprobt, Patente sind ausgelaufen. Schlüssel sind etwas größer (2-4Kbit), nicht gegen Angriffe durch Quantencomputer beständig (Primfaktorzerlegung)
|
|
* Elliptic Curve-Verfahren sind noch relativ neu (10 Jahre?). Schlüssel sind kleiner, es gab schon einen Fall mit einer Backdoor in einer Curve, nicht gegen Angriffe durch Quantencomputer beständig (diskreter Logarithmus).
|
|
Empfehlungen des BSI%\cite{bsi:tr-02102}
|
|
|
|
From man:openvpn:
|
|
--tls-cert-profile profile
|
|
OpenVPN will migrate to 'preferred' as default in the future. Please ensure that your keys already comply.
|
|
|
|
Wie groß soll der Schlüssel sein? [Welche Kurve?]
|
|
|
|
Zertifikate nur mit CN oder volles Schema?
|
|
* Eigentlich egal, keine Vorteile oder Nachteile. Volles Schema => Mehr Informationen darüber, wo der VPN-Dienst angesiedelt ist. Ändert nicht viel. Es spricht nichts gegen den Einsatz des vollen Schemas.
|
|
|
|
|
|
Welche Angaben werden für Benutzerzertifikate übernommen? Namen? Benutzerkennungen?
|
|
-> Falls es möglich sein soll, Zertifikate bei Missbrauch/Verlust/etc zu sperren, dann braucht man einen eindeutigen Identifier
|
|
* Voller Name -> Konflikte selten aber möglich, personenbezogene Daten
|
|
* E-Mail-Adresse: Eindeutig, aber personenbezogene Daten
|
|
* Benutzername/LUH-ID: Eindeutig, kein Konfliktpotential, personenbeziehbar. (Nur "alte" Studenten haben noch Benutzernamen mit Namen drin)
|
|
* Matrikelnummer (bei Studenten): Eindeutig, ggf. hat ein Student mehrere, aber das ist kein Thema. personenbeziehbar. Nachteil: Gibt es für Mitarbeiter nicht.
|
|
|
|
Laufzeit für Serverzertifikate?
|
|
* 10 Jahre ist etwas viel. Vielleicht 1 oder 2 Jahre?
|
|
|
|
Laufzeit für Clientzertifikate individuell oder je nach Zielgruppe?
|
|
* Studenten: 6 Monate (immer bis zum Ende des Semesters).
|
|
* Mitarbeiter: selbe Laufzeit würde den Prozess vereinfachen. Ansonsten vllt sogar 1-2 Jahre?
|
|
|
|
Laufzeit der CA - sinnvolle Werte?
|
|
10 Jahre ist akzeptabel. Wenn man die Laufzeit bestehender Zertifikate im Auge behält, kann der Wechsel einer CA zu einem Stichtag hin funktionieren.
|
|
|
|
Gültigkeitsdauer der CRL - falls Zertifikate überhaupt zurückgezogen werden sollen: maximal 180 Tage, kann ja vorher jederzeit aktualisiert werden (->Cronjob oder so)
|
|
|
|
|
|
\begin{lstlisting}
|
|
# Verzeichnisstruktur erzeugen (löscht bereits existierende Struktur!)
|
|
./easyrsa init-pki
|
|
|
|
# CA-Zertifikat erzeugen, Passwort für privaten Schlüssel wird verlangt
|
|
./easyrsa build-ca
|
|
\end{lstlisting}
|
|
|
|
\section{Regelbetrieb der CA}
|
|
|
|
\begin{lstlisting}
|
|
# Request importieren (erfordert einen eindeutigen Namen - hier "timmeja")
|
|
./easyrsa import-req /tmp/EasyRSA-3.0.4/pki/reqs/jpt-client.req timmeja
|
|
|
|
# Achtung! Falls bereits ein gültiges Zertifikat existiert, ist es notwendig dieses vorher zurückzurufen.
|
|
# Sonst kann kein neues Zertifikat mit gleicher CN ausgestellt werden.
|
|
# (optional)
|
|
./easyrsa revoke timmeja
|
|
|
|
# Request signieren mit Client-Rolle (erfordert Passwort für privaten Schlüssel der CA)
|
|
./easyrsa sign-req client timmeja
|
|
|
|
# Zertifikat inspizieren und an Antragsteller übergeben
|
|
openssl x509 -in pki/issued/timmeja.crt -noout -text
|
|
|
|
# (optional?)
|
|
./easyrsa update-db
|
|
|
|
# CRL erzeugen und an OpenVPN-Server übergeben
|
|
./easyrsa gen-crl
|
|
\end{lstlisting}
|
|
|
|
\textbf{Achtung:} Wenn die CRL ausgelaufen ist, muss sie neu generiert werden. Das kann den VPN-Server im Betrieb blockieren.
|
|
Daher ist eine hohe Gültigkeitsdauer mit on-demand-replacement eine Option.
|
|
Ansonsten empfiehlt es sich, diesen Kram zu automatisieren. Regelmäßig eine neue CRL durch CA bereitstellen, von dieser beziehen und den VPN-Server ggf. neustarten.
|
|
In der Serverkonfiguration: \texttt{verify-crl /path/to/crl.pem}
|
|
|