Intermediate-CA (OpenSSL)

Lesedauer: 6 Minuten

Die Intermediate Certification Authority (Intermediate-CA) bildet die operative Zertifizierungsstelle der internen Public Key Infrastructure (PKI). Sie dient der Ausstellung und Verwaltung von Server-, Client- und weiteren Endzertifikaten und wird durch die übergeordnete Offline Root-CA signiert. Im Gegensatz zur Root-CA übernimmt die Intermediate-CA den täglichen Zertifikatsbetrieb sowie die Erstellung von Certificate Revocation Lists (CRLs).

Durch die Trennung zwischen Offline Root-CA und operativer Intermediate-CA wird die sicherheitskritische Vertrauensbasis der PKI von den regulären Zertifikatsprozessen isoliert. Kompromittierungen oder Fehlkonfigurationen auf Ebene der Intermediate-CA betreffen ausschließlich die von ihr ausgestellten Zertifikate und können durch Widerruf sowie Neuausstellung der betroffenen Intermediate-CA kontrolliert eingegrenzt werden, ohne die gesamte PKI neu aufbauen zu müssen.

Ziel dieser Dokumentation ist die Beschreibung der Architektur, des Betriebsmodells sowie der technischen und sicherheitsrelevanten Anforderungen für Aufbau, Verwaltung und Absicherung einer operativen Intermediate-CA innerhalb der internen PKI-Infrastruktur.

Installation

Basis der folgenden Prozedur ist Ubuntu-Server 26.04 LTS

Installation benötigter Pakete

$ sudo apt install openssl opensc pcscd rng-tools -y

Verwendete Komponenten:

Siehe Artikel: Root-CA (OpenSSL)

Erstellung eines dedizierten PKI-Benutzers

Siehe Artikel: Root-CA (OpenSSL)

Erstellung der Intermediate-CA-Verzeichnisstruktur

Verzeichnisstruktur anlegen:

$ mkdir -p ~/intermediate-ca/{certs,crl,csr,newcerts,private,issued,chain}

Schutz des Schlüsselverzeichnisses:

$ chmod 700 ~/intermediate-ca/private

Initialisierung der OpenSSL-CA-Datenbank:

$ touch ~/intermediate-ca/index.txt
$ echo 1000 > ~/intermediate-ca/serial
$ echo 1000 > ~/intermediate-ca/crlnumber

Zweck der Verzeichnisstruktur

  • ~/intermediate-ca/certs: Speichert ausgestellte Zertifikate.
  • ~/intermediate-ca/crl: Speichert Certificate Revocation Lists (CRLs).
  • ~/intermediate-ca/newcerts: Von OpenSSL verwaltetes Archiv ausgestellter Zertifikate.
  • ~/intermediate-ca/private: Speicherort privater Schlüssel. Dieses Verzeichnis besitzt restriktive Zugriffsrechte.
  • ~/intermediate-ca/csr: Speicherort für Certificate Signing Requests.
  • ~/intermediate-ca/issued: Vorbereitendes Verzeichnis für später ausgestellte Endzertifikate.
  • ~/intermediate-ca/chain: Speichert Zertifikatsketten und CA-Chain-Dateien.

OpenSSL-CA-Datenbank

  • ~/intermediate-ca/index.txt: OpenSSL führt eine einfache Zertifikatsdatenbank zur Verwaltung ausgestellter Zertifikate. Die Datei enthält:
    • Seriennummern
    • Statusinformationen
    • Widerrufe
    • Ablaufdaten
  • ~/intermediate-ca/serial: Definiert die nächste zu verwendende Zertifikatsseriennummer.
  • ~/intermediate-ca/crlnumber: Definiert die nächste Versionsnummer für CRLs.

Erstellung der OpenSSL-Konfiguration

Konfigurationsdatei erstellen:

$ vi ~/intermediate-ca/openssl.cnf

Inhalt der Konfigurationsdatei:

[ ca ]
default_ca                     = CA_default

