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 ausstellen kann.
In diesem Dokument wird die Einrichtung und der Betrieb der CA beschrieben.
Weiterhin sind Anleitungen für Benutzer und Serveradministratoren des VPN-Dienstes enthalten, in denen die Beantragung von Client- und Server-Zertifikaten bei der CA beschrieben wird.
Die in diesem Dokument beschriebene Konfiguration der CA wurde im Rahmen der Masterarbeit konzipiert.
Entscheidungen, die zu der hier beschriebenen Konfiguration geführt haben können in der Masterarbeit nachvollzogen werden.
EasyRSA ist eine Sammlung von Skripten, die unter Verwendung von OpenSSL den Funktionsumfang einer Zertifizierungsstelle bieten.
Durch die Kapselung von OpenSSL-Befehlen und die Verwendung einer übersichtlichen Konfigurationsdatei ermöglicht EasyRSA das komfortable und sichere Verwalten einer CA.
Aktuelle Versionen von EasyRSA sind unter \url{https://github.com/OpenVPN/easy-rsa/releases} zu finden.
Neben den auf \texttt{github.com} zur Verfügung stehenden Releases werden auch GPG-Signaturen angeboten, über welche die Releases authentisiert werden können.
Im oben erwähnten Repository sind unterhalb von \texttt{./release-keys/README.md}\footnote{\url{https://github.com/OpenVPN/easy-rsa/tree/v3.0.4/release-keys}} passende GPG-Schlüssel aufgeführt.
Zum Zeitpunkt der Erstellung dieses Dokuments (13.09.2018) ist Version 3.0.4 aktuell.
\textbf{Hinweis}: Besteht der begründete Wunsch, den privaten Schlüssel der CA \textbf{nicht} mit einem Passwort zu schützen, so kann das Argument \texttt{nopass} an den Befehl \texttt{build-ca} angehängt werden.
Ein Passwortschutz wird ausdrücklich empfohlen sofern keine sonstigen Maßnahmen zum Schutz des privaten Schlüssels der CA vor unbefugtem Zugriff getroffen werden!
\section{Bereitstellung der CA-Konfiguration für Benutzer}
Damit Benutzer korrekte Zertifikatsanträge erzeugen können, muss ihnen die Datei \texttt{vars} zur Verfügung gestellt werden.
Um Kompatibilitätsprobleme durch die Verwendung von verschiedenen EasyRSA-Versionen auszuschließen, wird empfohlen für Benutzer ein passendes Paket zusammenzustellen.
Als Basis wird jeweils das \texttt{*.zip}-Release der aktuellen Version von EasyRSA empfohlen, da dieses für Windows-Benutzer notwendige Abhängigkeiten wie \texttt{awk} und \texttt{sed} bereits enthält.
Zunächst wird das aktuelle \texttt{*.zip}-Release von EasyRSA beschafft und authentisiert.
Um ein Zertifikat von der CA zu beantragen, wird das bereits vorkonfigurierte EasyRSA-Paket benötigt, welches durch das IT-Team der Abteilung Informatik bereitgestellt wird.
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}}.
Die folgenden Zeile zeigt beispielhaft die Verwendung des durch OpenVPN installierten OpenSSL-Programms:
Nun öffnet man ein Terminal, wechselt in das eben entpackte Verzeichnis von EasyRSA und kann den Befehl \texttt{./easyrsa} verwenden, um einen Zertifikatsantrag zu erzeugen.
Für die Beantragung eines \textbf{Clientzertifikats} muss der Platzhalter \texttt{entityName} durch den hochschulweit gültigen Benutzernamen des Benutzers ersetzt werden.
Für die Beantragung eines \textbf{Serverzertifikats} muss der Platzhalter \texttt{entityName} durch dessen vollqualifizierten Domainnamen des Servers ersetzt werden.
Dieser kann beispielsweise \texttt{aither.inform.hs-hannover.de} lauten.
\textbf{Hinweis}: Besteht der begründete Wunsch, den erzeugten, privaten Schlüssel \textbf{nicht} mit einem Passwort zu schützen, so kann das Argument \texttt{nopass} an den Befehl \texttt{gen-req} angehängt werden.
Dies kann nützlich sein um den privaten Schlüssel ohne zusätzliche Passworteingabe zu benutzen - zum Beispiel zum Betrieb eines OpenVPN-Servers oder zum automatischen Verbindungsaufbau mit einem OpenVPN-Client.
Sollte der private Schlüssel in die Hände eines Angreifers gelangen, so kann dieser ebenfalls das dazugehörige Zertifikat missbrauchen.
Ein Passwortschutz wird ausdrücklich empfohlen sofern keine sonstigen Maßnahmen zum Schutz des privaten Schlüssels vor unbefugtem Zugriff getroffen werden!
Hat ein Benutzer einen Zertifikatsantrag erzeugt, so kann auf dessen Basis nun ein gültiges Zertifikat durch die CA erzeugt werden.
Hierfür muss der Zertifikatsantrag zunächst aus der vom Benutzer eingereichten Datei importiert werden, und unter einem geeigneten Namen abgelegt werden.
Für die Beantragung eines \textbf{Clientzertifikats} muss der Platzhalter \texttt{entityName} durch den Benutzernamen des Benutzers ersetzt werden, der das Zertifikat beantragt.
Für die Beantragung eines \textbf{Serverzertifikats} muss der Platzhalter \texttt{entityName} durch den vollqualifizierten Domainnamen des Servers ersetzt werden, für den das Zertifikat beantragt wird.
Dieser kann zum Beispiel \texttt{aither.inform.hs-hannover.de} lauten.
\textbf{Hinweis}: Falls bereits ein noch gültiges Zertifikat mit dem selben \texttt{CN} existiert, muss dieses vorher widerrufen werden.
\textbf{Hinweis}: Die Gültigkeitsdauer kann nach Ermessen der CA-Betreiber in begründeten Einzelfällen über den vorgegebenen Standardwert hinaus gewählt werden.
Insbesondere bei der Ausstellung von Serverzertifikaten ist dieser Schritt sinnvoll.
Bei der Wahl einer erhöhten Gültigkeitsdauer wird eine maximale Laufzeit von 730 Tagen (etwa 2 Jahren) wird empfohlen.