Последняя активность 6 months ago

traefik_export_certs.sh Исходник
1#!/bin/bash
2
3SAN="${1}"
4ACME_FILE="${2}"
5TMP_DIR="$(mktemp -d /tmp/XXXXXXX)"
6trap 'rm -rf -- "${TMP_DIR}"' EXIT
7
8if [ ! -f "${ACME_FILE}" ] || [ -z "${ACME_FILE}" ] ; then
9 echo "error: acme file (${ACME_FILE}) missing"
10 exit
11fi
12
13jq -r '.[].Certificates[] | select(.domain.main == "'"${SAN}"'") | .certificate' "${ACME_FILE}" | base64 -d > "${TMP_DIR}/${SAN}.pem"
14jq -r '.[].Certificates[] | select(.domain.main == "'"${SAN}"'") | .key' "${ACME_FILE}" | base64 -d > "${TMP_DIR}/${SAN}.key"
15
16# Check if new key and cert files exists
17if [ -f "${TMP_DIR}/${SAN}.pem" ] && [ -f "${TMP_DIR}/${SAN}.key" ]; then
18 # Check if new key and cert files are not empty
19 if [ -s "${TMP_DIR}/${SAN}.pem" ] && [ -s "${TMP_DIR}/${SAN}.key" ]; then
20 # Check if old certs/keys exists
21 if [ -f "/etc/ssl/certs/${SAN}.pem" ] && [ -f "/etc/ssl/private/${SAN}.key" ]; then
22 # Check if old and new certs/keys are different
23 if [ "$(md5sum "/etc/ssl/private/${SAN}.key" | cut -d ' ' -f 1)" != "$(md5sum "${TMP_DIR}/${SAN}.key" | cut -d ' ' -f 1)" ] || [ "$(md5sum "/etc/ssl/certs/${SAN}.pem" | cut -d ' ' -f 1)" != "$(md5sum "${TMP_DIR}/${SAN}.pem" | cut -d ' ' -f 1)" ]; then
24 # backup key
25 if [ -f "/etc/ssl/private/${SAN}.key" ]; then
26 mv "/etc/ssl/private/${SAN}.key" "/etc/ssl/private/${SAN}.key.old"
27 fi
28 # backup cert
29 if [ -f "/etc/ssl/certs/${SAN}.pem" ]; then
30 mv "/etc/ssl/certs/${SAN}.pem" "/etc/ssl/certs/${SAN}.pem.old"
31 fi
32 else
33 exit 0
34 fi
35 fi
36 # copy key
37 cp "${TMP_DIR}/${SAN}.key" "/etc/ssl/private/${SAN}.key"
38 # copy cert
39 cp "${TMP_DIR}/${SAN}.pem" "/etc/ssl/certs/${SAN}.pem"
40 else
41 exit
42 fi
43else
44 exit
45fi
46