Create create_ssl_certs.sh
This commit is contained in:
parent
aae90bf5ae
commit
cf03a835c1
151
create_ssl_certs.sh
Normal file
151
create_ssl_certs.sh
Normal file
@ -0,0 +1,151 @@
|
||||
# This is a anonymized version of the script I use to renew all my SSL certs
|
||||
# across my servers. This will not work out of the box for anyone as your network will be
|
||||
# different. But may be useful starting place for others.
|
||||
#
|
||||
# I use a cronjob that runs this every week. It only replaces certificates when a certificate has been renewed.
|
||||
|
||||
# Renews/creates cert from letsencrypt & places it where it needs to be.
|
||||
# Currently, that is:
|
||||
# * DSM/Synology
|
||||
# * Unifi Protect
|
||||
# * Home Assistant
|
||||
|
||||
DOMAIN=example.com # Change to your domain
|
||||
CERT_DIRECTORY="/etc/letsencrypt/live/$DOMAIN"
|
||||
ME=$(basename "$0")
|
||||
ONLY=
|
||||
FORCE=false
|
||||
CREATE_NEW_CERT=false
|
||||
SERVERS=(synology homeassistant protect) # Whatever your server names are
|
||||
ssl_user=ssl_updater # User for remote servers that can update certs
|
||||
|
||||
# Get args
|
||||
# ================================
|
||||
POSITIONAL_ARGS=()
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-o|--only)
|
||||
if [[ ! " ${SERVERS[*]} " =~ " ${2} " ]]; then
|
||||
echo "[$ME] Unknown servername: $2. Use one of the known servers: $SERVERS"
|
||||
exit 1
|
||||
fi
|
||||
ONLY="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--force)
|
||||
FORCE=true
|
||||
shift # past argument
|
||||
;;
|
||||
--create)
|
||||
CREATE_NEW_CERT=true
|
||||
shift # past argument
|
||||
;;
|
||||
-*|--*)
|
||||
echo "[$ME] Unknown option $1"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
POSITIONAL_ARGS+=("$1") # save positional arg
|
||||
shift # past argument
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
|
||||
# ================================
|
||||
|
||||
# Use certbot to renew certificate
|
||||
# ================================
|
||||
echo "Running certbot..."
|
||||
if [ "$CREATE_NEW_CERT" == "true" ]; then
|
||||
echo "[$ME] Creating a new certificate from scratch"
|
||||
cert_flags="--insert-your-flags --creds etc *.$DOMAIN" # Modify this line for the parameters you use to create your cert
|
||||
{ CERTBOT_ERROR=$(sudo certbot certonly $cert_flags 2>&1 >&3 3>&-); } 3>&1
|
||||
errcode=$?
|
||||
else
|
||||
echo "[$ME] Renewing certificate"
|
||||
{ CERTBOT_ERROR=$(sudo certbot renew 2>&1 >&3 3>&-); } 3>&1
|
||||
errcode=$?
|
||||
fi
|
||||
if [ "$errcode" != "0" ]; then
|
||||
echo "$CERTBOT_ERROR"
|
||||
echo "[$ME] Error encountered with certbot. Halting."
|
||||
echo "[$ME] Error code: $errcode"
|
||||
exit
|
||||
fi
|
||||
# ================================
|
||||
|
||||
# Exit or continue if certificate not renewed, depending on flags
|
||||
# ================================
|
||||
if echo "$CERTBOT_ERROR" | grep 'Cert not yet due for renewal'; then
|
||||
if [ "$FORCE" != "true" ]; then
|
||||
echo "[$ME] Certbot not due for renewal--halting."
|
||||
echo "[$ME] To continue anyway (to sync the existing cert), use flag --force"
|
||||
exit 0
|
||||
else
|
||||
echo "[$ME] --force specified--continuing to sync certs"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$ONLY" != "" ]; then
|
||||
echo "--only specified. Will only sync certs to: $ONLY"
|
||||
fi
|
||||
# ================================
|
||||
|
||||
# Synology (NAS)
|
||||
# This script used here is referenced in this companion gist:
|
||||
# https://gist.github.com/catchdave/69854624a21ac75194706ec20ca61327
|
||||
# ================================
|
||||
if [[ -z "$ONLY" || "$ONLY" == "synology" ]]; then
|
||||
server=synology.$DOMAIN
|
||||
echo ""
|
||||
echo "[$ME] Copying certificates to synology"
|
||||
sudo scp ${CERT_DIRECTORY}/{privkey,fullchain,cert}.pem $ssl_user@$server:/tmp/
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "[$ME] > Replacing certs on $server...."
|
||||
ssh $ssl_user@$server 'sudo ./replace_certs.sh'
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "[$ME] > ERROR replacing certs to $server"
|
||||
fi
|
||||
else
|
||||
echo "[$ME] > Error occurred copying files to $server"
|
||||
fi
|
||||
fi
|
||||
# ================================
|
||||
|
||||
# Home Assistant
|
||||
# ================================
|
||||
if [[ -z "$ONLY" || "$ONLY" == "homeassistant" ]]; then
|
||||
server=homeassistant.$DOMAIN
|
||||
echo ""
|
||||
echo "[$ME] Copying certificates to home assistant"
|
||||
sudo scp ${CERT_DIRECTORY}/{privkey,fullchain,cert}.pem $ssl_user@$server:/usr/share/hassio/ssl/
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "[$ME] > Restarting NGINX SSL Proxy...."
|
||||
ssh $ssl_user@$server 'sudo ha addons restart core_nginx_proxy'
|
||||
else
|
||||
echo "[$ME] > Error occurred copying files to $server"
|
||||
fi
|
||||
fi
|
||||
# ================================
|
||||
|
||||
# Unifi Protect
|
||||
# ================================
|
||||
if [[ -z "$ONLY" || "$ONLY" == "protect" ]]; then
|
||||
server="protect.$DOMAIN"
|
||||
echo ""
|
||||
echo "[$ME] Copying certificates to $server"
|
||||
sudo scp ${CERT_DIRECTORY}/{privkey,fullchain}.pem $ssl_user@$server:/tmp/
|
||||
if [ "$?" = "0" ]; then
|
||||
echo "[$ME] > Restarting services on Unifi Protect...."
|
||||
ssh $ssl_user@$server 'sudo /root/replace_certs_protect.sh'
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "[$ME] > ERROR restarting services on Unifi protect"
|
||||
fi
|
||||
else
|
||||
echo "[$ME] > Error occurred copying files to Unifi Protect"
|
||||
fi
|
||||
fi
|
||||
# ================================
|
||||
Loading…
Reference in New Issue
Block a user