diff --git a/stable/openvpn/Chart.yaml b/stable/openvpn/Chart.yaml index 482f0e37d2..afc52211d1 100755 --- a/stable/openvpn/Chart.yaml +++ b/stable/openvpn/Chart.yaml @@ -3,7 +3,7 @@ description: A Helm chart to install an openvpn server inside a kubernetes clust generation is also part of the deployment, and this chart will generate client keys as needed. name: openvpn -version: 3.12.4 +version: 3.12.5 appVersion: 1.1.0 maintainers: - name: jfelten diff --git a/stable/openvpn/README.md b/stable/openvpn/README.md index 5355e0aad8..2a1b60834a 100644 --- a/stable/openvpn/README.md +++ b/stable/openvpn/README.md @@ -43,6 +43,23 @@ kubectl -n "$NAMESPACE" exec -it "$POD_NAME" /etc/openvpn/setup/newClientCert.sh kubectl -n "$NAMESPACE" exec -it "$POD_NAME" cat "/etc/openvpn/certs/pki/$KEY_NAME.ovpn" > "$KEY_NAME.ovpn" ``` +In order to revoke certificates in later steps: +```bash +#!/bin/bash + +if [ $# -ne 3 ] +then + echo "Usage: $0 " + exit +fi + +KEY_NAME=$1 +NAMESPACE=$2 +HELM_RELEASE=$3 +POD_NAME=$(kubectl get pods -n "$NAMESPACE" -l "app=openvpn,release=$HELM_RELEASE" -o jsonpath='{.items[0].metadata.name}') +kubectl -n "$NAMESPACE" exec -it "$POD_NAME" /etc/openvpn/setup/revokeClientCert.sh $KEY_NAME +``` + The entire list of helper scripts can be found on [templates/config-openvpn.yaml](templates/config-openvpn.yaml) Be sure to change `KEY_NAME` if generating additional keys. Import the .ovpn file into your favorite openvpn tool like tunnelblick and verify connectivity. diff --git a/stable/openvpn/templates/NOTES.txt b/stable/openvpn/templates/NOTES.txt index 61a24f63b9..671947d60f 100644 --- a/stable/openvpn/templates/NOTES.txt +++ b/stable/openvpn/templates/NOTES.txt @@ -21,4 +21,9 @@ Once the external IP is available and all the server certificates are generated kubectl --namespace "{{ .Release.Namespace }}" exec -it "$POD_NAME" /etc/openvpn/setup/newClientCert.sh "$KEY_NAME" "$SERVICE_IP" kubectl --namespace "{{ .Release.Namespace }}" exec -it "$POD_NAME" cat "/etc/openvpn/certs/pki/$KEY_NAME.ovpn" > "$KEY_NAME.ovpn" +Revoking certificates works just as easy: + KEY_NAME= + POD_NAME=$(kubectl get pods -n "{{ .Release.Namespace }}" -l "app=openvpn,release={{ .Release.Name }}" -o jsonpath='{.items[0].metadata.name}') + kubectl -n "{{ .Release.Namespace }}" exec -it "$POD_NAME" /etc/openvpn/setup/revokeClientCert.sh $KEY_NAME + Copy the resulting $KEY_NAME.ovpn file to your open vpn client (ex: in tunnelblick, just double click on the file). Do this for each user that needs to connect to the VPN. Change KEY_NAME for each additional user. diff --git a/stable/openvpn/templates/config-openvpn.yaml b/stable/openvpn/templates/config-openvpn.yaml index 9891ef9442..eb002ccd9d 100644 --- a/stable/openvpn/templates/config-openvpn.yaml +++ b/stable/openvpn/templates/config-openvpn.yaml @@ -22,6 +22,9 @@ data: echo "ca\n" | ./easyrsa build-ca nopass ./easyrsa build-server-full server nopass ./easyrsa gen-dh + ./easyrsa gen-crl + cp ${EASY_RSA_LOC}/pki/crl.pem ${EASY_RSA_LOC}/crl.pem # Note: the pki/ directory is inaccessible after openvpn drops privileges, so we cp crl.pem to ${EASY_RSA_LOC} to allow CRL updates without a restart + chmod 644 ${EASY_RSA_LOC}/crl.pem fi @@ -51,6 +54,15 @@ data: EOF cat pki/$1.ovpn + revokeClientCert.sh: |- + #!/bin/bash + EASY_RSA_LOC="/etc/openvpn/certs" + cd $EASY_RSA_LOC + ./easyrsa revoke $1 + ./easyrsa gen-crl + cp ${EASY_RSA_LOC}/pki/crl.pem ${EASY_RSA_LOC} + chmod 644 ${EASY_RSA_LOC}/crl.pem + configure.sh: |- #!/bin/sh @@ -117,6 +129,7 @@ data: openvpn.conf: |- server {{ .Values.openvpn.OVPN_NETWORK }} {{ .Values.openvpn.OVPN_SUBNET }} verb 3 + crl-verify /etc/openvpn/certs/crl.pem key /etc/openvpn/certs/pki/private/server.key ca /etc/openvpn/certs/pki/ca.crt cert /etc/openvpn/certs/pki/issued/server.crt