Files
certigo-dummy-ca/README.md
2025-11-20 13:30:08 +01:00

3.2 KiB

Dummy CA - Certificate Authority in Go

Eine einfache Certificate Authority (CA) in Go, die über eine REST-API Certificate Signing Requests (CSR) entgegennimmt, signiert und Zertifikate bereitstellt.

Features

  • Automatische Generierung eines Root-Zertifikats beim Start
  • REST-API zum Einreichen und Signieren von CSRs
  • Abruf von signierten Zertifikaten über GET-Request
  • Abruf des Root-Zertifikats

Installation

go mod download

Starten

go run main.go

Der Server läuft standardmäßig auf Port 8088.

API-Endpunkte

POST /csr

Reicht einen CSR ein und lässt ihn signieren.

Request Body:

{
  "csr": "BASE64_ENCODED_CSR_PEM",
  "action": "sign",
  "validity_days": 365
}

Response:

{
  "id": "zertifikat-id",
  "status": "success",
  "message": "CSR erfolgreich signiert",
  "certificate": "-----BEGIN CERTIFICATE-----\n..."
}

GET /certificate/{id}

Ruft ein signiertes Zertifikat anhand der ID ab.

Response:

{
  "id": "zertifikat-id",
  "certificate": "-----BEGIN CERTIFICATE-----\n...",
  "created_at": "2024-01-01T12:00:00Z"
}

GET /root

Ruft das Root-Zertifikat der CA ab (PEM-Format).

GET /health

Health-Check-Endpunkt.

Beispiel: CSR erstellen und einreichen

1. CSR erstellen

# Private Key generieren
openssl genrsa -out private.key 2048

# CSR erstellen
openssl req -new -key private.key -out request.csr -subj "/CN=example.com"

2. CSR in Base64 kodieren

# CSR in Base64 kodieren
CSR_B64=$(cat request.csr | base64 -w 0)

3. CSR an die CA senden

curl -X POST http://localhost:8088/csr \
  -H "Content-Type: application/json" \
  -d "{
    \"csr\": \"$CSR_B64\",
    \"action\": \"sign\",
    \"validity_days\": 365
  }"

4. Zertifikat abrufen

# Mit der ID aus der vorherigen Antwort
curl http://localhost:8088/certificate/{id}

5. Root-Zertifikat abrufen

curl http://localhost:8088/root > root.crt

Beispiel-Skript

Ein Beispiel-Skript zum Testen der API:

#!/bin/bash

# 1. Private Key und CSR erstellen
openssl genrsa -out test.key 2048
openssl req -new -key test.key -out test.csr -subj "/CN=test.example.com"

# 2. CSR kodieren und einreichen
CSR_B64=$(cat test.csr | base64 -w 0)
RESPONSE=$(curl -s -X POST http://localhost:8088/csr \
  -H "Content-Type: application/json" \
  -d "{
    \"csr\": \"$CSR_B64\",
    \"action\": \"sign\",
    \"validity_days\": 365
  }")

# 3. Zertifikat-ID extrahieren
CERT_ID=$(echo $RESPONSE | jq -r '.id')
echo "Zertifikat-ID: $CERT_ID"

# 4. Zertifikat abrufen
curl -s http://localhost:8088/certificate/$CERT_ID | jq -r '.certificate' > test.crt

# 5. Zertifikat verifizieren
openssl x509 -in test.crt -text -noout

Technische Details

  • Root-Zertifikat: 2048-bit RSA, 10 Jahre Gültigkeit
  • Signierte Zertifikate: Standardmäßig 365 Tage Gültigkeit (konfigurierbar)
  • Zertifikat-Speicher: In-Memory (verloren nach Neustart)
  • Serialnummern: Automatisch inkrementiert

Sicherheitshinweise

⚠️ Diese CA ist nur für Test- und Entwicklungszwecke gedacht!

  • Keine Persistierung der Zertifikate
  • Keine Authentifizierung der API
  • Keine Validierung der CSR-Inhalte
  • Nicht für Produktionsumgebungen geeignet