163 lines
4.1 KiB
Bash
Executable File
163 lines
4.1 KiB
Bash
Executable File
#!/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 "$@"
|
|
|