]> git.donarmstrong.com Git - bin.git/blob - add_openvpn_host
support vitae
[bin.git] / add_openvpn_host
1 #!/bin/bash
2
3 HOST="${1}"
4 CONF="${2:-danet_client.conf}"
5 CA="${3:-ca}"
6 CACERT="${CA}.cert"
7 CAKEY="${CA}.key"
8
9 TMPDIR="$(mktemp -d)"
10
11 CLIENT_CERT=$(awk '/^cert /{print $2}' "$CONF");
12 CLIENT_KEY=$(awk '/^key /{print $2}' "$CONF");
13 SERVER_CACERT=$(awk '/^ca /{print $2}' "$CONF");
14
15 umask 0077;
16     #  #>/dev/null 2>&1
17 cat -<<EOF |openssl req -nodes -new -keyout "${TMPDIR}/${HOST}".pem -out "${TMPDIR}/${HOST}".req -days 9000
18 .
19 .
20 .
21 .
22 .
23 $1
24 .
25
26     
27 EOF
28
29 ORIGDIR=$(pwd);
30
31 (cd $TMPDIR;
32     if [ ! -e database ]; then
33         touch database database.attr
34         cp /usr/lib/ssl/openssl.cnf config
35         perl -pi -e 's/(database|serial)\s*=.+/$1=$1/' config
36     # Use the epoch and the pid to make a unique serial (for this CA,
37     # anyway)
38     # We use perl's pack and unpack here because it can be hex, and
39     # for some cockamamie reason, it needs to be an even number of
40     # characters.
41         perl -e 'print unpack(q(H*),pack(q(NN),time,$$)),qq(\n)' > serial
42     fi;
43     openssl ca -config "$TMPDIR"/config -policy policy_anything -keyfile "${ORIGDIR}"/"${CAKEY}" -cert "${ORIGDIR}"/"${CACERT}" \
44         -out "$TMPDIR"/"${HOST}".cert -outdir "$TMPDIR" -notext -days $(( ( $(date -d 'Tuesday, 18 January 2038' +%s) - $(date +%s) ) / 60 / 60 /24 )) -batch -infiles "${HOST}".req; #> /dev/null 2>&1
45     chmod a+r "${HOST}".cert
46     rm -f "${HOST}".req
47     mv "${HOST}".cert "${CLIENT_CERT}"
48     mv "${HOST}".pem "${CLIENT_KEY}"
49 )
50
51 cp "${CONF}" "${TMPDIR}"/;
52 cp "${SERVER_CACERT}" "${TMPDIR}"/;
53
54 tar -zcf "${HOST}".tar.gz -C "${TMPDIR}" \
55     "${CLIENT_CERT}" "${CONF}" \
56     "${CLIENT_KEY}" "${SERVER_CACERT}"
57 rm -rf "${TMPDIR}"
58
59 cp ../ccd/__template__ ../ccd/"${HOST}";
60 chmod 0644 ../ccd/"${HOST}";
61 HOST="${HOST}" perl -pi -e 's/HOSTNAME/$ENV{HOST}/g' ../ccd/"${HOST}";