|
|
#!/usr/bin/env sh
# Deploy script to install keys to the openHAB keystore
# This script attempts to restart the openHAB service upon completion. # In order for this to work, the user running acme.sh needs to be able # to execute the DEPLOY_OPENHABIAN_RESTART command # (default: sudo service openhab restart) without needing a password prompt. # To ensure this deployment runs properly ensure permissions are configured # correctly, or change the command variable as needed.
# Configuration options: # DEPLOY_OPENHABIAN_KEYPASS : The default should be appropriate here for most cases, # but change this to change the password used for the keystore. # DEPLOY_OPENHABIAN_KEYSTORE : The full path of the openHAB keystore file. This will # default to a path based on the $OPENHAB_USERDATA directory. # This should generate based on existing openHAB env vars. # DEPLOY_OPENHABIAN_RESTART : The command used to restart openHAB
openhabian_deploy() {
# Name parameters, load configs _cdomain="$1" _ckey="$2" _ccert="$3" _cca="$4" _cfullchain="$5"
_debug _cdomain "$_cdomain" _debug _ckey "$_ckey" _debug _ccert "$_ccert" _debug _cca "$_cca" _debug _cfullchain "$_cfullchain"
_getdeployconf DEPLOY_OPENHABIAN_KEYSTORE _getdeployconf DEPLOY_OPENHABIAN_KEYPASS _getdeployconf DEPLOY_OPENHABIAN_RESTART
_debug2 DEPLOY_OPENHABIAN_KEYSTORE "$DEPLOY_OPENHABIAN_KEYSTORE" _debug2 DEPLOY_OPENHABIAN_KEYPASS "$DEPLOY_OPENHABIAN_KEYPASS" _debug2 DEPLOY_OPENHABIAN_RESTART "$DEPLOY_OPENHABIAN_RESTART"
# Define configurable options _openhab_keystore="${DEPLOY_OPENHABIAN_KEYSTORE:-${OPENHAB_USERDATA}/etc/keystore}" _openhab_keypass="${DEPLOY_OPENHABIAN_KEYPASS:-openhab}" _default_restart="sudo service openhab restart" _openhab_restart="${DEPLOY_OPENHABIAN_RESTART:-$_default_restart}"
_debug _openhab_keystore "$_openhab_keystore" _debug _openhab_keypass "$_openhab_keypass" _debug _openhab_restart "$_openhab_restart"
# Verify Dependencies if ! _exists keytool; then _err "keytool not found, please install keytool" return 1 fi if [ ! -w "$_openhab_keystore" ]; then _err "The file $_openhab_keystore is not writable, please change the permission." return 1 fi
# Take a backup of the old keystore _debug "Storing a backup of the existing keystore at ${_openhab_keystore}.bak" cp "${_openhab_keystore}" "${_openhab_keystore}.bak"
# Generate PKCS12 keystore _new_pkcs12="$(_mktemp)" # _toPkcs doesn't support -nodes param if ${ACME_OPENSSL_BIN:-openssl} pkcs12 \
-export \
-inkey "$_ckey" \
-in "$_ccert" \
-certfile "$_cca" \
-name mykey \
-out "$_new_pkcs12" \
-nodes -passout "pass:$_openhab_keypass"; then _debug "Successfully created pkcs keystore" else _err "Error generating pkcs12." _err "Please re-run with --debug and report a bug." rm "$_new_pkcs12" return 1 fi
# Remove old cert from existing store if keytool -delete \
-alias mykey \
-deststorepass "$_openhab_keypass" \
-keystore "$_openhab_keystore"; then _info "Successfully deleted old key" else _err "Error deleting old key" _err "Please re-run with --debug and report a bug." rm "$_new_pkcs12" return 1 fi
# Add new certificate to store if keytool -importkeystore \
-srckeystore "$_new_pkcs12" \
-srcstoretype PKCS12 \
-srcstorepass "$_openhab_keypass" \
-alias mykey \
-destkeystore "$_openhab_keystore" \
-deststoretype jks \
-deststorepass "$_openhab_keypass" \
-destalias mykey; then _info "Successfully imported new key" else _err "Failure when importing key" _err "Please re-run with --debug and report a bug." rm "$_new_pkcs12" return 1 fi
# Reload openHAB service if eval "$_openhab_restart"; then _info "Restarted openhab" else _err "Failed to restart openHAB, please restart openHAB manually." _err "The new key has been installed, but openHAB may not use it until restarted" _err "To prevent this error, override the restart command with DEPLOY_OPENHABIAN_RESTART \
and ensure it can be called by the acme.sh user"
return 1 fi
_savedeployconf DEPLOY_OPENHABIAN_KEYSTORE "$DEPLOY_OPENHABIAN_KEYSTORE" _savedeployconf DEPLOY_OPENHABIAN_KEYPASS "$DEPLOY_OPENHABIAN_KEYPASS" _savedeployconf DEPLOY_OPENHABIAN_RESTART "$DEPLOY_OPENHABIAN_RESTART"
rm "$_new_pkcs12" }
# Credits: # This solution was heavily informed by a few existing scripts: # - https://gist.github.com/jpmens/8029383 # - https://github.com/matsahm/openhab_change_ssl/blob/bd46986581631319606ae4c594d4ed774a67cd39/openhab_change_ssl # Thank you!
|