let a user specify his own DNS IP records
This commit is contained in:
parent
5fb4785429
commit
03517d8fbb
@ -29,6 +29,8 @@ used by the client in order to validate the server's certificate.
|
|||||||
- generate CA certificate if does not find any
|
- generate CA certificate if does not find any
|
||||||
- always generate server certificate on startup to ensure all IP addresses
|
- always generate server certificate on startup to ensure all IP addresses
|
||||||
are in x509 SAN
|
are in x509 SAN
|
||||||
|
- optionally, a user can specify his own IP or DNS SAN records
|
||||||
|
(i.e. ``--san-dns localhost,minio.site.com``)
|
||||||
- write CN to x509 SAN which is a must
|
- write CN to x509 SAN which is a must
|
||||||
- warn if the CA certificate is about to expire (<30 days till expiration)
|
- warn if the CA certificate is about to expire (<30 days till expiration)
|
||||||
- regenerate the CA certificate if it finds it has expired
|
- regenerate the CA certificate if it finds it has expired
|
||||||
|
37
gencert.sh
37
gencert.sh
@ -2,7 +2,7 @@
|
|||||||
# Filename: gencert.sh
|
# Filename: gencert.sh
|
||||||
# Description: This script generates x509 server certificate (with all IPs in
|
# Description: This script generates x509 server certificate (with all IPs in
|
||||||
# SAN) signed by a self-signed CA.
|
# SAN) signed by a self-signed CA.
|
||||||
# Version: 1.5 - 2018 October 12
|
# Version: 1.6 - 2018 December 27
|
||||||
# Author: Andrey Arapov <andrey.arapov@nixaid.com>
|
# Author: Andrey Arapov <andrey.arapov@nixaid.com>
|
||||||
# License: GPLv3
|
# License: GPLv3
|
||||||
|
|
||||||
@ -18,8 +18,9 @@ print_help() {
|
|||||||
--cakey - CA key name\t\t\t(default: ca.key)
|
--cakey - CA key name\t\t\t(default: ca.key)
|
||||||
--ca - CA cert name\t\t\t(default: ca.crt)
|
--ca - CA cert name\t\t\t(default: ca.crt)
|
||||||
--cadays - CA cert expiration in days\t(default: 3650)\n
|
--cadays - CA cert expiration in days\t(default: 3650)\n
|
||||||
--nosan - do not write SAN records\n
|
--noautosan - do not automatically discover IPs for SAN records\n
|
||||||
--san-ip - specify custom SAN IP records manually. Implies --nosan\n
|
--san-ip - specify custom SAN IP records manually. Implies --noautosan\n
|
||||||
|
--san-dns - specify custom SAN DNS records manually.\n
|
||||||
--debug - show extra information\n
|
--debug - show extra information\n
|
||||||
--rsa - generate RSA keys instead of ECDSA\n
|
--rsa - generate RSA keys instead of ECDSA\n
|
||||||
--rsa-size - set RSA key size\n"
|
--rsa-size - set RSA key size\n"
|
||||||
@ -34,7 +35,7 @@ parse_arguments() {
|
|||||||
|
|
||||||
# read arguments
|
# read arguments
|
||||||
opts=$(getopt \
|
opts=$(getopt \
|
||||||
--longoptions "help,cn:,key:,cert:,days:,cakey:,ca:,cadays:,nosan,san-ip:,debug,rsa,rsa-size:" \
|
--longoptions "help,cn:,key:,cert:,days:,cakey:,ca:,cadays:,noautosan,san-ip:,san-dns:,debug,rsa,rsa-size:" \
|
||||||
--name "$(basename "$0")" \
|
--name "$(basename "$0")" \
|
||||||
--options "" \
|
--options "" \
|
||||||
-- "$@"
|
-- "$@"
|
||||||
@ -84,16 +85,22 @@ parse_arguments() {
|
|||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--nosan)
|
--noautosan)
|
||||||
ARG_NOSAN=1
|
ARG_NOAUTOSAN=1
|
||||||
shift 1
|
shift 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
--san-ip)
|
--san-ip)
|
||||||
|
ARG_NOAUTOSAN=1
|
||||||
ARG_SAN_IP=$2
|
ARG_SAN_IP=$2
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--san-dns)
|
||||||
|
ARG_SAN_DNS=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
|
||||||
--debug)
|
--debug)
|
||||||
ARG_DEBUG=1
|
ARG_DEBUG=1
|
||||||
shift 1
|
shift 1
|
||||||
@ -126,8 +133,9 @@ parse_arguments() {
|
|||||||
SERVER_KEY="${ARG_KEY:-private.key}"
|
SERVER_KEY="${ARG_KEY:-private.key}"
|
||||||
SERVER_CERT="${ARG_CERT:-public.crt}"
|
SERVER_CERT="${ARG_CERT:-public.crt}"
|
||||||
DAYS="${ARG_DAYS:-365}"
|
DAYS="${ARG_DAYS:-365}"
|
||||||
NOSAN="${ARG_NOSAN}"
|
NOAUTOSAN="${ARG_NOAUTOSAN}"
|
||||||
SAN_IP="${ARG_SAN_IP}"
|
SAN_IP="${ARG_SAN_IP}"
|
||||||
|
SAN_DNS="${ARG_SAN_DNS}"
|
||||||
DEBUG="${ARG_DEBUG}"
|
DEBUG="${ARG_DEBUG}"
|
||||||
RSA="${ARG_RSA}"
|
RSA="${ARG_RSA}"
|
||||||
RSA_SIZE="${ARG_RSA_SIZE:-2048}"
|
RSA_SIZE="${ARG_RSA_SIZE:-2048}"
|
||||||
@ -147,8 +155,9 @@ parse_arguments() {
|
|||||||
echo CAKEY=$CAKEY
|
echo CAKEY=$CAKEY
|
||||||
echo CA=$CA
|
echo CA=$CA
|
||||||
echo CADAYS=$CADAYS
|
echo CADAYS=$CADAYS
|
||||||
echo NOSAN=$NOSAN
|
echo NOAUTOSAN=$NOAUTOSAN
|
||||||
echo SAN_IP=$SAN_IP
|
echo SAN_IP=$SAN_IP
|
||||||
|
echo SAN_DNS=$SAN_DNS
|
||||||
echo DEBUG=$DEBUG
|
echo DEBUG=$DEBUG
|
||||||
echo RSA=$RSA
|
echo RSA=$RSA
|
||||||
echo RSA_SIZE=$RSA_SIZE
|
echo RSA_SIZE=$RSA_SIZE
|
||||||
@ -250,14 +259,22 @@ DNS.1=${CN}"
|
|||||||
IFS=,
|
IFS=,
|
||||||
PAYLOAD="$(for IP in $SAN_IP; do echo "IP.${i} = ${IP}" ; i=$((i + 1)); done)"
|
PAYLOAD="$(for IP in $SAN_IP; do echo "IP.${i} = ${IP}" ; i=$((i + 1)); done)"
|
||||||
unset IFS
|
unset IFS
|
||||||
elif [ -z "$NOSAN" ]; then
|
fi
|
||||||
|
if [ ! -z "$SAN_DNS" ]; then
|
||||||
|
echo "[${ME}] Using user-provided SAN records: " ${SAN_DNS}
|
||||||
|
i=1
|
||||||
|
IFS=,
|
||||||
|
PAYLOAD="${PAYLOAD}\n$(for DNS in $SAN_DNS; do echo "DNS.${i} = ${DNS}" ; i=$((i + 1)); done)"
|
||||||
|
unset IFS
|
||||||
|
fi
|
||||||
|
if [ -z "$NOAUTOSAN" ]; then
|
||||||
# Gather IPs for SAN
|
# Gather IPs for SAN
|
||||||
|
|
||||||
i=1
|
i=1
|
||||||
IPS="$( (getent ahostsv4 $(hostname) 2>/dev/null || getent hosts $(hostname) 2>/dev/null) | awk '{print $1}' |sort | uniq)"
|
IPS="$( (getent ahostsv4 $(hostname) 2>/dev/null || getent hosts $(hostname) 2>/dev/null) | awk '{print $1}' |sort | uniq)"
|
||||||
|
|
||||||
echo "[${ME}] Found these IPs: " ${IPS}
|
echo "[${ME}] Found these IPs: " ${IPS}
|
||||||
PAYLOAD="$(for IP in $IPS; do echo "IP.${i} = ${IP}" ; i=$((i + 1)); done)"
|
PAYLOAD="${PAYLOAD}\n$(for IP in $IPS; do echo "IP.${i} = ${IP}" ; i=$((i + 1)); done)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "${OPENSSL_CONFIG_CONTENT}\n${PAYLOAD}\n" > "${OPENSSL_CONFIG}"
|
printf "${OPENSSL_CONFIG_CONTENT}\n${PAYLOAD}\n" > "${OPENSSL_CONFIG}"
|
||||||
|
Loading…
Reference in New Issue
Block a user