mirror of
https://github.com/helm/charts.git
synced 2026-08-23 22:37:45 +00:00
[stable/openvpn] add certificate revocation list support (#14452)
* added crl support to openvpn chart Signed-off-by: Christian Jantz <chris@safewrd.com> * added documentation on how to revoke certificates Signed-off-by: Christian Jantz <chris@safewrd.com>
This commit is contained in:
committed by
Kubernetes Prow Robot
parent
cf20495bbe
commit
100d5a156b
@@ -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
|
||||
|
||||
@@ -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 <CLIENT_KEY_NAME> <NAMESPACE> <HELM_RELEASE>"
|
||||
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.
|
||||
|
||||
@@ -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=<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.
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user