Ein eigenes Zertifikat mit OpenSSL erzeugen. Da der Aussteller dieser Zertifikate den Browsern oder Mailclienten nicht bekannt ist, werden diese solchen Zertifikaten per Standard auch nicht vertrauen. Man hat allerdings die Möglichkeit, das eigene CA Zertifikat in diese Programme zu importieren. Werden die Zertifikate aber auch von Dritten verwendet, müssten alle Beteiligten das entsprechende CA Zertifikat auf allen ihren Geräten und Clienten importieren. Dies ist wenig komfortabel und daher auch nicht praktikabel. Solche Zertifikate eignen sich somit hauptsächlich für Tests oder im privaten Bereich. Für öffentliche Webseiten oder Mailserver benötigt man eher ein offizielles Zertifikat.
Zu Beginn empfiehlt es sich ein eigenes Verzeichnis auf dem Linuxsystem zu erstellen um künftige Zertifikate darin zu sammeln:
localhost:~ # mkdir /opt/certs
localhost:~ # cd /opt/certs
Zuerst wird eine Ausstellerzertifikat erstellt. Mit diesem werden später alle technischen Zertifikate signiert. Dieses Zertifikat kann danach in die jeweiligen Programme (Browser, Mailclients) importiert werden um die Vertrauensstellung des Ausstellers zu verifizieren und somit dem eigentlichen Zertifikat zu vertrauen. Ein CA Zertifikat sollte lange gültig sein - wenigstens 10 Jahre und zwingend über ein gutes Passwort verfügen.
localhost:/opt/certs # openssl genrsa -aes256 -out meine-ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
........++++
..............................++++
e is 65537 (0x010001)
Enter pass phrase for meine-ca-key.pem:
Verifying - Enter pass phrase for meine-ca-key.pem:
localhost:/opt/certs # openssl req -x509 -new -nodes -extensions v3_ca -key meine-ca-key.pem -days 3650 -out meine-ca-root.pem -sha512
Enter pass phrase for meine-ca-key.pem:
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.
-----
Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:Switzerland
Locality Name (eg, city) []:Bern
Organization Name (eg, company) [Internet Widgits Pty Ltd]:WIZOnet Certificate Authority
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:test@domain.tld
Die beiden Dateien meine-ca-key.pem und mein meine-ca-root.pem werden danach zusammen mit dem Passwort sicher aufbewahrt, da sie für jedes neue Zertifikat wieder benötigt werden. Zum Importieren in die Clientprogramme wird nur die Datei meine-ca-root.pem benötigt - diese kann zu diesem Zweck Drittpersonen zugänglich gemacht werden.
Nun wird das eigentliche Serverzertifikat erstellt, welches z.B. der Webserver braucht um eine https:// Seite bereitzustellen. Ein Serverzertifikat sollte Heute immer mit einem 4096bit Key und SHA256 oder SHA512 erstellt werden, um über eine ausreichende Sicherheit zu verfügen.
localhost:/opt/certs # openssl genrsa -out newreq-key.pem 4096
Generating RSA private key, 4096 bit long modulus
.......................................................................................................++++
......................................................................++++
e is 65537 (0x010001)
localhost:/opt/certs # openssl req -new -key newreq-key.pem -out newreq.csr -sha512
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.
-----
Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:Switzerland
Locality Name (eg, city) []:Bern
Organization Name (eg, company) [Internet Widgits Pty Ltd]:WIZOnet Certificate Authority
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.meinewebseite.tld
Email Address []:webmaster@meineseite.tldPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Ganz wichtig hier ist der Common Name - hier muss die genaue URL der Webseite oder z.B. auch des Mailservers eingetragen werden. Stimmt die URL nicht mit dem Common Name überein, ist das Zertifikat nicht gültig! Ebenso sollte auf ein Passwort hier verzichtet werden, da sonst dieses Passwort jedesmal beim Neustart der Webservers von Hand eingegeben werden muss - ziemlich unpraktisch.
Zuletzt muss das neu erstellte Serverzertifikat noch mit dem CA Zertifikat signiert werden. Dabei wird auch eine Gültigkeitsdauer angegeben die im Normalfall zwischen einem und zwei Jahren liegt. Nach Ablauf dieser Frist wird das Serverzertifikat ungültig und muss neu erstellt und wieder signiert werden.
localhost:/opt/certs # openssl x509 -req -in newreq.csr -CA meine-ca-root.pem -CAkey meine-ca-key.pem -CAcreateserial -out newreq-pub.pem -days 720 -sha512
Signature ok
subject=C = CH, ST = Switzerland, L = Bern, O = WIZOnet Certificate Authority, CN = www.meinewebseite.tld, emailAddress = webmaster@meineseite.tld
Getting CA Private Key
Enter pass phrase for meine-ca-key.pem:
Damit ist die Zertifikatserstellung abgeschlossen. Nun ist es wichtig, den Zertifikatsdateien noch einen guten Namen zu geben um sie später einfach zu erkennen. Danach können sie in die Konfiguration des Serverdienstes eingetragen werden.
localhost:/opt/certs # mv newreq-pub.pem www.meinewebseite.tld.pub.pem
localhost:/opt/certs # mv newreq-key.pem www.meinewebseite.tld.key.pem
localhost:/opt/certs # rm newreq.csr
Man kann ein Zertifikat auch als Text ausgeben um die Daten darin anzuzeigen - so kann man einfach das Ablaufdatum und andere Daten darin prüfen.
localhost:/opt/certs # openssl x509 -noout -text -in www.meinewebseite.tld.pub.pem
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
aa:28:79:20:7d:48:24:1f
Signature Algorithm: sha512WithRSAEncryption
Issuer: C = CH, ST = Switzerland, L = Bern, O = WIZOnet Certificate Authority, emailAddress = test@domain.tld
Validity
Not Before: Mar 26 21:36:03 2020 GMT
Not After : Mar 16 21:36:03 2022 GMT
Subject: C = CH, ST = Switzerland, L = Bern, O = WIZOnet Certificate Authority, CN = www.meinewebseite.tld, emailAddress = webmaster@meineseite.tld
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:f1:c3:f8:7b:f8:51:71:6c:c2:d9:c9:fe:94:a1:
[....]