"feat: Add SSL certificate generation scripts for installation"
This commit is contained in:
parent
bb10247c41
commit
49faea0a73
1
INSTALLATION.md
Normal file
1
INSTALLATION.md
Normal file
@ -0,0 +1 @@
|
||||
|
124
generate_ssl_certs.ps1
Normal file
124
generate_ssl_certs.ps1
Normal file
@ -0,0 +1,124 @@
|
||||
# MYP - SSL-Zertifikat-Generator für Windows
|
||||
# Erstellt selbstsignierte Zertifikate für die HTTPS-Kommunikation
|
||||
|
||||
# Überprüfen, ob das Skript als Administrator ausgeführt wird
|
||||
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
||||
if (-not $isAdmin) {
|
||||
Write-Host "Dieses Skript muss mit Administrator-Rechten ausgeführt werden." -ForegroundColor Red
|
||||
Write-Host "Bitte starten Sie PowerShell als Administrator und führen Sie das Skript erneut aus." -ForegroundColor Yellow
|
||||
Exit 1
|
||||
}
|
||||
|
||||
# Header anzeigen
|
||||
Write-Host "================================================================" -ForegroundColor Blue
|
||||
Write-Host " MYP - SSL-Zertifikat-Generator " -ForegroundColor Blue
|
||||
Write-Host "================================================================" -ForegroundColor Blue
|
||||
Write-Host ""
|
||||
|
||||
# Parameter definieren
|
||||
$certDir = "./backend/instance/ssl"
|
||||
$backendCertFile = "$certDir/myp.crt"
|
||||
$backendKeyFile = "$certDir/myp.key"
|
||||
$frontendCertFile = "$certDir/frontend.crt"
|
||||
$frontendKeyFile = "$certDir/frontend.key"
|
||||
$backendHostname = "raspberrypi"
|
||||
$frontendHostname = "m040tbaraspi001.de040.corpintra.net"
|
||||
$validityDays = 3650 # 10 Jahre
|
||||
|
||||
# Verzeichnis erstellen, falls es nicht existiert
|
||||
if (!(Test-Path $certDir)) {
|
||||
Write-Host "Erstelle Verzeichnis $certDir..." -ForegroundColor Yellow
|
||||
New-Item -ItemType Directory -Path $certDir -Force | Out-Null
|
||||
}
|
||||
|
||||
# Prüfen, ob OpenSSL installiert ist
|
||||
$openSSLInstalled = $null
|
||||
try {
|
||||
$openSSLInstalled = Get-Command openssl -ErrorAction SilentlyContinue
|
||||
} catch {}
|
||||
|
||||
if ($null -eq $openSSLInstalled) {
|
||||
Write-Host "OpenSSL konnte nicht gefunden werden!" -ForegroundColor Red
|
||||
Write-Host "Bitte installieren Sie OpenSSL für Windows und stellen Sie sicher, dass es im PATH verfügbar ist." -ForegroundColor Yellow
|
||||
Write-Host "Sie können OpenSSL von https://slproweb.com/products/Win32OpenSSL.html herunterladen." -ForegroundColor Yellow
|
||||
Exit 1
|
||||
}
|
||||
|
||||
# Funktion zum Erstellen eines selbstsignierten Zertifikats
|
||||
function Create-SelfSignedCert {
|
||||
param(
|
||||
[string]$CertFile,
|
||||
[string]$KeyFile,
|
||||
[string]$Hostname,
|
||||
[int]$Days
|
||||
)
|
||||
|
||||
Write-Host "Erstelle selbstsigniertes SSL-Zertifikat für $Hostname..." -ForegroundColor Green
|
||||
|
||||
# OpenSSL-Konfiguration erstellen
|
||||
$configFile = "$certDir/openssl_$($Hostname.Split('.')[0]).cnf"
|
||||
|
||||
$configContent = @"
|
||||
[req]
|
||||
default_bits = 2048
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
distinguished_name = req_distinguished_name
|
||||
x509_extensions = v3_req
|
||||
|
||||
[req_distinguished_name]
|
||||
C = DE
|
||||
ST = Berlin
|
||||
L = Berlin
|
||||
O = Mercedes-Benz AG
|
||||
OU = Werk 040 Berlin
|
||||
CN = $Hostname
|
||||
|
||||
[v3_req]
|
||||
keyUsage = critical, digitalSignature, keyAgreement
|
||||
extendedKeyUsage = serverAuth
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[alt_names]
|
||||
DNS.1 = $Hostname
|
||||
DNS.2 = localhost
|
||||
IP.1 = 127.0.0.1
|
||||
"@
|
||||
|
||||
$configContent | Out-File -FilePath $configFile -Encoding ASCII
|
||||
|
||||
# Zertifikat erstellen
|
||||
openssl req -x509 -nodes -days $Days -newkey rsa:2048 -keyout $KeyFile -out $CertFile -config $configFile
|
||||
|
||||
# Berechtigungen setzen
|
||||
if (Test-Path $KeyFile) {
|
||||
# Schlüsseldatei auf 'Nur-Lesen' setzen
|
||||
Set-ItemProperty -Path $KeyFile -Name IsReadOnly -Value $true
|
||||
}
|
||||
|
||||
# Fingerprint anzeigen
|
||||
$fingerprint = openssl x509 -noout -fingerprint -sha256 -in $CertFile
|
||||
Write-Host "Zertifikat erstellt: $CertFile" -ForegroundColor Green
|
||||
Write-Host "Fingerprint: $fingerprint" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Backend-Zertifikat erstellen
|
||||
Create-SelfSignedCert -CertFile $backendCertFile -KeyFile $backendKeyFile -Hostname $backendHostname -Days $validityDays
|
||||
|
||||
# Frontend-Zertifikat erstellen
|
||||
Create-SelfSignedCert -CertFile $frontendCertFile -KeyFile $frontendKeyFile -Hostname $frontendHostname -Days $validityDays
|
||||
|
||||
# Bestätigung und Hinweise
|
||||
Write-Host "SSL-Zertifikate wurden erfolgreich erstellt!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Backend-Zertifikat: $backendCertFile" -ForegroundColor Cyan
|
||||
Write-Host "Frontend-Zertifikat: $frontendCertFile" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Hinweise zur Verwendung:" -ForegroundColor Yellow
|
||||
Write-Host "1. Stellen Sie sicher, dass die Zertifikatpfade in den Konfigurationsdateien korrekt sind." -ForegroundColor White
|
||||
Write-Host "2. Beim ersten Zugriff auf die Anwendung müssen Sie das Zertifikat im Browser akzeptieren." -ForegroundColor White
|
||||
Write-Host "3. In einer Produktionsumgebung sollten Sie offiziell signierte Zertifikate verwenden." -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Starten Sie die Anwendung mit:" -ForegroundColor Blue
|
||||
Write-Host "docker-compose up -d" -ForegroundColor White
|
193
generate_ssl_certs.sh
Normal file
193
generate_ssl_certs.sh
Normal file
@ -0,0 +1,193 @@
|
||||
#!/bin/bash
|
||||
# MYP - SSL-Zertifikat-Generator für Linux/Unix
|
||||
# Erstellt selbstsignierte Zertifikate für die HTTPS-Kommunikation
|
||||
|
||||
# Fehlerabbruch aktivieren
|
||||
set -e
|
||||
|
||||
# Farben für bessere Lesbarkeit
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Funktion für Titel
|
||||
print_header() {
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} MYP - SSL-Zertifikat-Generator ${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Parameter definieren
|
||||
CERT_DIR="./backend/instance/ssl"
|
||||
BACKEND_CERT_FILE="$CERT_DIR/myp.crt"
|
||||
BACKEND_KEY_FILE="$CERT_DIR/myp.key"
|
||||
FRONTEND_CERT_FILE="$CERT_DIR/frontend.crt"
|
||||
FRONTEND_KEY_FILE="$CERT_DIR/frontend.key"
|
||||
BACKEND_HOSTNAME="raspberrypi"
|
||||
FRONTEND_HOSTNAME="m040tbaraspi001.de040.corpintra.net"
|
||||
DAYS_VALID=3650 # 10 Jahre
|
||||
|
||||
# Hilfe-Funktion
|
||||
show_help() {
|
||||
echo "Verwendung: $0 [Optionen]"
|
||||
echo ""
|
||||
echo "Optionen:"
|
||||
echo " -d, --dir DIR Verzeichnis für Zertifikate (Standard: $CERT_DIR)"
|
||||
echo " --backend-host NAME Hostname für das Backend-Zertifikat (Standard: $BACKEND_HOSTNAME)"
|
||||
echo " --frontend-host NAME Hostname für das Frontend-Zertifikat (Standard: $FRONTEND_HOSTNAME)"
|
||||
echo " -v, --valid TAGE Gültigkeitsdauer in Tagen (Standard: $DAYS_VALID)"
|
||||
echo " --help Diese Hilfe anzeigen"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Argumente verarbeiten
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-d|--dir)
|
||||
CERT_DIR="$2"
|
||||
BACKEND_CERT_FILE="$CERT_DIR/myp.crt"
|
||||
BACKEND_KEY_FILE="$CERT_DIR/myp.key"
|
||||
FRONTEND_CERT_FILE="$CERT_DIR/frontend.crt"
|
||||
FRONTEND_KEY_FILE="$CERT_DIR/frontend.key"
|
||||
shift 2
|
||||
;;
|
||||
--backend-host)
|
||||
BACKEND_HOSTNAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
--frontend-host)
|
||||
FRONTEND_HOSTNAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
-v|--valid)
|
||||
DAYS_VALID="$2"
|
||||
shift 2
|
||||
;;
|
||||
--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Unbekannte Option: $1${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Header anzeigen
|
||||
print_header
|
||||
|
||||
# Überprüfen, ob das Skript mit Root-Rechten ausgeführt wird
|
||||
if [ "$EUID" -ne 0 ] && [ -n "$(which sudo)" ]; then
|
||||
echo -e "${YELLOW}Dieses Skript sollte idealerweise mit Root-Rechten ausgeführt werden.${NC}"
|
||||
echo -e "${YELLOW}Fahre trotzdem fort, aber es könnten Berechtigungsprobleme auftreten.${NC}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Verzeichnis erstellen, falls es nicht existiert
|
||||
if [ ! -d "$CERT_DIR" ]; then
|
||||
echo -e "${YELLOW}Erstelle Verzeichnis $CERT_DIR...${NC}"
|
||||
mkdir -p "$CERT_DIR"
|
||||
fi
|
||||
|
||||
# Überprüfen, ob openssl installiert ist
|
||||
if ! command -v openssl &> /dev/null; then
|
||||
echo -e "${RED}OpenSSL ist nicht installiert!${NC}"
|
||||
echo -e "${YELLOW}Installiere OpenSSL...${NC}"
|
||||
|
||||
# Paketmanager erkennen und OpenSSL installieren
|
||||
if command -v apt-get &> /dev/null; then
|
||||
sudo apt-get update && sudo apt-get install -y openssl
|
||||
elif command -v yum &> /dev/null; then
|
||||
sudo yum install -y openssl
|
||||
elif command -v dnf &> /dev/null; then
|
||||
sudo dnf install -y openssl
|
||||
elif command -v pacman &> /dev/null; then
|
||||
sudo pacman -S --noconfirm openssl
|
||||
elif command -v zypper &> /dev/null; then
|
||||
sudo zypper install -y openssl
|
||||
else
|
||||
echo -e "${RED}Konnte keinen bekannten Paketmanager finden. Bitte installieren Sie OpenSSL manuell.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Funktion zum Erstellen eines selbstsignierten Zertifikats
|
||||
create_self_signed_cert() {
|
||||
local cert_file=$1
|
||||
local key_file=$2
|
||||
local hostname=$3
|
||||
local days=$4
|
||||
|
||||
echo -e "${GREEN}Erstelle selbstsigniertes SSL-Zertifikat für $hostname...${NC}"
|
||||
|
||||
# OpenSSL-Konfiguration erstellen
|
||||
local config_file="$CERT_DIR/openssl_$(echo $hostname | cut -d'.' -f1).cnf"
|
||||
|
||||
cat > "$config_file" << EOF
|
||||
[req]
|
||||
default_bits = 2048
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
distinguished_name = req_distinguished_name
|
||||
x509_extensions = v3_req
|
||||
|
||||
[req_distinguished_name]
|
||||
C = DE
|
||||
ST = Berlin
|
||||
L = Berlin
|
||||
O = Mercedes-Benz AG
|
||||
OU = Werk 040 Berlin
|
||||
CN = $hostname
|
||||
|
||||
[v3_req]
|
||||
keyUsage = critical, digitalSignature, keyAgreement
|
||||
extendedKeyUsage = serverAuth
|
||||
subjectAltName = @alt_names
|
||||
|
||||
[alt_names]
|
||||
DNS.1 = $hostname
|
||||
DNS.2 = localhost
|
||||
IP.1 = 127.0.0.1
|
||||
EOF
|
||||
|
||||
# Zertifikat erstellen
|
||||
openssl req -x509 -nodes -days "$days" -newkey rsa:2048 \
|
||||
-keyout "$key_file" -out "$cert_file" \
|
||||
-config "$config_file"
|
||||
|
||||
# Berechtigungen setzen
|
||||
chmod 600 "$key_file"
|
||||
chmod 644 "$cert_file"
|
||||
|
||||
# Fingerprint anzeigen
|
||||
local fingerprint=$(openssl x509 -noout -fingerprint -sha256 -in "$cert_file")
|
||||
echo -e "${GREEN}Zertifikat erstellt: $cert_file${NC}"
|
||||
echo -e "${YELLOW}Fingerprint: $fingerprint${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Backend-Zertifikat erstellen
|
||||
create_self_signed_cert "$BACKEND_CERT_FILE" "$BACKEND_KEY_FILE" "$BACKEND_HOSTNAME" "$DAYS_VALID"
|
||||
|
||||
# Frontend-Zertifikat erstellen
|
||||
create_self_signed_cert "$FRONTEND_CERT_FILE" "$FRONTEND_KEY_FILE" "$FRONTEND_HOSTNAME" "$DAYS_VALID"
|
||||
|
||||
# Bestätigung und Hinweise
|
||||
echo -e "${GREEN}SSL-Zertifikate wurden erfolgreich erstellt!${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}Backend-Zertifikat: $BACKEND_CERT_FILE${NC}"
|
||||
echo -e "${CYAN}Frontend-Zertifikat: $FRONTEND_CERT_FILE${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Hinweise zur Verwendung:${NC}"
|
||||
echo "1. Stellen Sie sicher, dass die Zertifikatpfade in den Konfigurationsdateien korrekt sind."
|
||||
echo "2. Beim ersten Zugriff auf die Anwendung müssen Sie das Zertifikat im Browser akzeptieren."
|
||||
echo "3. In einer Produktionsumgebung sollten Sie offiziell signierte Zertifikate verwenden."
|
||||
echo ""
|
||||
echo -e "${BLUE}Starten Sie die Anwendung mit:${NC}"
|
||||
echo "docker-compose up -d"
|
@ -29,7 +29,7 @@ Write-Host "Hosts-Datei: $hostsFile" -ForegroundColor Cyan
|
||||
|
||||
# Prüfen, ob die Einträge bereits existieren
|
||||
$frontendEntry = Select-String -Path $hostsFile -Pattern "m040tbaraspi001.de040.corpintra.net" -Quiet
|
||||
$backendEntry = Select-String -Path $hostsFile -Pattern "raaspberry" -Quiet
|
||||
$backendEntry = Select-String -Path $hostsFile -Pattern "raspberrypi" -Quiet
|
||||
|
||||
# Einträge in die Hosts-Datei schreiben
|
||||
Write-Host "Aktualisiere Hosts-Datei..." -ForegroundColor Blue
|
||||
@ -48,7 +48,7 @@ if (-not $frontendEntry) {
|
||||
if (-not $backendEntry) {
|
||||
$hostsContent += ""
|
||||
$hostsContent += "# MYP Backend Host"
|
||||
$hostsContent += "$localIP raaspberry"
|
||||
$hostsContent += "$localIP raspberrypi"
|
||||
Write-Host "Backend-Hostname hinzugefügt" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Backend-Hostname ist bereits konfiguriert" -ForegroundColor Yellow
|
||||
@ -66,7 +66,7 @@ try {
|
||||
|
||||
Write-Host "Folgende Hostnamen sind jetzt konfiguriert:" -ForegroundColor Blue
|
||||
Write-Host " - Frontend: m040tbaraspi001.de040.corpintra.net" -ForegroundColor Yellow
|
||||
Write-Host " - Backend: raaspberry" -ForegroundColor Yellow
|
||||
Write-Host " - Backend: raspberrypi" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "Sie können nun die Anwendung mit folgendem Befehl starten:" -ForegroundColor Blue
|
||||
Write-Host "docker-compose up -d" -ForegroundColor Yellow
|
||||
|
@ -38,7 +38,7 @@ fi
|
||||
|
||||
# Prüfen, ob die Einträge bereits existieren
|
||||
FRONTEND_ENTRY=$(grep -c "m040tbaraspi001.de040.corpintra.net" ${HOSTS_FILE})
|
||||
BACKEND_ENTRY=$(grep -c "raaspberry" ${HOSTS_FILE})
|
||||
BACKEND_ENTRY=$(grep -c "raspberrypi" ${HOSTS_FILE})
|
||||
|
||||
# Einträge in die Hosts-Datei schreiben
|
||||
echo -e "${BLUE}Aktualisiere Hosts-Datei...${RESET}"
|
||||
@ -53,7 +53,7 @@ fi
|
||||
|
||||
if [ $BACKEND_ENTRY -eq 0 ]; then
|
||||
echo -e "\n# MYP Backend Host" >> ${HOSTS_FILE}
|
||||
echo "${LOCAL_IP} raaspberry" >> ${HOSTS_FILE}
|
||||
echo "${LOCAL_IP} raspberrypi" >> ${HOSTS_FILE}
|
||||
echo -e "${GREEN}Backend-Hostname hinzugefügt${RESET}"
|
||||
else
|
||||
echo -e "${YELLOW}Backend-Hostname ist bereits konfiguriert${RESET}"
|
||||
@ -63,7 +63,7 @@ echo ""
|
||||
echo -e "${GREEN}Konfiguration abgeschlossen!${RESET}"
|
||||
echo -e "${BLUE}Folgende Hostnamen sind jetzt konfiguriert:${RESET}"
|
||||
echo -e " - Frontend: ${YELLOW}m040tbaraspi001.de040.corpintra.net${RESET}"
|
||||
echo -e " - Backend: ${YELLOW}raaspberry${RESET}"
|
||||
echo -e " - Backend: ${YELLOW}raspberrypi${RESET}"
|
||||
echo ""
|
||||
echo -e "${BLUE}Sie können nun die Anwendung mit folgendem Befehl starten:${RESET}"
|
||||
echo -e "${YELLOW}docker-compose up -d${RESET}"
|
||||
|
Loading…
x
Reference in New Issue
Block a user