[ CA_default ]
dir                            = /home/pki/intermediate-ca
default_crl_days               = 30

certs                          = $dir/certs
crl_dir                        = $dir/crl
new_certs_dir                  = $dir/newcerts
database                       = $dir/index.txt

serial                         = $dir/serial
crlnumber                      = $dir/crlnumber

private_key                    = $dir/private/intermediate-ca.key.pem
certificate                    = $dir/certs/intermediate-ca.cert.pem

default_md                     = sha512

policy                         = policy_loose

email_in_dn                    = no
name_opt                       = ca_default
cert_opt                       = ca_default

copy_extensions                = copy

default_days                   = 825

[ policy_loose ]
countryName                    = optional
stateOrProvinceName            = optional
localityName                   = optional
organizationName               = optional
organizationalUnitName         = optional
commonName                     = supplied
emailAddress                   = optional

[ req ]
default_bits                   = 4096
distinguished_name             = req_distinguished_name
string_mask                    = utf8only
default_md                     = sha512
req_extensions                 = v3_intermediate_ca_req

[ req_distinguished_name ]
countryName                    = Country Name
countryName_default            = DE

organizationName               = Organization Name
organizationName_default       = Prontosystems

organizationalUnitName         = Organizational Unit Name
organizationalUnitName_default = PKI

commonName                     = Common Name
commonName_default             = Prontosystems Intermediate CA 01

[ v3_intermediate_ca ]
subjectKeyIdentifier           = hash
authorityKeyIdentifier         = keyid:always,issuer
basicConstraints               = critical, CA:true, pathlen:0
keyUsage                       = critical, cRLSign, keyCertSign

[ v3_intermediate_ca_req ]
subjectKeyIdentifier           = hash
basicConstraints               = critical, CA:true, pathlen:0
keyUsage                       = critical, cRLSign, keyCertSign

[ server_cert ]
basicConstraints               = CA:FALSE
nsCertType                     = server
nsComment                      = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier           = hash
authorityKeyIdentifier         = keyid,issuer
keyUsage                       = critical, digitalSignature, keyEncipherment
extendedKeyUsage               = serverAuth

[ client_cert ]
basicConstraints               = CA:FALSE
nsCertType                     = client
nsComment                      = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier           = hash
authorityKeyIdentifier         = keyid,issuer
keyUsage                       = critical, digitalSignature, keyEncipherment
extendedKeyUsage               = clientAuth

Wichtige Eigenschaften der Konfiguration:

  • policy_loose: Die Intermediate-CA arbeitet flexibler als die Root-CA. Dadurch können später unterschiedliche Server- und Clientzertifikate ausgestellt werden.
  • copy_extensions = copy: Diese Einstellung übernimmt Subject Alternative Names (SANs) aus späteren CSRs. Das ist für moderne TLS-Zertifikate zwingend erforderlich.
  • pathlen:0: (basicConstraints = critical, CA:true, pathlen:0) Diese Einstellung erlaubt der Intermediate-CA die Ausstellung von Endzertifikaten und die Signierung von CRLs. Verbietet jedoch die Signierung weiterer Unter-CAs. Dadurch wird die PKI-Hierarchie sicher begrenzt.
  • default_days = 825: Die maximale Laufzeit ausgestellter Endzertifikate wird auf 825 Tage begrenzt. Dies orientiert sich an modernen TLS-Empfehlungen.
  • default_crl_days = 30: Die erzeugte CRL besitzt eine Gültigkeit von 30 Tagen und muss anschließend erneuert werden.

Erstellung des privaten Intermediate-Schlüssels

Schlüsselgenerierung:

$ openssl genrsa -aes256 \
  -out ~/intermediate-ca/private/intermediate-ca.key.pem \
  4096

Zugriffsrechte setzen:

$ chmod 400 ~/intermediate-ca/private/intermediate-ca.key.pem

Zweck:

Dieses Kommando erzeugt:

  • einen RSA-4096-Privatschlüssel
  • AES-256-verschlüsselt

