fix a few failures
authorIan Kelling <iank@fsf.org>
Thu, 22 Oct 2020 02:50:49 +0000 (22:50 -0400)
committerIan Kelling <iank@fsf.org>
Thu, 22 Oct 2020 02:50:49 +0000 (22:50 -0400)
vpn-mk-client-cert
vpn-server-setup

index 78db36ee58ef52e3149897c32926c3cd79c2f41f..68f0744df680ef33bb031fe2f71a331a80ca36d9 100755 (executable)
@@ -36,6 +36,7 @@ usage: ${0##*/} VPN_SERVER_HOST
                  can't generate.
 
 -c CLIENT_HOST   Default is localhost. Else we ssh to root@CLIENT_HOST.
+-f               Force. Proceed even if cert already exists.
 -n CONFIG_NAME   default is client
 -o SERVER_CONFIG_NAME  Default is CONFIG_NAME
 -s SCRIPT_PATH   Use custom up/down script at SCRIPT_PATH. copied to same path
@@ -67,13 +68,15 @@ name=client
 custom_script=false
 script=/etc/openvpn/update-resolv-conf
 client_host=$CLIENT_HOST
+force=false
 
-temp=$(getopt -l help hb:c:n:o:s: "$@") || usage 1
+temp=$(getopt -l help hb:c:fn:o:s: "$@") || usage 1
 eval set -- "$temp"
 while true; do
   case $1 in
     -b) common_name="$2"; shift 2 ;;
     -c) client_host=$2; shell="ssh root@$client_host"; shift 2 ;;
+    -f) force=true; shift ;;
     -n) name="$2"; shift 2 ;;
     -o) server_name="$2"; shift 2 ;;
     -s) custom_script=true; script="$2"; shift 2 ;;
@@ -100,6 +103,20 @@ host=$1
 
 ####### end command line parsing and checking ##############
 
+
+f=/etc/openvpn/client/$name.crt
+
+cert_to_test=$f
+if [[ $client_host ]]; then
+  cert_to_test=$(mktemp)
+  ssh root@$client_host cat $f 2>/dev/null >$cert_to_test ||:
+fi
+if ! $force && openssl x509 -checkend $(( 60 * 60 * 24 * 30 )) -noout -in $cert_to_test &>/dev/null; then
+  echo "$0: cert already exists. exiting early"
+  exit 0
+fi
+
+
 # bash or else we get motd spam. note sleep 2, sleep 1 failed.
 $shell '[[ -e /etc/openvpn ]] || apt install openvpn'
 if ! ssh root@$host bash -s -- $server_name $common_name < client-cert-helper \
@@ -113,7 +130,6 @@ fi
 port=$(echo '/^port/ {print $2}' | ssh root@$host awk -f - /etc/openvpn/server/$name.conf | tail -n1)
 
 
-f=/etc/openvpn/client/$name.crt
 if ! $shell "test -s $f"; then
   # if common name is not unique, you get empty file. and if we didn't silence
   # build-key, you'd see an error "TXT_DB error number 2"
index 0710dc801072e749df602364226a5fbd216d082b..8cfe54576aaeb0d4bd945924553b330661e71b2f 100755 (executable)
@@ -210,9 +210,6 @@ s/^dh dh1024.pem/dh dh2048.pem/
 EOF
 
 
-mkdir -p /etc/openvpn/client-config
-
-
 if $dns; then
   # Be the dns server for clients
   cat >>$conf <<EOF