\chapter{Vorwort} Dieses Dokument wurde im Rahmen der Masterarbeit \enquote{Konzeption und Umsetzung eines IPv6-VPN für die Abteilung Informatik} erzeugt. Im Rahmen der Masterarbeit wird beschrieben, wie ein IP6-VPN-Dienst auf Basis von OpenVPN konzipiert und eingerichtet wird. Für den Betrieb dieses Dienst wird eine Zertifizierungsstelle (\textit{Certificate Authority, kurz CA}) benötigt, die für Benutzer und den Serverbetreiber SSL-Zertifikate ausstellt. In diesem Dokument wird beschrieben, wie die Zertifizierungsstelle aufgebaut und konfiguriert wird. Weiterhin sind Anleitungen für die Benutzer und die Serveradministratoren des VPN-Dienst enthalten, mit deren Hilfe Zertifikate bei der Zertifizierungsstelle beantragt werden können. Für die Zertifizierungsstelle ist eine Anleitung enthalten, anhand derer Zertifikate für eingereichte Zertifikatsanträge ausgestellt werden können. \todo{Improve this section} \chapter{Einrichtung der CA} \section{Beschaffen von EasyRSA3} 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{Konfiguration der CA} \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} \begin{lstlisting} cp vars.example vars vim vars # Konfiguration der CA anpassen: \end{lstlisting} \section{Initialisierung der CA} \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{Bereitstellung der Konfiguration für Benutzer} Die Datei \texttt{vars} wird benötigt. Zusätzlich wäre es für einige Benutzer ggf. hilfreich, die Windows- und Unix-Version konfiguriert zum Download anzubieten. Daher muss durch die CA mindestens diese Datei bereitgestellt werden. In dem Zug kann man auch gleich ein vorkonfiguriertes Paket mit EasyRSA bereitstellen. \chapter{Beantragen von Clientzertifikaten} Dinge, die der Benutzer auf seinem Gerät tun muss, um einen Zertifikatsantrag zu erzeugen. Voraussetzung: Auf dem Computer ist openssl installiert. Gegebenenfalls muss der Pfad zu openssl in der \texttt{vars}-Datei von EasyRSA hinterlegt werden. Unter Windows kann auf das durch OpenVPN installierte OpenSSL zurückgegriffen werden\footnote{Mehr dazu unter \url{https://github.com/OpenVPN/easy-rsa/blob/v3.0.4/distro/windows/README-Windows.txt}}: \begin{lstlisting} set_var EASYRSA_OPENSSL "C:/Program Files/OpenVPN/bin/openssl.exe" \end{lstlisting} \chapter{Beantragen von Serverzertifikaten} Dinge, die der Benutzer auf seinem Gerät tun muss, um einen Zertifikatsantrag zu erzeugen. \chapter{Ausstellen von Zertifikaten} Ein Benutzer kommt mit einem Antrag bei der CA an. Welche Schritte werden durchlaufen, damit ein gültiges Client/Server-Zertifikat ausgestellt wird? \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} Die Gültigkeitsdauer kann in begründeten Einzelfällen (z.B. für Serverzertifikate) auf 730 Tage (etwa 2 Jahre) gesetzt werden. \begin{lstlisting} EASYRSA_CERT_EXPIRE=730 ./easyrsa sign-req server aither.inform.hs-hannover.de \end{lstlisting}