Der Schlüssel bildet die kryptographische Identität der Intermediate-CA.

Erstellung des Intermediate-CA-CSRs

CSR erzeugen:

$ openssl req \
  -config ~/intermediate-ca/openssl.cnf \
  -new -sha512 \
  -key ~/intermediate-ca/private/intermediate-ca.key.pem \
  -out ~/intermediate-ca/csr/intermediate-ca.csr.pem

Zweck:

Die Intermediate-CA erzeugt keinen selbstsignierten Zertifikatsdatensatz.

Stattdessen wird:

  • ein CSR erzeugt
  • anschließend durch die Offline Root-CA signiert

Dadurch entsteht die eigentliche Zertifikatskette.

Signierung durch die Offline Root-CA

Der CSR wird zur Root-CA übertragen. Der private Schlüssel verbleibt ausschließlich auf der Intermediate-CA. Die Root-CA hat für Intermediates ein eigenes Signaturprofil [ v3_intermediate_ca ] in der OpenSSL-Konfigurationsdatei.

Signierung des Intermediate-Zertifikats (auf Root-CA)

$ openssl ca \
  -config ~/root-ca/openssl.cnf \
  -extensions v3_intermediate_ca \
  -days 3650 \
  -notext -md sha512 \
  -in ~/root-ca/csr/intermediate-ca.csr.pem \
  -out ~/root-ca/certs/intermediate-ca.cert.pem

Import des Intermediate-Zertifikats

Intermediate-Zertifikat in Datei übernehmen:

~/intermediate-ca/certs/intermediate-ca.cert.pem

Root-Zertifikat in Datei übernehmen:

~/intermediate-ca/chain/root-ca.cert.pem

Erstellung der Zertifikatskette

Chain-Datei erzeugen:

$ cat ~/intermediate-ca/certs/intermediate-ca.cert.pem \
    ~/intermediate-ca/chain/root-ca.cert.pem \
    > ~/intermediate-ca/chain/ca-chain.cert.pem

Zweck:

Die Chain-Datei enthält in korrekter Reihenfolge:

  • Intermediate-Zertifikat
  • Root-Zertifikat

Diese Datei wird später für folgende Dienste verwendet:

  • für TLS-Dienste
  • Webserver
  • VPNs
  • Zertifikatsvalidierung

Verifikation der Zertifikatskette

Zertifikatsprüfung:

$ openssl verify \
  -CAfile ~/intermediate-ca/chain/root-ca.cert.pem \
  ~/intermediate-ca/certs/intermediate-ca.cert.pem

Erwartete Ausgabe:

/home/pki/intermediate-ca/certs/intermediate-ca.cert.pem: OK

Zweck:

Die Prüfung bestätigt:

  • korrekte Signatur
  • funktionierende Vertrauenskette
  • korrekte CA-Hierarchie

Erstellung der ersten Certificate Revocation List (CRL)

CRL erzeugen:

$ openssl ca \
  -config ~/intermediate-ca/openssl.cnf \
  -gencrl \
  -out ~/intermediate-ca/crl/intermediate-ca.crl.pem

CRL analysieren:

$ openssl crl \
  -in ~/intermediate-ca/crl/intermediate-ca.crl.pem \
  -noout -text

Zweck:

Die CRL dient der späteren Veröffentlichung widerrufener Zertifikate.

Die Intermediate-CA ist damit:

  • signierfähig
  • widerruffähig

und bildet eine vollständige operative CA-Basis.

Sicherheitsbetrachtung

Die Intermediate-CA sollte:

  • ausschließlich für operative Zertifikatsausstellung verwendet werden
  • regelmäßig gesichert werden
  • restriktiv administriert werden
  • nicht für allgemeine Systemadministration verwendet werden

Die Offline Root-CA sollte nach erfolgreicher Signierung wieder offline genommen werden.

Loading

Updated on 15. Mai 2026
Was this article helpful?

Related Articles