548 lines
22 KiB
Bash
Executable File
548 lines
22 KiB
Bash
Executable File
#!/bin/bash
|
|
# Variablen
|
|
# Konfiguration für den Zugriff auf die Synology DiskStation
|
|
SYNOLOGY_HOST="9.99.50.10"
|
|
SYNOLOGY_USERNAME="Madzone"
|
|
SYNOLOGY_PASSWORD="P@ssw0rd"
|
|
SSH_PRIVATE_KEY="$HOME/.ssh/id_rsa_synology"
|
|
host=$(nslookup 9.99.50.10)
|
|
# Zielpfad für das Full-Chain-Zertifikat
|
|
FULLCHAIN_CERT="fullchain.${HOST_FQDN}.crt"
|
|
HOST_FQDN=$(hostname -f)
|
|
HOST_NORMAL=$(hostname -s)
|
|
DOMAIN=$(hostname -d)
|
|
REMOTE_DIR="/volume1/HEIMLAN/HEIMLAN"
|
|
NFS_MOUNT="/mnt/CSR"
|
|
SSH_PRIVATE_KEY="$HOME/.ssh/id_rsa_synology"
|
|
TMP="/tmp"
|
|
|
|
# Name der Zertifikatsdateien
|
|
ROOT_CERT="CERT_HEIMLAN_RootCA.crt"
|
|
SUBCA_CERT="CERT_HEIMLAN_SubCA.crt"
|
|
SERVER_CERT="CERT_${HOST_FQDN}.crt"
|
|
|
|
# Globale Variablen für das Betriebssystem
|
|
OS=""
|
|
distro=""
|
|
version=""
|
|
codename=""
|
|
|
|
# Globale Variablen für OPENSSL
|
|
CSR_DIR="/tmp"
|
|
KEY_DIR="/tmp"
|
|
SSL_DIR=""
|
|
PKI_DIR=""
|
|
|
|
# Extrahiere OU (Organizational Unit) und O (Organization) und wandele sie in Großbuchstaben um
|
|
OU=$(echo "${DOMAIN%%.*}" | tr '[:lower:]' '[:upper:]')
|
|
O=$(echo "${DOMAIN#*.}" | tr '[:lower:]' '[:upper:]')
|
|
|
|
# Read IP address dynamically from active network interface
|
|
IP_ADDRESS=$(nmcli -t -f IP4.ADDRESS device show | awk -F: '{split($2,a,"/"); print a[1]; exit}')
|
|
echo "IP Address: $IP_ADDRESS"
|
|
|
|
# GLobale SSH Variablen
|
|
KEY_PATH="$HOME/.ssh/id_rsa_synology" # Pfad zum SSH-Schlüssel
|
|
NAS_HOME="/var/services/homes/$SYNOLOGY_USERNAME" # Angepasstes Home-Verzeichnis auf der NAS
|
|
dnf install sshpass nfs-utils -y
|
|
|
|
#*********************************************************************
|
|
#echo "SSH KEY wird im System implemntiert..."
|
|
#sudo ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_synology
|
|
#echo "SSH KEY wurde Erfolgreich im System implemntiert"
|
|
#echo "SSH Verbindung wird in die .ssh eingetragen...."
|
|
#sudo ssh-copy-id -i ~/.ssh/id_rsa_synology.pub ${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}${SYNOLOGY_PASSWORD}
|
|
#echo "SSH Verbindung wurde Erfolgreich in die .ssh eingetragen !!!"
|
|
|
|
|
|
colourmsg(){
|
|
echo -e "\033[0;36m$1\033[0m"
|
|
}
|
|
# Funktion zum Erstellen eines Ordners mit Unterordnern über SSH mit sshpass
|
|
create_remote_folders() {
|
|
|
|
# SSH-Befehl zum Erstellen des Ordners mit Unterordnern mit sshpass
|
|
echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CSR"
|
|
sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CSR"
|
|
echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CERT"
|
|
sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/CERT"
|
|
echo sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/KEY"
|
|
sshpass -p $SYNOLOGY_PASSWORD ssh "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" "mkdir -p ${REMOTE_DIR}/${HOST_FQDN}/KEY"
|
|
echo "Ordner ${REMOTE_DIR}/$HOST_FQDN/ wurde auf ${host} erstellt."
|
|
}
|
|
|
|
# Funktion zum Erstellen von SSH-Schlüsseln
|
|
generate_ssh_key() {
|
|
if [ ! -f "$KEY_PATH" ]; then
|
|
echo "Erstelle SSH-Schlüssel..."
|
|
ssh-keygen -t rsa -b 4096 -N "" -f "$KEY_PATH"
|
|
else
|
|
echo "SSH-Schlüssel existieren bereits."
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Kopieren des öffentlichen Schlüssels zur NAS
|
|
copy_ssh_key_to_nas() {
|
|
echo "Kopiere den öffentlichen Schlüssel zur NAS..."
|
|
#cat ${KEY_PATH}.pub | ssh -o StrictHostKeyChecking=no $SYNOLOGY_USERNAME@$SYNOLOGY_HOST "tee -a $NAS_HOME/.ssh/authorized_keys && chmod 600 $NAS_HOME/.ssh/authorized_keys"
|
|
cat ${KEY_PATH}.pub | sshpass -p "$SYNOLOGY_PASSWORD" ssh -o StrictHostKeyChecking=no $SYNOLOGY_USERNAME@$SYNOLOGY_HOST "tee -a $NAS_HOME/.ssh/authorized_keys && chmod 600 $NAS_HOME/.ssh/authorized_keys"
|
|
if [ $? -eq 0 ]; then
|
|
echo "Öffentlicher Schlüssel erfolgreich zur NAS kopiert."
|
|
else
|
|
echo "Fehler beim Kopieren des öffentlichen Schlüssels zur NAS."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Kopieren der Datei von der NAS zum lokalen Rechner
|
|
copy_file_from_nas() {
|
|
echo "Kopiere die Datei von der NAS zum lokalen Rechner..."
|
|
scp -i "$KEY_PATH" $SYNOLOGY_USERNAME@SYNOLOGY_HOST:$NAS_HOME "$KEY_PATH"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Datei erfolgreich kopiert."
|
|
else
|
|
echo "Fehler beim Kopieren der Datei."
|
|
exit 1
|
|
fi
|
|
}
|
|
# Funktion zum Ermitteln des Betriebssystems
|
|
detect_os() {
|
|
echo "Das installierte Derivat wird ermittelt...."
|
|
OS=$(uname -s)
|
|
|
|
case $OS in
|
|
Linux*)
|
|
# Überprüfen, ob lsb_release verfügbar ist
|
|
if command -v lsb_release &> /dev/null; then
|
|
# Verwende lsb_release, wenn es verfügbar ist
|
|
distro=$(lsb_release -si)
|
|
version=$(lsb_release -sr)
|
|
codename=$(lsb_release -sc)
|
|
else
|
|
# Überprüfe /etc/os-release
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
distro=$NAME
|
|
version=$VERSION_ID
|
|
codename=$VERSION_CODENAME
|
|
# Überprüfe /etc/lsb-release
|
|
elif [ -f /etc/lsb-release ]; then
|
|
. /etc/lsb-release
|
|
distro=$DISTRIB_ID
|
|
version=$DISTRIB_RELEASE
|
|
codename=$DISTRIB_CODENAME
|
|
# Überprüfe /etc/debian_version
|
|
elif [ -f /etc/debian_version ]; then
|
|
distro="Debian"
|
|
version=$(cat /etc/debian_version)
|
|
codename=$(uname -r)
|
|
# Überprüfe /etc/redhat-release
|
|
elif [ -f /etc/redhat-release ]; then
|
|
distro=$(cat /etc/redhat-release)
|
|
version=$(uname -r)
|
|
codename=$(uname -r)
|
|
else
|
|
distro="Unbekannte Distribution"
|
|
version="Unbekannte Version"
|
|
codename="Unbekannter Codename"
|
|
fi
|
|
fi
|
|
# Ausgabe der ermittelten Informationen
|
|
echo "\n\n"
|
|
echo "Distribution: $distro"
|
|
echo "Version: $version"
|
|
echo "Codename: $codename"
|
|
echo "\n\n"
|
|
;;
|
|
*)
|
|
echo "Unsupported OS: $OS"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "${distro} wurde ....... Ausgewählt......."
|
|
}
|
|
install_requierments(){
|
|
echo "Erstellen des Zertifikatsrequests..."
|
|
echo " Funktion create_certificate_request() wert der Variable distro: $distro"
|
|
case $distro in
|
|
Debian|Ubuntu)
|
|
echo "" Alle Noetigen Kompomenten werden Installiert....
|
|
apt install sudo sshpass nfs-common -y
|
|
;;
|
|
CentOS)
|
|
echo "" Alle Noetigen Kompomenten werden Installiert....
|
|
dnf install sudo sshpass nfs-utils -y
|
|
;;
|
|
"Red Hat Enterprise Linux")
|
|
echo "" Alle Noetigen Kompomenten werden Installiert....
|
|
dnf install sudo sshpass nfs-utils -y
|
|
;;
|
|
*)
|
|
echo "Das Betriebssystem wird nicht unterstützt für Zertifikatsrequest.";;
|
|
esac
|
|
}
|
|
# Funktion zum Erstellen des Zertifikatsrequests
|
|
create_certificate_request() {
|
|
echo "Erstellen des Zertifikatsrequests..."
|
|
echo " Funktion create_certificate_request() wert der Variable distro: $distro"
|
|
case $distro in
|
|
Debian|Ubuntu)
|
|
apt install sudo sshpass nfs-common -y
|
|
# Debian / Ubuntu spezifische Pfade
|
|
#KEY_DIR="/etc/ssl/private/"
|
|
# Erstellen des privaten Schlüssels
|
|
openssl genrsa -out "${KEY_DIR}/KEY_${HOST_FQDN}.pem" 4096
|
|
echo "Privater Schlüssel wurde erstellt: private.key"
|
|
# CSR erstellen
|
|
#CSR_DIR="/tmp"
|
|
openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=${O}/OU=${OU}/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN"
|
|
echo "Zertifikatsrequest wurde erstellt: request.csr"
|
|
# CSR anzeigen
|
|
echo "Inhalt des erstellten Zertifikatsrequests: DEBIAN|UBUNTU......."
|
|
openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout
|
|
;;
|
|
CentOS)
|
|
# CentOS spezifische Pfade
|
|
#KEY_DIR="/etc/pki/tls/private/"
|
|
# Erstellen des privaten Schlüssels
|
|
openssl genrsa -out "${KEY_DIR}KEY_${HOST_FQDN}.pem" 4096
|
|
echo "Privater Schlüssel wurde erstellt und gespeichert unter: ${KEY_DIR}KEY_${HOST_FQDN}.key"
|
|
# CSR erstellen
|
|
#CSR_DIR="/tmp"
|
|
openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=HEIMLAN/OU=HEIMLAN/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN"
|
|
echo "Zertifikatsrequest wurde erstellt und gespeichert unter: ${CSR_DIR}/CSR_${HOST_FQDN}.csr"
|
|
# CSR anzeigen
|
|
echo "Inhalt des erstellten Zertifikatsrequests: CENTOS....."
|
|
openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout
|
|
;;
|
|
"Red Hat Enterprise Linux")
|
|
# CentOS spezifische Pfade
|
|
#KEY_DIR="/etc/pki/tls/private/"
|
|
# Erstellen des privaten Schlüssels
|
|
openssl genrsa -out "${KEY_DIR}/KEY_${HOST_FQDN}.pem" 4096
|
|
echo "Privater Schlüssel wurde erstellt und gespeichert unter: ${KEY_DIR}KEY_${HOST_FQDN}.key"
|
|
# CSR erstellen
|
|
#CSR_DIR="/tmp"
|
|
openssl req -new -key "${KEY_DIR}/KEY_${HOST_FQDN}.pem" -out "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -subj "/C=DE/ST=TH/L=ILM/O=HEIMLAN/OU=HEIMLAN/CN=${HOST_FQDN}/emailAddress=admin@$DOMAIN"
|
|
echo "Zertifikatsrequest wurde erstellt und gespeichert unter: ${CSR_DIR}/CSR_${HOST_FQDN}.csr"
|
|
# CSR anzeigen
|
|
echo "Inhalt des erstellten Zertifikatsrequests: RHEL ....."
|
|
openssl req -in "${CSR_DIR}/CSR_${HOST_FQDN}.csr" -text -noout
|
|
;;
|
|
*)
|
|
echo "Das Betriebssystem wird nicht unterstützt für Zertifikatsrequest.";;
|
|
esac
|
|
}
|
|
|
|
# Funktion zum Erstellen des SSH-Schlüsselpaars und Hinzufügen zur Synology
|
|
setup_ssh_keys() {
|
|
echo "=== Einrichten von SSH-Schlüsseln ==="
|
|
|
|
# Überprüfen, ob der private Schlüssel bereits vorhanden ist
|
|
if [ ! -f "${SSH_PRIVATE_KEY}" ]; then
|
|
echo "Erstelle SSH-Schlüsselpaar..."
|
|
ssh-keygen -t rsa -b 4096 -f "${SSH_PRIVATE_KEY}" -N "" -C "Synology SSH key"
|
|
echo "SSH-Schlüsselpaar wurde erstellt: ${SSH_PRIVATE_KEY}"
|
|
else
|
|
echo "SSH-Schlüsselpaar ist bereits vorhanden: ${SSH_PRIVATE_KEY}"
|
|
fi
|
|
|
|
# SSH-Schlüssel zur Synology hinzufügen
|
|
echo "Füge den öffentlichen Schlüssel zur Synology hinzu..."
|
|
ssh-copy-id -i "${SSH_PRIVATE_KEY}.pub" "${SYNOLOGY_USER}@${SYNOLOGY_HOST}"
|
|
echo "Öffentlicher Schlüssel wurde zur Synology hinzugefügt."
|
|
}
|
|
|
|
# Funktion zum Hochladen des Requests zur Synology
|
|
upload_certificate_request() {
|
|
echo "Hochladen des Zertifikatsrequests zur Synology..."
|
|
# Mounten der NFS-Freigabe mit Benutzername und Passwort
|
|
sudo mkdir -p ${NFS_MOUNT}
|
|
echo "sudo mkdir $NFS_MOUNT"
|
|
#sudo mkdir -p ${NFS_MOUNT}
|
|
#sleep 10
|
|
#ls /mnt/CSR/
|
|
#sudo mount -t nfs -o username="${SYNOLOGY_USER}",password="${SYNOLOGY_PASSWORD}" "${SYNOLOGY_HOST}:${REMOTE_DIR}/$HOST_NORMAL/CSR" "${NFS_MOUNT}"
|
|
sudo mount -t nfs -o nfsvers=3 "${SYNOLOGY_HOST}:${REMOTE_DIR}" "${NFS_MOUNT}"
|
|
ls -lha /mnt/CSR/
|
|
#echo "TEST WARTE ZEIT 30 SEKUNDEN......"
|
|
#sleep 30
|
|
# Überprüfen, ob das Mount erfolgreich war
|
|
if [ $? -eq 0 ]; then
|
|
echo "NFS-Freigabe erfolgreich eingebunden: ${NFS_MOUNT}"
|
|
# Kopieren der Datei auf die NFS-Freigabe
|
|
ls -lha /mnt/CSR/
|
|
sleep 5
|
|
sudo cp "${CSR_DIR}/CSR_${HOST_FQDN}.csr" "${NFS_MOUNT}/${HOST_FQDN}/CSR/"
|
|
sudo cp "${KEY_DIR}/KEY_${HOST_FQDN}.pem" "${NFS_MOUNT}/${HOST_FQDN}/KEY/"
|
|
sleep 5
|
|
ls -lha /mnt/CSR/
|
|
echo "Datei erfolgreich auf die NFS-Freigabe hochgeladen."
|
|
#echo "2. TEST WARTE ZEIT 30 SEKUNDEN......"
|
|
#sleep 30
|
|
else
|
|
echo "Fehler beim Einbinden der NFS-Freigabe: ${NFS_MOUNT}"
|
|
fi
|
|
echo "Zertifikatsrequest wurde zur Synology hochgeladen."
|
|
}
|
|
umountNFS(){
|
|
# NFS-Freigabe wieder aushängen
|
|
sudo umount "${NFS_MOUNT}"
|
|
cd /mnt
|
|
rmdir CSR/
|
|
echo "NFS-Freigabe erfolgreich ausgehängt."
|
|
}
|
|
# Funktion zum Herunterladen von Root-Zertifikat, Sub-CA-Zertifikat und Server-Zertifikat
|
|
download_certificates() {
|
|
echo "Herunterladen von Root-Zertifikat, Sub-CA-Zertifikat und Server-Zertifikat..."
|
|
echo "=== Überprüfen und Herunterladen der Datei von der Synology ==="
|
|
|
|
# SSH-Befehl, um die Existenz der Datei auf der Synology zu überprüfen
|
|
ssh -i "$KEY_PATH" "${SYNOLOGY_USERNAME}@${SYNOLOGY_HOST}" test -f "${REMOTE_DIR}/${HOST_FQDN}/CERT/$SERVER_CERT"
|
|
|
|
# Prüfen des Rückgabewerts von test (-f) und Entscheidung treffen
|
|
if [ $? -eq 0 ]; then
|
|
echo "Datei CERT_${HOST_FQDN}.crt auf der Synology gefunden. Beginne mit dem Download..."
|
|
cp "${NFS_MOUNT}/${HOST_FQDN}/CERT/$SERVER_CERT" "${TMP}/$SERVER_CERT"
|
|
cp "${NFS_MOUNT}/RootCA/$ROOT_CERT" "${TMP}/$ROOT_CERT"
|
|
cp "${NFS_MOUNT}/SubCA/$SUBCA_CERT" "${TMP}/$SUBCA_CERT"
|
|
echo "Datei erfolgreich heruntergeladen nach ${TMP}"
|
|
else
|
|
#echo "Datei $SERVER_CERT nicht auf der Synology gefunden. Warte 300 Sekunden..."
|
|
#sleep 300
|
|
echo "Datei $SERVER_CERT nicht auf der Synology gefunden. Warte 300 Sekunden..."
|
|
|
|
# Timer mit Countdown anzeigen
|
|
for ((i=300; i>0; i--)); do
|
|
echo -ne "Noch $i Sekunden warten...\r"
|
|
sleep 1
|
|
done
|
|
echo
|
|
download_certificates # Rekursiver Aufruf, um erneut zu prüfen
|
|
fi
|
|
echo "Zertifikate wurden heruntergeladen."
|
|
}
|
|
|
|
# Funktion zum Erstellen des Full-Chain-Zertifikats und Umbenennen
|
|
create_fullchain_certificate() {
|
|
echo "Erstellen des Full-Chain-Zertifikats..."
|
|
# Zielpfad für das Full-Chain-Zertifikat
|
|
FULLCHAIN_CERT="/tmp/fullchain.crt"
|
|
|
|
# Full-Chain-Zertifikat erstellen
|
|
cat "$TMP/$SERVER_CERT" "$TMP/$SUBCA_CERT" "$TMP/$ROOT_CERT" > "$FULLCHAIN_CERT"
|
|
|
|
echo "Full-Chain-Zertifikat wurde erstellt: $FULLCHAIN_CERT"
|
|
|
|
# Server-Zertifikat nach Hostnamen benennen
|
|
HOSTNAME=$(hostname)
|
|
mv "$FULLCHAIN_CERT" "$TMP/fullchain_$HOST_FQDN.crt"
|
|
|
|
echo "Full-Chain-Zertifikat umbenannt zu fullchain_$HOST_FQDN.crt"
|
|
}
|
|
|
|
# Funktion zum Kopieren der Zertifikate in die richtigen Pfade je nach Derivat und Typ
|
|
copy_certificates() {
|
|
echo "Kopieren der Zertifikate in die richtigen Pfade..."
|
|
|
|
case $distro in
|
|
Debian|Ubuntu)
|
|
# Debian / Ubuntu spezifische Pfade
|
|
SSL_DIR="/usr/local/share/ca-certificates/"
|
|
KEY_STORE="usr/local/share/ca-certificates/"
|
|
# Root-Zertifikat kopieren
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR/$ROOT_CERT"
|
|
# Sub-CA-Zertifikat kopieren
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR/$SUBCA_CERT"
|
|
# Server-Zertifikat kopieren
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR/$SERVER_CERT"
|
|
# Server Key kopieren
|
|
cp "$TMP/KEY_${HOST_FQDN}.pem" "$KEY_STORE/KEY_${HOST_FQDN}.pem"
|
|
echo "Zertifikate wurden nach $SSL_DIR kopiert."
|
|
update-ca-certificates
|
|
;;
|
|
CentOS|"Red Hat Enterprise Linux")
|
|
# CentOS spezifische Pfade
|
|
SSL_DIR="/etc/pki/tls/certs/"
|
|
KEY_STORE="etc/pki/tls/private/"
|
|
PKI_DIR="/etc/pki/ca-trust/source/anchors/"
|
|
# Root-Zertifikat kopieren
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR/$ROOT_CERT"
|
|
cp "$TMP/$ROOT_CERT" "$PKI_DIR/$ROOT_CERT"
|
|
# Sub-CA-Zertifikat kopieren
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR/$SUBCA_CERT"
|
|
cp "$TMP/$SUBCA_CERT" "$PKI_DIR/$SUBCA_CERT"
|
|
# Server-Zertifikat kopieren
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR/$SERVER_CERT"
|
|
cp "$TMP/$SERVER_CERT" "$PKI_DIR/$SERVER_CERT"
|
|
# Server Key kopieren
|
|
cp "$TMP/KEY_${HOST_FQDN}.pem" "$KEY_STORE/KEY_${HOST_FQDN}.pem"
|
|
echo "Zertifikate wurden nach $SSL_DIR und nach $PKI_DIR kopiert."
|
|
update-ca-trust
|
|
;;
|
|
*)
|
|
echo "Das Betriebssystem $OS wird nicht unterstützt für Zertifikate-Kopieren."
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Funktion zum Kopieren der Zertifikate in die richtigen Pfade je nach WebServer Ty
|
|
copy_web_certificates() {
|
|
echo "Kopieren der Zertifikate in die richtigen Pfade und Aktualisieren der Konfigurationsdateien..."
|
|
|
|
case $distro in
|
|
Debian|Ubuntu)
|
|
# Debian / Ubuntu spezifische Pfade
|
|
SSL_DIR_APACHE="/etc/ssl/certs/"
|
|
SSL_DIR_NGINX="/etc/nginx/ssl/"
|
|
|
|
# Prüfen, ob Apache installiert ist und den SSL-Pfad anpassen
|
|
if [ -f "/etc/apache2/apache2.conf" ]; then
|
|
SSL_DIR_APACHE="/etc/apache2/ssl/"
|
|
fi
|
|
|
|
# Prüfen, ob Nginx installiert ist und den SSL-Pfad anpassen
|
|
if [ -f "/etc/nginx/nginx.conf" ]; then
|
|
SSL_DIR_NGINX="/etc/nginx/ssl/"
|
|
fi
|
|
|
|
# Root-Zertifikat kopieren
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR_APACHE/$ROOT_CERT"
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR_NGINX/$ROOT_CERT"
|
|
# Sub-CA-Zertifikat kopieren
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR_APACHE/$SUBCA_CERT"
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR_NGINX/$SUBCA_CERT"
|
|
# Server-Zertifikat kopieren
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_CERT"
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_CERT"
|
|
|
|
echo "Zertifikate wurden nach $SSL_DIR_APACHE und $SSL_DIR_NGINX kopiert."
|
|
|
|
# Aktualisieren der Apache-Konfiguration, falls vorhanden
|
|
if [ -f "/etc/apache2/apache2.conf" ]; then
|
|
update_apache_config "$SSL_DIR_APACHE/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_KEY"
|
|
fi
|
|
|
|
# Aktualisieren der Nginx-Konfiguration, falls vorhanden
|
|
if [ -f "/etc/nginx/nginx.conf" ]; then
|
|
update_nginx_config "$SSL_DIR_NGINX/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_KEY"
|
|
fi
|
|
;;
|
|
CentOS|"Red Hat Enterprise Linux")
|
|
# CentOS spezifische Pfade
|
|
SSL_DIR_APACHE="/etc/pki/tls/certs/"
|
|
SSL_DIR_NGINX="/etc/nginx/ssl/"
|
|
|
|
# Prüfen, ob Apache installiert ist und den SSL-Pfad anpassen
|
|
if [ -f "/etc/httpd/conf/httpd.conf" ]; then
|
|
SSL_DIR_APACHE="/etc/httpd/ssl/"
|
|
fi
|
|
|
|
# Prüfen, ob Nginx installiert ist und den SSL-Pfad anpassen
|
|
if [ -f "/etc/nginx/nginx.conf" ]; then
|
|
SSL_DIR_NGINX="/etc/nginx/ssl/"
|
|
fi
|
|
|
|
# Root-Zertifikat kopieren
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR_APACHE/$ROOT_CERT"
|
|
cp "$TMP/$ROOT_CERT" "$SSL_DIR_NGINX/$ROOT_CERT"
|
|
# Sub-CA-Zertifikat kopieren
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR_APACHE/$SUBCA_CERT"
|
|
cp "$TMP/$SUBCA_CERT" "$SSL_DIR_NGINX/$SUBCA_CERT"
|
|
# Server-Zertifikat kopieren
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_CERT"
|
|
cp "$TMP/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_CERT"
|
|
|
|
echo "Zertifikate wurden nach $SSL_DIR_APACHE und $SSL_DIR_NGINX kopiert."
|
|
|
|
# Aktualisieren der Apache-Konfiguration, falls vorhanden
|
|
if [ -f "/etc/httpd/conf/httpd.conf" ]; then
|
|
update_apache_config "$SSL_DIR_APACHE/$SERVER_CERT" "$SSL_DIR_APACHE/$SERVER_KEY"
|
|
fi
|
|
|
|
# Aktualisieren der Nginx-Konfiguration, falls vorhanden
|
|
if [ -f "/etc/nginx/nginx.conf" ]; then
|
|
update_nginx_config "$SSL_DIR_NGINX/$SERVER_CERT" "$SSL_DIR_NGINX/$SERVER_KEY"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Es ist kein WEbServer auf diesen System Installiert"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Funktion zum Aktualisieren der Apache-Konfiguration
|
|
update_apache_config() {
|
|
local cert_file="$1"
|
|
local key_file="$2"
|
|
|
|
echo "Aktualisiere Apache-Konfiguration für SSL-Zertifikate..."
|
|
|
|
# Konfigurationsdatei für SSL-Zertifikate finden und bearbeiten
|
|
local apache_config_file=$(find /etc/apache2 -name "ssl.conf" -o -name "httpd.conf" 2>/dev/null | head -1)
|
|
if [ -n "$apache_config_file" ]; then
|
|
# SSLCertificateFile aktualisieren
|
|
sed -i "s|^\( *SSLCertificateFile *\).*|\1$cert_file|" "$apache_config_file"
|
|
# SSLCertificateKeyFile aktualisieren
|
|
sed -i "s|^\( *SSLCertificateKeyFile *\).*|\1$key_file|" "$apache_config_file"
|
|
echo "Apache-Konfiguration aktualisiert."
|
|
else
|
|
echo "Apache-Konfigurationsdatei nicht gefunden oder nicht aktualisiert."
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Aktualisieren der Nginx-Konfiguration
|
|
update_nginx_config() {
|
|
local cert_file="$1"
|
|
local key_file="$2"
|
|
|
|
echo "Aktualisiere Nginx-Konfiguration für SSL-Zertifikate..."
|
|
|
|
# Konfigurationsdatei für SSL-Zertifikate finden und bearbeiten
|
|
local nginx_config_file="/etc/nginx/nginx.conf"
|
|
if [ -f "$nginx_config_file" ]; then
|
|
# SSL Zertifikat und Key aktualisieren
|
|
sed -i "s|^\( *ssl_certificate *\).*|\1$cert_file;|" "$nginx_config_file"
|
|
sed -i "s|^\( *ssl_certificate_key *\).*|\1$key_file;|" "$nginx_config_file"
|
|
echo "Nginx-Konfiguration aktualisiert."
|
|
else
|
|
echo "Nginx-Konfigurationsdatei nicht gefunden oder nicht aktualisiert."
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Ermitteln des installierten Webserver-Dienstes
|
|
detect_webserver() {
|
|
if [ -f "/etc/apache2/apache2.conf" ]; then
|
|
echo "Apache Webserver ist installiert."
|
|
fi
|
|
if [ -f "/etc/httpd/conf/httpd.conf" ]; then
|
|
echo "Apache Webserver ist installiert."
|
|
fi
|
|
if [ -f "/etc/nginx/nginx.conf" ]; then
|
|
echo "Nginx Webserver ist installiert."
|
|
fi
|
|
}
|
|
|
|
echo
|
|
# Hauptprogramm
|
|
detect_os
|
|
install_requierments
|
|
generate_ssh_key
|
|
copy_ssh_key_to_nas
|
|
create_certificate_request
|
|
create_remote_folders
|
|
#Wird nicht genutz
|
|
#setup_ssh_keys
|
|
upload_certificate_request
|
|
download_certificates
|
|
create_fullchain_certificate
|
|
copy_certificates
|
|
|
|
# Funktionen fue WebServer Zertifiakte
|
|
detect_webserver
|
|
copy_web_certificates
|
|
#umountNFS
|
|
echo "Prozess abgeschlossen."
|