#!/bin/bash # Beispiel-Skript für externe Systeme zur Anbindung an die Dummy CA # Dieses Skript zeigt, wie man die API von einem externen System aus nutzt set -e CA_URL="${CA_URL:-http://localhost:8088}" # Farben für Output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${YELLOW}=== Dummy CA API - Externes System Beispiel ===${NC}" echo "" # Funktion: Health Check check_health() { echo "1. Prüfe Server-Verfügbarkeit..." HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$CA_URL/health") if [ "$HTTP_CODE" = "200" ]; then echo -e "${GREEN}✓ Server ist erreichbar${NC}" return 0 else echo -e "${RED}✗ Server nicht erreichbar (HTTP $HTTP_CODE)${NC}" return 1 fi } # Funktion: CSR einreichen submit_csr() { local csr_file="$1" local validity_days="${2:-365}" if [ ! -f "$csr_file" ]; then echo -e "${RED}✗ CSR-Datei nicht gefunden: $csr_file${NC}" return 1 fi echo "2. Reiche CSR ein..." # CSR Base64 kodieren CSR_B64=$(cat "$csr_file" | base64 -w 0) # CSR einreichen RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$CA_URL/csr" \ -H "Content-Type: application/json" \ -d "{ \"csr\": \"$CSR_B64\", \"action\": \"sign\", \"validity_days\": $validity_days }") HTTP_CODE=$(echo "$RESPONSE" | tail -n1) BODY=$(echo "$RESPONSE" | sed '$d') if [ "$HTTP_CODE" = "200" ]; then CERT_ID=$(echo "$BODY" | jq -r '.id') CERT_PEM=$(echo "$BODY" | jq -r '.certificate') # Zertifikat speichern echo "$CERT_PEM" > "certificate_${CERT_ID}.crt" echo -e "${GREEN}✓ CSR erfolgreich signiert${NC}" echo " Zertifikat-ID: $CERT_ID" echo " Zertifikat gespeichert in: certificate_${CERT_ID}.crt" echo "$CERT_ID" return 0 else echo -e "${RED}✗ Fehler beim Signieren (HTTP $HTTP_CODE)${NC}" echo "$BODY" | jq . 2>/dev/null || echo "$BODY" return 1 fi } # Funktion: Zertifikat abrufen get_certificate() { local cert_id="$1" if [ -z "$cert_id" ]; then echo -e "${RED}✗ Zertifikat-ID erforderlich${NC}" return 1 fi echo "3. Rufe Zertifikat ab (ID: $cert_id)..." RESPONSE=$(curl -s -w "\n%{http_code}" "$CA_URL/certificate/$cert_id") HTTP_CODE=$(echo "$RESPONSE" | tail -n1) BODY=$(echo "$RESPONSE" | sed '$d') if [ "$HTTP_CODE" = "200" ]; then CERT_PEM=$(echo "$BODY" | jq -r '.certificate') CREATED_AT=$(echo "$BODY" | jq -r '.created_at') echo -e "${GREEN}✓ Zertifikat abgerufen${NC}" echo " Erstellt am: $CREATED_AT" echo "$CERT_PEM" return 0 else echo -e "${RED}✗ Zertifikat nicht gefunden (HTTP $HTTP_CODE)${NC}" echo "$BODY" return 1 fi } # Funktion: Root-Zertifikat abrufen get_root_certificate() { echo "4. Rufe Root-Zertifikat ab..." ROOT_CERT=$(curl -s "$CA_URL/root") if [ -n "$ROOT_CERT" ]; then echo "$ROOT_CERT" > "root_ca.crt" echo -e "${GREEN}✓ Root-Zertifikat gespeichert in: root_ca.crt${NC}" return 0 else echo -e "${RED}✗ Fehler beim Abrufen des Root-Zertifikats${NC}" return 1 fi } # Hauptfunktion main() { # Health Check if ! check_health; then echo "" echo "Bitte starten Sie den Server mit: go run main.go" exit 1 fi echo "" # Wenn CSR-Datei als Argument übergeben wurde if [ -n "$1" ]; then CERT_ID=$(submit_csr "$1" "${2:-365}") echo "" if [ -n "$CERT_ID" ]; then get_certificate "$CERT_ID" > /dev/null echo "" fi else echo "Verwendung:" echo " $0 [validity_days]" echo "" echo "Beispiel:" echo " $0 request.csr 365" echo "" fi # Root-Zertifikat abrufen get_root_certificate echo "" echo -e "${YELLOW}=== Fertig ===${NC}" } # Skript ausführen main "$@"