selfsign_ca
CA-gestützte Erstellung selbst-signierter X.509-Zertifikate mit Python cryptography.
Funktionsweise
Beim ersten Aufruf wird automatisch eine Root-CA erstellt (crt/ca.key + crt/ca.crt). Alle weiteren Zertifikate werden von dieser CA signiert. Existiert die CA bereits, wird sie wiederverwendet.
Jedes Zertifikat wird als Trio abgelegt:
| Datei | Inhalt |
|---|---|
crt/<name>.key |
RSA-2048 Private Key (PEM) |
crt/<name>.crt |
X.509-Zertifikat, signiert von der CA |
crt/<name>-chain.crt |
Server-Zertifikat + CA-Zertifikat (Chain) |
Abhängigkeiten
pip install cryptography
Verwendung
Direktaufruf
python selfsign_ca.py
Erzeugt eine CA (falls nicht vorhanden) und das Zertifikat test.* mit den im __main__-Block hinterlegten Defaults.
Als Modul
from selfsign_ca import generate_and_save_cert
generate_and_save_cert(
cert_country="DE",
cert_state="Berlin",
cert_organization="Meine GmbH",
cert_locality="Berlin",
cert_organizational_unit="IT",
cert_common_name="myserver.local",
valid_days=365,
serial_number=100,
cert_name="myserver",
)
CA-Parameter (optional)
Die CA-Daten werden nur beim ersten Erstellen der CA verwendet. Überschreiben via:
generate_and_save_cert(
...,
ca_country="DE",
ca_state="Sachsen",
ca_organization="IchAG",
ca_locality="Dresden",
ca_common_name="My Root CA",
)
Zertifikat prüfen
openssl verify -CAfile crt/ca.crt crt/<name>.crt
openssl x509 -in crt/<name>.crt -text -noout
CA auf Clients importieren (Vertrauen)
Damit Clients dem Zertifikat vertrauen, muss crt/ca.crt im Trust-Store hinterlegt werden:
# Arch/Manjaro
sudo trust anchor crt/ca.crt
# Debian/Ubuntu
sudo cp crt/ca.crt /usr/local/share/ca-certificates/my-ca.crt
sudo update-ca-certificates
Technische Details
- CA: RSA 4096 Bit, SHA256, 10 Jahre gültig,
basicConstraints: CA:TRUE - Endzertifikat: RSA 2048 Bit, SHA256, Gültigkeit nach
valid_days,basicConstraints: CA:FALSE - X.509 v3 Extensions:
BasicConstraints,KeyUsage,SubjectKeyIdentifier,AuthorityKeyIdentifier - Alle Dateien landen im Unterverzeichnis
crt/(wird automatisch angelegt)