first commit
This commit is contained in:
162
api_example.sh
Executable file
162
api_example.sh
Executable 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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user