masterthesis/CA-DOC-Inhalt.tex

170 lines
7.7 KiB
TeX
Raw Normal View History

2018-09-12 13:28:18 +02:00
\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.
2018-09-12 14:04:46 +02:00
In diesem Dokument wird beschrieben, wie die CA aufgebaut und konfiguriert wird.
Weiterhin sind Anleitungen für die Benutzer und die Serveradministratoren des VPN-Dienst enthalten, mit deren Hilfe Zertifikate bei der CA beantragt werden können.
Für die CA ist eine Anleitung enthalten, anhand derer Zertifikate für eingereichte Zertifikatsanträge ausgestellt werden können.
2018-09-12 13:28:18 +02:00
\todo{Improve this section}
2018-09-12 14:04:46 +02:00
\chapter{Einrichtung der CA}
Bevor durch die CA Zertifikate ausgestellt werden könnnen, muss sie erst einmal aufgebaut werden.
Dies geschieht auf Basis von EasyRSA, welches von den OpenVPN-Entwicklern zur Verfügung gestellt wird.
2018-09-12 13:28:18 +02:00
2018-09-12 14:04:46 +02:00
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/master/release-keys}} passende GPG-Schlüssel aufgeführt.
2018-09-12 13:28:18 +02:00
2018-09-12 11:44:59 +02:00
\begin{lstlisting}
2018-09-12 14:04:46 +02:00
# Aktuelles Release v3.0.4 beschaffen
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
# Aktuell gültige(n) GPG-Schlüssel für die Signaturprüfung beschaffen
2018-09-12 13:28:18 +02:00
gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3
2018-09-12 14:04:46 +02:00
# Signatur der heruntergeladenen Datei überprüfen
2018-09-12 13:28:18 +02:00
gpg --verify EasyRSA-3.0.4.tgz.sig EasyRSA-3.0.4.tgz
2018-09-12 14:04:46 +02:00
\end{lstlisting}
Nach der erfolgreichen Authentisierung des heruntergeladenen Archivs kann dieses nun entpackt und verwendet werden.
\begin{lstlisting}
2018-09-12 13:28:18 +02:00
tar xzf EasyRSA-3.0.4.tgz
cd EasyRSA-3.0.4
2018-09-12 11:44:59 +02:00
\end{lstlisting}
2018-09-12 13:28:18 +02:00
\section{Konfiguration der CA}
2018-09-12 14:04:46 +02:00
Im nächsten Schritt wird auf Basis der Datei \texttt{vars.example} die Konfigurationsdatei \texttt{vars} erzeugt und anschließend bearbeitet.
\begin{lstlisting}
cp vars.example vars
vim vars
\end{lstlisting}
2018-09-12 13:28:18 +02:00
2018-09-12 14:04:46 +02:00
Folgende Einstellungen werden angepasst:
2018-09-12 11:44:59 +02:00
\begin{lstlisting}
2018-09-12 14:04:46 +02:00
# Die volle Organisationsstruktur in Zertifikate aufnehmen
2018-09-12 11:44:59 +02:00
set_var EASYRSA_DN "org"
2018-09-12 14:04:46 +02:00
# Standardwerte für alle Zertifikatsanträge
2018-09-12 11:44:59 +02:00
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"
2018-09-12 14:04:46 +02:00
set_var EASYRSA_REQ_OU "Abteilung Informatik"
2018-09-12 11:44:59 +02:00
2018-09-12 14:04:46 +02:00
# Alle Zertifikate sollen den RSA-Algorithmus mit 4096 Bit Schlüssellänge verwenden
2018-09-12 11:44:59 +02:00
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
2018-09-12 14:04:46 +02:00
# Das Wurzelzertifikat soll etwa 10 Jahre gültig sein
2018-09-12 11:44:59 +02:00
set_var EASYRSA_CA_EXPIRE 3650
2018-09-12 14:04:46 +02:00
# Ausgestellte Zertifikate sollen standardmäßig etwa ein halbes Jahr gültig sein
2018-09-12 11:44:59 +02:00
set_var EASYRSA_CERT_EXPIRE 180
2018-09-11 13:28:04 +02:00
2018-09-12 14:04:46 +02:00
# Eine erzeugte CRL soll etwa ein halbes Jahr gültig sein
set_var EASYRSA_CRL_DAYS 180
2018-09-11 13:28:04 +02:00
\end{lstlisting}
2018-09-12 14:04:46 +02:00
Sind alle Änderungen durchgeführt worden, ist die Konfiguration der CA damit vollständig abgeschlossen.
2018-09-11 13:28:04 +02:00
2018-09-12 13:28:18 +02:00
\section{Initialisierung der CA}
2018-09-12 14:04:46 +02:00
Als nächstes muss die Verzeichnisstruktur der CA initialisiert werden und das Wurzelzertifikat erzeugt werden.
2018-09-12 13:28:18 +02:00
\begin{lstlisting}
2018-09-12 14:04:46 +02:00
# Verzeichnisstruktur initialisieren
2018-09-12 13:28:18 +02:00
./easyrsa init-pki
2018-09-11 13:28:04 +02:00
2018-09-12 14:04:46 +02:00
# CA-Zertifikat erzeugen
2018-09-12 13:28:18 +02:00
./easyrsa build-ca
\end{lstlisting}
2018-09-12 14:04:46 +02:00
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 \texttt{build-ca}-Befehl angehängt werden.
Sollte der private Schlüssel in die Hände eines Angreifers gelangen, so kann dieser beliebige Zertifikate durch die CA ausstellen.
Der Schutz des privaten Schlüssels der CA durch ein Passwort wird aus diesem Grund ausdrücklich empfohlen!
2018-09-11 13:28:04 +02:00
2018-09-12 14:04:46 +02:00
\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.
2018-09-11 13:28:04 +02:00
2018-09-12 14:04:46 +02:00
Als Basis wird jeweils das \texttt{*.zip}-Release empfohlen, da dieses für Windows-Benutzer notwendige Programme wie \texttt{awk} und \texttt{sed} bereits enthält.
\begin{lstlisting}
# Aktuelles Release v3.0.4 beschaffen
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/ \
EasyRSA-3.0.4.zip
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/ \
EasyRSA-3.0.4.zip.sig
# Aktuell gültige(n) GPG-Schlüssel für die Signaturprüfung beschaffen
gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3
# Signatur der heruntergeladenen Datei überprüfen
gpg --verify EasyRSA-3.0.4.zip.sig EasyRSA-3.0.4.zip
\end{lstlisting}
Anschließend kann die konfigurierte \texttt{vars}-Datei der CA zum ZIP-Archiv hinzugefügt werden und anschließend den Benutzern zur Verfügung gestellt werden.
\begin{lstlisting}
zip VPN-EasyRSA.zip /path/to/CA/vars
\end{lstlisting}
2018-09-11 13:28:04 +02:00
2018-09-12 13:28:18 +02:00
\chapter{Beantragen von Clientzertifikaten}
Dinge, die der Benutzer auf seinem Gerät tun muss, um einen Zertifikatsantrag zu erzeugen.
2018-09-11 13:28:04 +02:00
2018-09-12 13:28:18 +02:00
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}
2018-09-11 13:28:04 +02:00
2018-09-12 13:28:18 +02:00
\chapter{Beantragen von Serverzertifikaten}
Dinge, die der Benutzer auf seinem Gerät tun muss, um einen Zertifikatsantrag zu erzeugen.
2018-09-11 13:28:04 +02:00
2018-09-12 13:28:18 +02:00
\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?
2018-08-30 21:42:43 +02:00
2018-09-12 11:44:59 +02:00
\begin{lstlisting}
2018-09-01 22:01:03 +02:00
# Request importieren (erfordert einen eindeutigen Namen - hier "timmeja")
./easyrsa import-req /tmp/EasyRSA-3.0.4/pki/reqs/jpt-client.req timmeja
2018-08-30 21:42:43 +02:00
2018-09-12 11:44:59 +02:00
# 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
2018-09-01 22:01:03 +02:00
# Request signieren mit Client-Rolle (erfordert Passwort für privaten Schlüssel der CA)
./easyrsa sign-req client timmeja
2018-08-30 21:42:43 +02:00
2018-09-01 22:01:03 +02:00
# Zertifikat inspizieren und an Antragsteller übergeben
openssl x509 -in pki/issued/timmeja.crt -noout -text
2018-08-30 21:42:43 +02:00
2018-09-12 11:44:59 +02:00
# (optional?)
./easyrsa update-db
2018-09-01 22:01:03 +02:00
# CRL erzeugen und an OpenVPN-Server übergeben
./easyrsa gen-crl
2018-09-03 10:21:39 +02:00
\end{lstlisting}
2018-08-30 21:42:43 +02:00
2018-09-03 10:21:39 +02:00
\textbf{Achtung:} Wenn die CRL ausgelaufen ist, muss sie neu generiert werden. Das kann den VPN-Server im Betrieb blockieren.
2018-09-01 22:01:03 +02:00
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.
2018-09-03 10:21:39 +02:00
In der Serverkonfiguration: \texttt{verify-crl /path/to/crl.pem}
2018-08-30 21:42:43 +02:00
2018-09-12 13:28:18 +02:00
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}