Aufgabe
Alle Zertifikaten der Umgebung sollen über eine eigenen zentrale CA erstellt und abgewickelt werden.
Dazu werden die Zertifikate inkl. private Key auf der eigenen CA erstellt.
Eingesetzt wird dazu eine Oracle Linux 9 VM, Minimale Installation, die CA wird über den User Admin verwaltet und bedient.
Als Software wird OpenSSL und das Skript Framework Easy-RSA eingesetzt.
Vorbereitung : ol9_developer_EPEL Repo einrichten/aktiveren falls noch nicht aktiv!
Als Root:
dnf install oracle-epel-release-el9 dnf install easy-rsa openssl
Als root:
mkdir /srv/gpi_ca/ ln -s /usr/share/easy-rsa/3 /srv/gpi_ca/easy-rsa chown -R admin:admin gpi_ca/ chmod 700 gpi_ca/
Weiter als user admin!
CA anlegen mit easyrsa init-pki
cd /srv/gpi_ca/ ./easy-rsa/easyrsa init-pki Notice ------ 'init-pki' complete; you may now create a CA or requests. Your newly created PKI dir is: * /srv/gpi_ca/pki Using Easy-RSA configuration: * undefined
Die folgenden Verzeichnisse / Dateien werden am Ende ngelegt:
cd /srv/gpi_ca/pki # Konfiguration anlegen cp vars.example var vi vars set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "Hessen" set_var EASYRSA_REQ_CITY "Rossbach" set_var EASYRSA_REQ_ORG "GPI Consult" set_var EASYRSA_REQ_EMAIL "info@pipperr.de" set_var EASYRSA_REQ_OU "IT Department" set_var EASYRSA_KEY_SIZE 2048 set_var EASYRSA_ALGO ec # Define the named curve, used in ec & ed modes: # set_var EASYRSA_CURVE secp384r1 # In how many days should the root CA key expire? # set_var EASYRSA_CA_EXPIRE 3650 # In how many days should certificates expire? # set_var EASYRSA_CERT_EXPIRE 825 # How many days until the next CRL publish date? Note that the CRL can still # be parsed after this timeframe passes. It is only used for an expected next # publication date. # set_var EASYRSA_CRL_DAYS 180 # Random serial numbers by default. # Set to 'no' for the old incremental serial numbers. # set_var EASYRSA_RAND_SN "yes" # Cut-off window for checking expiring certificates. # set_var EASYRSA_PRE_EXPIRY_WINDOW 90 # Generate automatic subjectAltName for certificates # set_var EASYRSA_AUTO_SAN 1
CA generieren mit easyrsa build-ca
cd .. ./easy-rsa/easyrsa build-ca Using Easy-RSA 'vars' configuration: * /srv/gpi_ca/pki/vars Enter New CA Key Passphrase: Confirm New CA Key Passphrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:GPI.local CA Notice ------ CA creation complete. Your new CA certificate is at: * /srv/gpi_ca/pki/ca.crt Create an OpenVPN TLS-AUTH|TLS-CRYPT-V1 key now: See 'help gen-tls' Build-ca completed successfully.
Anzeigen lassen mit easyrsa show-ca:
Signature Algorithm: ecdsa-with-SHA256 Issuer: commonName = GPI.local CA Validity Not Before: Apr 30 11:13:01 2025 GMT Not After : Apr 28 11:13:01 2035 GMT Subject: commonName = GPI.local CA
Unter /srv/gpi_ca/pki liegt die Datei ca.crt mit dem öffentliche Zertifikat der CA.
In jede Komponente, die nun mit von der CA zertifizierten Diensten „reden“ will muss dieses Zertifikat jeweils importiert werden.
Diese Zertifikat stellen wir später zum einfachen Download bereit.
Unter /srv/gpi_ca/pki/private liegt die Datei ca.key mit dem privaten Schlüssel der CA. Dieser Schlüssel verbleibt auf unsere CA und darf nicht in die falschen Hände geraten.
cd /srv/gpi_ca/pki at index.txt V 270803114948Z 6A0720FE60E27FA608208C8AA54D9072 unknown /CN=podman23ai.local
Da ein Verlust der Schlüssel der CA sehr unangenehme Folgen hat sichern wir im Anschuss das gesamte CA Verzeichnis regelmäßig.
Auf unserer CA erzeugen wir den privaten Schlüssel für das System das wir schützen wollen, im Beispiel heißt der Server podman23ai.local in einem Schritt
cd /srv/gpi_ca ./easy-rsa/easyrsa build-server-full podman23ai.local nopass cd pki find . -name podman23ai* ./issued/podman23ai.local.crt ./private/podman23ai.local.key ./reqs/podman23ai.local.req ./inline/private/podman23ai.local.inline
SSL Zertifikat anzeigen lassen:
openssl x509 -in ./issued/podman23ai.local.crt -noout -text .. Certificate: Data: Version: 3 (0x2) Serial Number: 6a:07:20:fe:60:e2:7f:a6:08:20:8c:8a:a5:4d:90:72 Signature Algorithm: ecdsa-with-SHA256 Issuer: CN=GPI.local CA Validity Not Before: Apr 30 11:49:48 2025 GMT Not After : Aug 3 11:49:48 2027 GMT Subject: CN=podman23ai.local Subject Public Key Info: ... X509v3 Subject Alternative Name: DNS:podman23ai.local ...
In einem so angelegten Zertifikat ist auch der „Subject Alternative Name (SAN)“ gesetzt, diese Information ist seit min 2 Jahren zusätzlich immer notwendig!