Create replace_synology_ssl_certs.sh
This commit is contained in:
parent
cf03a835c1
commit
6de43e35f2
93
replace_synology_ssl_certs.sh
Normal file
93
replace_synology_ssl_certs.sh
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# *** For DSM v7.x ***
|
||||||
|
#
|
||||||
|
# How to use this script:
|
||||||
|
# 1. Get your 3 PEM files ready to copy over from your local machine/update server (privkey.pem, fullchain.pem, cert.pem)
|
||||||
|
# and put into a directory (this will be $CERT_DIRECTORY).
|
||||||
|
# Personally, I use this script (https://gist.github.com/catchdave/3f6f412bbf0f0cec32469fb0c9747295) to automate steps 1 & 4.
|
||||||
|
# 2. Ensure you have a user setup on synology that has ssh access (and ssh access is setup).
|
||||||
|
# This user will need to be able to sudo as root (i.e. add this line to sudoers, <USER> is the user you create):
|
||||||
|
# <USER> ALL=(ALL) NOPASSWD: /var/services/homes/<USER>/replace_certs.sh
|
||||||
|
# 3. Copy this script to Synology: sudo scp replace_synology_ssl_certs.sh $USER@$SYNOLOGY_SERVER:~/
|
||||||
|
# 4. Call this script as follows:
|
||||||
|
# sudo bash -c scp ${CERT_DIRECTORY}/{privkey,fullchain,cert}.pem $USER@$SYNOLOGY_SERVER:/tmp/ \
|
||||||
|
# && ssh $USER@$SYNOLOGY_SERVER 'sudo ./replace_synology_ssl_certs.sh'
|
||||||
|
|
||||||
|
# Script start.
|
||||||
|
|
||||||
|
DEBUG= # Set to any non-empty value to turn on debug mode
|
||||||
|
error_exit() { echo "[ERROR] $1"; exit 1; }
|
||||||
|
warn() { echo "[WARN ] $1"; }
|
||||||
|
info() { echo "[INFO ] $1"; }
|
||||||
|
debug() { [[ "${DEBUG}" ]] && echo "[DEBUG ] $1"; }
|
||||||
|
|
||||||
|
# 1. Initialization
|
||||||
|
# =================
|
||||||
|
[[ "$EUID" -ne 0 ]] && error_exit "Please run as root" # Script only works as root
|
||||||
|
|
||||||
|
certs_src_dir="/usr/syno/etc/certificate/system/default"
|
||||||
|
services_to_restart=("nmbd" "avahi" "ldap-server")
|
||||||
|
packages_to_restart=("ScsiTarget" "SynologyDrive" "WebDAVServer" "ActiveBackup")
|
||||||
|
target_cert_dirs=(
|
||||||
|
"/usr/syno/etc/certificate/system/FQDN"
|
||||||
|
"/usr/local/etc/certificate/ScsiTarget/pkg-scsi-plugin-server/"
|
||||||
|
"/usr/local/etc/certificate/SynologyDrive/SynologyDrive/"
|
||||||
|
"/usr/local/etc/certificate/WebDAVServer/webdav/"
|
||||||
|
"/usr/local/etc/certificate/ActiveBackup/ActiveBackup/"
|
||||||
|
"/usr/syno/etc/certificate/smbftpd/ftpd/")
|
||||||
|
|
||||||
|
# Add the default directory
|
||||||
|
default_dir_name=$(</usr/syno/etc/certificate/_archive/DEFAULT)
|
||||||
|
if [[ -n "$default_dir_name" ]]; then
|
||||||
|
target_cert_dirs+=("/usr/syno/etc/certificate/_archive/${default_dir_name}")
|
||||||
|
debug "Default cert directory found: '/usr/syno/etc/certificate/_archive/${default_dir_name}'"
|
||||||
|
else
|
||||||
|
warn "No default directory found. Probably unusual? Check: 'cat /usr/syno/etc/certificate/_archive/DEFAULT'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add reverse proxy app directories
|
||||||
|
for proxy in /usr/syno/etc/certificate/ReverseProxy/*/; do
|
||||||
|
debug "Found proxy dir: ${proxy}"
|
||||||
|
target_cert_dirs+=("${proxy}")
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ "${DEBUG}" ]] && set -x
|
||||||
|
|
||||||
|
# 2. Move and chown certificates from /tmp to default directory
|
||||||
|
# =============================================================
|
||||||
|
mv /tmp/{privkey,fullchain,cert}.pem "${certs_src_dir}/" || error_exit "Halting because of error moving files"
|
||||||
|
chown root:root "${certs_src_dir}/"{privkey,fullchain,cert}.pem || error_exit "Halting because of error chowning files"
|
||||||
|
info "Certs moved from /tmp & chowned."
|
||||||
|
|
||||||
|
# 3. Copy certificates to target directories if they exist
|
||||||
|
# ========================================================
|
||||||
|
for target_dir in "${target_cert_dirs[@]}"; do
|
||||||
|
if [[ ! -d "$target_dir" ]]; then
|
||||||
|
debug "Target cert directory '$target_dir' not found, skipping..."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "Copying certificates to '$target_dir'"
|
||||||
|
if ! (cp "${certs_src_dir}/"{privkey,fullchain,cert}.pem "$target_dir/" && \
|
||||||
|
chown root:root "$target_dir/"{privkey,fullchain,cert}.pem); then
|
||||||
|
warn "Error copying or chowning certs to ${target_dir}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 4. Restart services & packages
|
||||||
|
# ==============================
|
||||||
|
info "Rebooting all the things..."
|
||||||
|
for service in "${services_to_restart[@]}"; do
|
||||||
|
/usr/syno/bin/synosystemctl restart "$service"
|
||||||
|
done
|
||||||
|
for package in "${packages_to_restart[@]}"; do # Restart packages that are installed & turned on
|
||||||
|
/usr/syno/bin/synopkg is_onoff "$package" 1>/dev/null && /usr/syno/bin/synopkg restart "$package"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Restart nginx
|
||||||
|
if ! /usr/syno/bin/synow3tool --gen-all && sudo /usr/syno/bin/synosystemctl restart nginx; then
|
||||||
|
warn "nginx failed to restart"
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "Completed"
|
||||||
Loading…
Reference in New Issue
Block a user