OpenSSL
Siehe auch
Der Parameter nodes
steht für „No DES“ und erstellt Keys ohne Passwörter (Keys sind also nicht encrypted).
Warnung
Das auf RHEL 7 vorhandene Shell-Script /etc/pki/tls/certs/make-dummy-cert
erstellt Zertifikate mit X509v3 Basic Constraints: CA:TRUE
Extension, also ein CA-Zertifikat. CA-Zertifikate lassen sich in Apache nicht (mehr) als Zertifikat für einen Virtual Host nutzen, der Apache bricht dann je nach Version den Reload mit SSL-Fehlern ab (AH01906: localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
).
Diese Art Zertifikate entstehen, wenn folgende Parameter verwendet werden:
openssl req \
-days 365 \
-keyout /etc/pki/tls/private/test.key \
-newkey rsa:2048 \
-nodes \
-out /etc/pki/tls/certs/test.pem \
-x509
(sehr viele Anleitungen im Internet nutzen OpenSSL genau so). Unsere Anleitung unten zeigt, wie man „echte“ self-signed Client-Zertifikate erzeugt.
DH Key erstellen
Wird für diverse Software wie OpenVPN & Co. benötigt. DH-Schlüssel werden zur Secret-Aushandlung über eine unsichere Verbindung verwendet, und können und sollten beispielsweise 1x pro Monat automatisch neu generiert werden.
openssl dhparam -out dh4096.pem 4096
openssl.cnf
Beispiel:
[ CA_default ]
dir = /etc/pki/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
crlnumber = $dir/crlnumber
crl = $dir/crl.pem
default_crl_days= 30
default_md = sha256
policy = policy_any
x509_extensions = usr_cert
[ crl_ext ]
authorityKeyIdentifier=keyid:always
[ req ]
default_bits = 4096
default_md = sha256
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = State
localityName = Locality Name (eg, city)
localityName_default = City
organizationName = Organization Name (eg, company)
organizationName_default = Organization
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Org Unit
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Root CA
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
Self-signed root-Zertifikat (CA Certificate) erstellen
Das hier erstellte CA-Zertifikat gilt 5 Jahre (1825 days).
openssl req \
-config openssl.cnf \
-days 1825 \
-keyout /etc/pki/tls/private/rootCA.key \
-new \
-newkey rsa:4096 \
-nodes \
-out /etc/pki/tls/certs/rootCA.pem \
-sha384 \
-utf8 \
-x509
chmod 0400 /etc/pki/tls/private/rootCA.key
chown root:root /etc/pki/tls/private/rootCA.key
Self-Signed Zertifikat erstellen
Self-Signed Zertifikat erstellen, und von eigener CA signieren lassen.
Das Zertifikat kommt ohne Passwort daher, sinnvoll z.B. für einen Web- oder DB-Server.
1.) Private Key (RSA 4096 bit) und CSR erstellen:
SERVERNAME='localhost'
SUBJECT="/C=CH/ST=Zurich/O=Linuxfabrik/CN=$SERVERNAME"
openssl req \
-keyout /etc/pki/tls/private/$SERVERNAME.key \
-newkey rsa:4096 \
-nodes \
-out $SERVERNAME.csr \
-sha384 \
-subj "$SUBJECT" \
-utf8
chmod 0400 /etc/pki/tls/private/$SERVERNAME.key
chown root:root /etc/pki/tls/private/$SERVERNAME.key
2.) Self-Signed-Zertifikat mit 90 Tagen Laufzeit erstellen und von eigener CA signieren lassen:
openssl x509 \
-CA /etc/pki/tls/certs/rootCA.pem \
-CAcreateserial \
-CAkey /etc/pki/tls/private/rootCA.key \
-days 90 \
-in $SERVERNAME.csr \
-out /etc/pki/tls/certs/$SERVERNAME.pem \
-req \
-sha384
Zertifikate überprüfen/ansehen
CA(-Chain) überprüfen:
CAFILE=/path/to/chain.pem
openssl verify $CAFILE
Zertifikat überprüfen:
CERT=/path/to/mycert.pem
openssl x509 \
-in $CERT \
-noout \
-text
Private Key überprüfen:
PRIVKEY=/path/to/priv.key
openssl rsa \
-check \
-in $PRIVKEY
CSR überprüfen:
CERT=/path/to/mycert.pem
openssl req \
-in $CERT \
-nameopt sep_multiline \
-noout \
-verify
PKCS12-Zertifikat überprüfen:
CERT=/path/to/mycert.pfx
openssl pkcs12 \
-in $CERT \
-info \
-nodes
Zertifikate umwandeln
PEM-Zertifikat mit Key in ein PKCS#12 (.pfx) ohne Passwort umwandeln:
openssl pkcs12 \
-certfile /etc/pki/tls/certs/rootCA.pem \
-export \
-in /etc/pki/tls/certs/$SERVERNAME.pem \
-inkey /etc/pki/tls/private/$SERVERNAME.key \
-out /etc/pki/tls/private/$SERVERNAME.pfx \
-passin pass: \
-passout pass:
PKCS#12 (.pfx) in PEM-Format exportieren:
openssl pkcs12 \
-in /etc/pki/tls/private/$SERVERNAME.pfx \
-info \
-nodes
# if you get errors like "Error outputting keys and certificates, envelope default library context, Algorithm (RC2-40-CBC : 0), Properties ()"
openssl pkcs12 \
-in /etc/pki/tls/private/$SERVERNAME.pfx \
-info \
-legacy \
-nodes
CRL ausstellen
openssl ca \
-gencrl \
-out crl.pem \
-utf8
Built on 2024-11-18