first commit

This commit is contained in:
2025-11-20 13:30:08 +01:00
commit 6c83b95a7b
8 changed files with 1261 additions and 0 deletions

162
api_example.sh Executable file
View File

@@ -0,0 +1,162 @@
#!/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 <csr-datei> [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 "$@"