In internen Netzwerken oder Entwicklungsumgebungen willst du oft Zertifikate nutzen, ohne jedes Mal Let's Encrypt oder eine externe CA bemühen zu müssen. Mit OpenSSL kannst du dir ganz einfach eigene Zertifikate erstellen – und mit dem richtigen Script sogar noch komfortabler.
Ich zeige dir, wie du mit einem interaktiven Menü-Script Zertifikate per Auswahlmenü erstellen und verwalten kannst – ohne langes Tippen und Nachschlagen. Ich nutze es selbst Zuhause, im Home-Lab oder wenn ich im Unternehmen z.b. ein neues Zertifkat erstellen muss.
Das Script nimmt dir den kompletten Ablauf ab: "erstellen der eigenen CA" und "ausstellen der Domains":
Eigene Certificate Authority (CA) erstellen
SSL-Zertifikate für beliebige Domains ausstellen (z. B.
test.meyda-it.lan
)Die eigene CA direkt in den Linux-Truststore importieren oder in Windows (lokal oder per GPOs
Mit dem cert-menu.sh
-Script hast du ein mächtiges Werkzeug, um eigene Zertifikate unter Linux komfortabel zu erstellen – ohne ständig openssl
-Syntax nachzuschlagen. Perfekt für Devs, Admins oder Bastler:innen, die lokale Sicherheit ernst nehmen.
Das Script wie wie folgt aufgebaut, hier ist der komplette Code. Du kannst ihn direkt in eine Datei kopieren:
#!/bin/bash
WORKDIR="$HOME/certs"
mkdir -p "$WORKDIR"
cd "$WORKDIR" || exit 1
CA_KEY="myCA.key"
CA_CERT="myCA.pem"
create_ca() {
echo "🔐 CA wird erstellt..."
openssl genrsa -out "$CA_KEY" 2048
openssl req -x509 -new -nodes -key "$CA_KEY" -sha256 -days 1825 -out "$CA_CERT"
echo "✅ CA erstellt: $CA_CERT"
}
create_cert() {
read -rp "🌐 Gib den Domainnamen ein (z. B. test.meyda-it.lan): " DOMAIN
[ -z "$DOMAIN" ] && echo "❌ Kein Domainname angegeben." && return
KEY="$DOMAIN.key"
CSR="$DOMAIN.csr"
EXT="$DOMAIN.ext"
CRT="$DOMAIN.crt"
openssl genrsa -out "$KEY" 2048
openssl req -new -key "$KEY" -out "$CSR"
cat > "$EXT" <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
EOF
openssl x509 -req -in "$CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \
-out "$CRT" -days 825 -sha256 -extfile "$EXT"
echo "✅ Zertifikat erstellt: $CRT"
}
trust_ca_linux() {
echo "🔧 CA-Zertifikat wird zum System-Truststore hinzugefügt (Linux)..."
sudo cp "$CA_CERT" /usr/local/share/ca-certificates/myCA.crt
sudo update-ca-certificates
echo "✅ CA-Zertifikat wurde dem Truststore hinzugefügt."
}
menu() {
while true; do
echo ""
echo "==== Zertifikat-Manager ===="
echo "1) Eigene CA erstellen"
echo "2) Zertifikat für Domain erstellen"
echo "3) CA als vertrauenswürdig einrichten (Linux)"
echo "4) Beenden"
echo "============================"
read -rp "Wähle eine Option [1-4]: " CHOICE
case "$CHOICE" in
1) create_ca ;;
2) create_cert ;;
3) trust_ca_linux ;;
4) echo "👋 Tschüss!" && exit 0 ;;
*) echo "❌ Ungültige Auswahl." ;;
esac
done
}
Erstelle eine Datei:
nano cert-menu.sh
Füge den Code ein und speichere.
Mach das Script ausführbar:
chmod +x cert-menu.sh
Starte das Menü:
./cert-menu.sh
Das Script verwendet openssl
, um:
CA-Schlüssel (
myCA.key
) und CA-Zertifikat (myCA.pem
) zu erzeugenFür jede Domain ein Schlüsselpaar zu generieren
Den CSR zu signieren, dabei
subjectAltName
zu berücksichtigenEin
.ext
-File zu erstellen, das den SAN-Eintrag (DNS.1
) enthält
So erzeugst du gültige Zertifikate, die in modernen Browsern nicht direkt als unsicher eingestuft werden – sofern deine CA als vertrauenswürdig installiert ist.
Damit z. B. dein Browser oder deine lokale App die Zertifikate akzeptiert, musst du die CA importieren:
sudo cp myCA.pem /usr/local/share/ca-certificates/myCA.crt
sudo update-ca-certificates
Danach vertraut dein System den Zertifikaten, die du mit dieser CA erstellst.
CA-Zertifikat unter Windows vertrauenswürdig machen
Wenn du dein eigenes Zertifikat auf einem Windows-Rechner verwenden willst – z. B. im Browser, für lokale HTTPS-Services oder interne Tools – musst du deine CA einmalig als vertrauenswürdig im System hinterlegen. Hierfür habe ich eine kurze PDF-Anleitung erstellt. Diese findest du mit im *.ZIP Paket.