Skip to content

Instantly share code, notes, and snippets.

@waschinski
Last active January 16, 2024 19:46
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save waschinski/0871e5b6531bbaf5a4f916f9f22e5f0a to your computer and use it in GitHub Desktop.
Save waschinski/0871e5b6531bbaf5a4f916f9f22e5f0a to your computer and use it in GitHub Desktop.
Automatically creates a new p12 certificate for Plex Media Server when Synology automatically renews its Let's Encrypt certificate
#!/bin/sh
# CONFIGURATION
script_folder=/volume1/scripts
# p12 file
p12_file_path=$script_folder/syno.p12
# p12 password
p12cert_password=
# p12 domain
p12cert_domain=
# Synology's Default Let's encrypt folder
letsencrypt_cert_folder=/usr/syno/etc/certificate/system/default
# renew timestamp
renew_timestamp=renew_plex_timestamp
# DO NOT CHANGE BELOW UNLESS YOU'RE A WIZARD
generate_p12=false
current_date=`date +"%s"`
current_certificate_date=`openssl x509 -enddate -noout -in $letsencrypt_cert_folder/cert.pem | cut -d'=' -f2`
current_certificate_timestamp=`date -d "$current_certificate_date" +"%s"`
# check if the renew_timestamp file exists
if [ ! -f $script_folder/$renew_timestamp ]; then
echo "Generate timestamp for the current renew date... "
echo $current_certificate_timestamp > $script_folder/$renew_timestamp
chmod +rw $script_folder/$renew_timestamp
chown admin:users $script_folder/$renew_timestamp
# generate the first p12 file
generate_p12=true
else
renew_date=`cat $script_folder/$renew_timestamp`
# check if it is necessary to renew the certificate or not
if expr "$current_date" ">" "$renew_date" > /dev/null; then
# generate a new p12 file
echo "Renewing certificate..."
generate_p12=true
# update timestamp in the file
echo $current_certificate_timestamp > $script_folder/$renew_timestamp
else
echo "It is not necessary to renew the certificate, abort."
exit 0
fi
fi
# generate a new certificate file if necessary, and restart Plex
if expr "$generate_p12" "=" "true" > /dev/null; then
echo "Generating the p12 certificate file..."
openssl pkcs12 -export -out $p12_file_path -in $letsencrypt_cert_folder/cert.pem -inkey $letsencrypt_cert_folder/privkey.pem -certfile $letsencrypt_cert_folder/chain.pem -name $p12cert_domain -password pass:$p12cert_password
chmod +r $p12_file_path
chown admin:users $p12_file_path
echo "Restarting Plex Media Server..."
sh /var/packages/Plex\ Media\ Server/scripts/start-stop-status stop
sh /var/packages/Plex\ Media\ Server/scripts/start-stop-status start
echo "Done."
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment