Blame


1 d7e2e22c 2021-10-09 op #!/bin/sh
2 d7e2e22c 2021-10-09 op #
3 d7e2e22c 2021-10-09 op # NAME
4 d7e2e22c 2021-10-09 op # gencert - generate certificates
5 d7e2e22c 2021-10-09 op #
6 d7e2e22c 2021-10-09 op # SYNOPSIS
7 d7e2e22c 2021-10-09 op # ./gencert [-fh] [-D days] [-d destdir] hostname
8 d7e2e22c 2021-10-09 op #
9 d7e2e22c 2021-10-09 op # DESCRIPTION
10 d7e2e22c 2021-10-09 op # A simple script to generate self-signed X.509 certificates for
11 d7e2e22c 2021-10-09 op # gmid.
12 d7e2e22c 2021-10-09 op #
13 d7e2e22c 2021-10-09 op # The option are as follows:
14 d7e2e22c 2021-10-09 op # -D Specify the number of days the certificate
15 d7e2e22c 2021-10-09 op # will be valid for. Use 365 (a year) by default.
16 d7e2e22c 2021-10-09 op # -d Save the certificates to the given directory.
17 d7e2e22c 2021-10-09 op # By default the current directory is used.
18 d7e2e22c 2021-10-09 op # -f Forcefully overwrite existing certificates
19 d7e2e22c 2021-10-09 op # without prompting.
20 d7e2e22c 2021-10-09 op # -h Display usage and exit.
21 d7e2e22c 2021-10-09 op #
22 d7e2e22c 2021-10-09 op # SEE ALSO
23 d7e2e22c 2021-10-09 op # openssl(1)
24 d7e2e22c 2021-10-09 op #
25 d7e2e22c 2021-10-09 op
26 d7e2e22c 2021-10-09 op progname="$(basename -- "$0")"
27 d7e2e22c 2021-10-09 op
28 d7e2e22c 2021-10-09 op usage() {
29 d7e2e22c 2021-10-09 op echo "usage: $progname [-fh] [-d destdir] [-D days] hostname" >&2
30 d7e2e22c 2021-10-09 op echo "Please read the comment at the top of $0 for the usage." >&2
31 d7e2e22c 2021-10-09 op exit $1
32 d7e2e22c 2021-10-09 op }
33 d7e2e22c 2021-10-09 op
34 d7e2e22c 2021-10-09 op force=no
35 d7e2e22c 2021-10-09 op destdir=.
36 d7e2e22c 2021-10-09 op days=365
37 d7e2e22c 2021-10-09 op
38 d7e2e22c 2021-10-09 op while getopts "D:d:fh" flag; do
39 d7e2e22c 2021-10-09 op case $flag in
40 d7e2e22c 2021-10-09 op D) days="$OPTARG" ;;
41 d7e2e22c 2021-10-09 op d) destdir="${OPTARG%/}" ;;
42 d7e2e22c 2021-10-09 op f) force=yes ;;
43 d7e2e22c 2021-10-09 op h) usage 0 ;;
44 d7e2e22c 2021-10-09 op ?) usage 1 ;;
45 d7e2e22c 2021-10-09 op esac
46 d7e2e22c 2021-10-09 op done
47 d7e2e22c 2021-10-09 op
48 d7e2e22c 2021-10-09 op shift $(($OPTIND - 1))
49 d7e2e22c 2021-10-09 op
50 d7e2e22c 2021-10-09 op if [ $# -ne 1 ]; then
51 d7e2e22c 2021-10-09 op usage 1
52 d7e2e22c 2021-10-09 op fi
53 d7e2e22c 2021-10-09 op
54 d7e2e22c 2021-10-09 op if [ ! -d "${destdir}" ]; then
55 d7e2e22c 2021-10-09 op echo "${progname}: ${destdir} is not a directory." >&2
56 d7e2e22c 2021-10-09 op usage 1
57 d7e2e22c 2021-10-09 op fi
58 d7e2e22c 2021-10-09 op
59 d7e2e22c 2021-10-09 op hostname="${1}"
60 d7e2e22c 2021-10-09 op pem="${destdir}/${hostname}.pem"
61 d7e2e22c 2021-10-09 op key="${destdir}/${hostname}.key"
62 d7e2e22c 2021-10-09 op
63 d7e2e22c 2021-10-09 op if [ -f "$pem" -o -f "$key" ]; then
64 d7e2e22c 2021-10-09 op if [ $force = no ]; then
65 d7e2e22c 2021-10-09 op while :; do
66 d7e2e22c 2021-10-09 op printf "Overwrite existing certificate $pem? [y/n] "
67 d7e2e22c 2021-10-09 op if ! read -r reply; then
68 d7e2e22c 2021-10-09 op echo
69 d7e2e22c 2021-10-09 op exit 1
70 d7e2e22c 2021-10-09 op fi
71 d7e2e22c 2021-10-09 op case "$reply" in
72 d7e2e22c 2021-10-09 op [yY]) echo "overwriting"; break ;;
73 d7e2e22c 2021-10-09 op [nN]) echo "quitting"; exit 0 ;;
74 d7e2e22c 2021-10-09 op esac
75 d7e2e22c 2021-10-09 op done
76 d7e2e22c 2021-10-09 op fi
77 d7e2e22c 2021-10-09 op fi
78 d7e2e22c 2021-10-09 op
79 d7e2e22c 2021-10-09 op openssl req -x509 \
80 d7e2e22c 2021-10-09 op -newkey rsa:4096 \
81 d7e2e22c 2021-10-09 op -out "${pem}" \
82 d7e2e22c 2021-10-09 op -keyout "${key}" \
83 d7e2e22c 2021-10-09 op -days "${days}" \
84 d7e2e22c 2021-10-09 op -nodes \
85 d7e2e22c 2021-10-09 op -subj "/CN=$hostname"
86 d7e2e22c 2021-10-09 op
87 d7e2e22c 2021-10-09 op e=$?
88 d7e2e22c 2021-10-09 op if [ $e -ne 0 ]; then
89 d7e2e22c 2021-10-09 op exit $e
90 d7e2e22c 2021-10-09 op fi
91 d7e2e22c 2021-10-09 op
92 d7e2e22c 2021-10-09 op echo
93 d7e2e22c 2021-10-09 op echo "Generated files:"
94 d7e2e22c 2021-10-09 op echo " $pem : certificate"
95 d7e2e22c 2021-10-09 op echo " $key : private key"