19.04.2023

OpenSSL Server

Apache Webserver
Samba Server
eMail-Server
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
NTP Server / Client
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
Stunnel einrichten
MySQL-Server einrichten
Datensicherung auf Bandlaufwerk
Audio CDs in WAV umwandeln
CDs und DVD erstellen
Grafiken bearbeiten erstellen
FAX Versand und Empfang
Web und FTP Sites syncronisieren
Verschlüsselung von E-Mails und Dokumenten
Programm Übersicht
Datenrettung
Linux Terminalserver
PXE Boot
sonstige Programme

Navigation:

Links:
OpenSSL Handbuch
Perfect Forward Secrecy (PFS) - Postfix unf Dovecot
Nginx

SSL TestPages:
SSLLabs - SSL Server Test
https://observatory.mozilla.org/analyze.html?host=www.heise.de - Mozilla Sicherheitscheck für WebServer
SSL Analyse mit Python Script sslyze

Trustcenter:
CAcert - Root Zertifikat ist nicht im InternetBrowser enthalten

Datei Beschreibung
.pfx PKCS#12, kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten.
.p12 PKCS#12, kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten.
.pem Base64-kodiertes Zertifikat, umschlossen von „-----BEGIN CERTIFICATE-----“ und „-----END CERTIFICATE-----“
.p7b PKCS#7-signierte Datenstruktur ohne Dateninhalt, nur mit Zertifikat(en) oder Zertifikatsperrliste(n)
.p7c PKCS#7-signierte Datenstruktur ohne Dateninhalt, nur mit Zertifikat(en) oder Zertifikatsperrliste(n)
.der DER-kodiertes Zertifikat
.cer DER- oder Base64-kodiertes Zertifikat
.crt DER- oder Base64-kodiertes Zertifikat

Domain-Validierung (DV) - Zertifikat gehört der Domain, Betreiber wird nicht geprüft. Niedrige Sicherheitsanforderungen, Schloss Symbol wird im Browser gezeigt, im Zertifikat unter Organisation (O) ist nichts verzeichnet.
Organization Validation (OV) - Unternehmen die das Zertifikat ausstellen läst, muss in einem Unternehmensregister verzeichnet sein. Mittlere Sicherheitsanforderungen, Schloss Symbol wird im Browser gezeigt, im Zertifikat unter Organisation (O) ist der Besitzer eingetragen.
Extended Validation (EV) - Hohe Sicherheitsanforderungen, Schloss Symbol wird im Browser gezeigt und der Name der Organisation neben dem Schloss, im Zertifikat unter Organisation (O) und Organisationseinheit (OU) ist der Besitzer eingetragen. Wildcard-Zertifikate für die gesamte Domain sind nicht möglich.

 

Seitenanfang

Zertifikat ohne CA erstellen

Datei Beschreibung
server_key.pem private Schlüssel des Zertifikates
server.csr Certificate Signing Request (Zertifikatsregistrierungsanforderung), kann gelöscht werden
server.crt öffentliche Zertifikat

- privaten Schlüssel des Zertifikates erstellen

openssl genrsa -out server_key.pem 2048

- Zertifikat erstellen

openssl req -new -key server_key.pem -out server.csr
Country Name (2 letter code) [DE]:
State or Province Name (full name) [Germany]:
Locality Name (eg, city) [Springfield]:
Organization Name (eg, company) [(c) Local.zz]:
Organizational Unit Name (eg, section) [Local CA]:
Common Name (eg, YOUR name) [host.domain.tld]:
Email Address [ca@local.zz]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

wichtig ist der "Common Name", hier muss der "fully qualified domain name" (FQDN) eingetragen werden. z.B. bei einem Web-Server "www.domain.tld" oder bei einem Mail-Server "mail.domain.de" oder der DynDNS Name des Servers "host.dyndns.org".
"A challenge password" und "optional company name" kann man frei lassen.

- Zertifikat signieren

openssl x509 -req -days 3650 -in server.csr -out server.crt -signkey server_key.pem

Parameter
days 3650 - Gültigkeit des Zertifikates (10 Jahre)

- MS konformes PFX Zertifikat erstellen

openssl pkcs12 -export -inkey server_key.pem -in server.crt -out server.pfx

- Multidomain Zertifikat (SAN) erstellen siehe SAN

openssl x509 -req -days 3650 -in server.csr -signkey server_key.pem -text -extfile /etc/ssl/x509v3.cnf \
 -extensions x509v3_FQDN2 -out server.crt

PFX Datei für den Windows Import nach "Vertrauenswürdige Stammzertifizierungsstellen" erstellen.

openssl pkcs12 -export -inkey server_key.pem -in server.crt -out server.pfx

- Daten zum Zertifikat anzeigen

openssl x509 -noout -text -in server.crt

 

Seitenanfang

OpenSSL Certificate Authority ( CA ) einrichten

Konfigurationsdatei /etc/ssl/openssl.cnf
/usr/lib/ssl/openssl.cnf ist ein Symlink auf /etc/ssl/openssl.cnf

Datei Beschreibung
./CA/private/cakey.pem private Schlüssel der CA
./CA/cacert.pem öffentliche Zertifikat der CA
newreq.pem temporäre Datei der Zertifikatserstellung, kann gelöscht werden
newkey.pem private Schlüssel des Server Zertifikates
newcert.pem CA signiertes Server Zertifikat

1. Einträge in der openssl.cnf ändern

Parameter Wert
[ CA_default ]
default_days = 1825
default_md = sha256
[ req ]
default_bits = 4096
[ req_distinguished_name ]
dir =./CA
default_days = 3650
default_bits = 2048
countryName_default = DE
stateOrProvinceName_default = Germany
localityName_default = Springfield
0.organizationName_default = (c) Local.zz
organizationalUnitName_default = Local CA
commonName_default = host.domain.tld
emailAddress_default = ca@local.zz

2. in ein Verzeichnis wechseln, wo dann die neue CA erstellt werden soll.

cd /etc/ssl

3. eine neue CA erstellen (es wird ein Unterordner demoCA erstellt, je nach Einstellung in der /usr/lib/ssl/misc/CA.sh kann auch geändert werden)

/usr/lib/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 2048 bit RSA private key
.................................+++
..................................................................................................+++
writing new private key to './CA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [DE]:
State or Province Name (full name) [Germany]:
Organization Name (eg, company) [(a) Local.zz]:
Organizational Unit Name (eg, section) [(a) LocalCA]:
Common Name (e.g. server FQDN or YOUR name) [host.domain.tld]:(a) Local.zz CA
Email Address [ca@local.zz]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./CA/private/./cakey.pem:

(a) vor der Organisation soll dazu dienen, das das Zertifikat in der Zertifikatsliste immer oben steht.

das Script zum erstellen der CA ist unter /usr/lib/ssl/misc/CA.sh, oder als Perlscript /usr/lib/ssl/misc/CA.pl, wenn man aus den Sourcen installiert hat, liegen die Scripte unter /usr/local/ssl/misc

- PassPhrase für die CA setzen. Diese wird später beim signieren der Zertifikate benötigt.

Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

- die vorher definierte PassPhrase eingeben, dann wird die CA erstellt.

./CA/private/cakey.pem - private Schlüssel der CA
./CA/cacert.pem - öffentliche Zertifikat der CA, das CA-Zertifikat muss auf jeden Rechner kopiert werden, der Zertifikate verifizieren soll, die von der CA ausgestellt wurden. Der Privat-Key der CA darf niemals das privat Verzeichnis verlassen und muss root gehören und nur durch root lesbar sein.

Enter pass phrase for ./CA/private/./cakey.pem:

4. Zugriffsrechte setzen

chmod -R 0700 /etc/ssl/CA
Seitenanfang

Zertifikat mithilfe einer eigenen CA erstellen

1. in das Arbeitsverzeichnis wechseln

cd /etc/ssl

2. neues Zertifikat für einen Server erstellen, Datei newreq.pem und newkey.pem (PrivateKey) werden angelegt.
!!! Wichtig unter Common Name den vollqualifizierten Domainnamen des Servers angeben !!!.

/usr/lib/ssl/misc/CA.sh -newreq
Generating a 2048 bit RSA private key
.............+++
..............+++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
...
Common Name (e.g. server FQDN or YOUR name) [host.domain.tld]:server.domain.tld
...

Enter PEM pass phrase: - PassPhrase für den PrivateKey eingeben
!!! kann nicht leergelassen werden !!!, sonst muss beim starten des Servers, das Kennwort des Zertifikates eingegeben werden.

3. erstelltes Zertifikat newreq.pem signieren, Datei newcert.pem wird erstellt

/usr/lib/ssl/misc/CA.sh -sign
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:

Enter pass phrase for ./CA/private/cakey.pem: - PassPhrase der vorher erstellten CA eingeben.
Details zum Zertifikat werden angezeigt.

4. Zertifikat vom PEM nach PFX umwandeln

openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out server.pfx
Seitenanfang

Zertifikat mit einer Temporäre CA signieren

  1. CA Zertifikat erstellen
    openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem \
     -config /etc/ssl/openssl.cnf -newkey rsa:4096
  2. Server Zertifikat erstellen
    openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096
  3. Serverzertifikat von CA Zertifikat signieren
    openssl x509 -req -days 1825 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial \
     -in server-csr.pem -out server-cert.pem
  4. Server-Zertifikat als PFX exportieren
    openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem \
     -certfile root-cacert.pem -name "srv.domain.tld"
    server-cert.pfx		- PFX Server Zertifikat
    root-cacert.pem		- CA Zertifikat

Variante mit Multidomain Zertifikat (SAN)

Punkt 1 und 2 wie oben

  1. siehe Multidomain Zertifikat (SAN) einrichten zum erstellen der /etc/ssl/x509v3.cnf
    openssl x509 -req -extfile /etc/ssl/x509v3.cnf -extensions x509v3_FQDN2 -CAkeyform server-key.pem -CAform root-cacert.pem \
    -signkey server-key.pem -in server-csr.pem -out server.crt
  2. Serverzertifikat von CA Zertifikat signieren
    openssl x509 -days 1825 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial \
     -in server.crt -out server-cert.pem
  3. Server-Zertifikat als PFX exportieren
    openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem \
     -certfile root-cacert.pem -name "srv.domain.tld"
    server-cert.pfx		- PFX Server Zertifikat
    root-cacert.pem		- CA Zertifikat

 

Seitenanfang

Zertifikat für einen Apache Server bereitstellen

Apache mit SSL

- Zertifikate ins Apache Verzeichnis kopieren

cd /etc/ssl
cp newcert.pem /etc/apache2/ssl/host.domain.tld.pem
cp newkey.pem /etc/apache2/ssl/host.domain.tld.key
cp CA/cacert.pem /etc/apache2/ssl/cacert.pem
chmod 700 -R /etc/apache2/ssl

beim jedem Start/Restart des Apache Servers wird das Passwort des PrivateKeys der newkey.pem bzw. host.domain.tld.key abgefragt.

- PassPhrase aus der Key Datei entfernen

cd /etc/apache2/ssl/
openssl rsa -in host.domain.tld.key -out host.domain.tld.new.key
mv host.domain.tld.key host.domain.tld.old.key
mv host.domain.tld.new.key host.domain.tld.key
service apache2 restart

- Apache Server Konfiguration anpassen

SSL Modul aktivieren

a2enmod ssl

vHost Konfigurationsdatei anpassen

#/etc/apache2/sites-enabled/vhost
NameVirtualHost *:443
<VirtualHost *:443 >
...
# SSL aktivieren
 SSLEngine on
 SSLCertificateFile     /etc/apache2/ssl/host.domain.tld.pem	# Signiertes Server Zertifikat
 SSLCertificateKeyFile  /etc/apache2/ssl/host.domain.tld.key	# Privater Server Schlüssel
 SSLCACertificateFile   /etc/apache2/ssl/cacert.pem		# CA Zertifikat
</VirtualHost>

durch den Parameter SSLCACertificateFile wird das Zertifikat der CA dem Browser gleich mitgeliefert. Mit Firefox kann man dann auf Zertifikat herunterladen | Ansehen | Details unter Zertifizierungsherarchie die CA markieren und Export wählen. Das gespeicherte Zertifikat unter Einstellungen | Erweitert | Zertifikate | Zertifikate anzeigen | Zertifizierungsstellen dort Importieren wählen. Danach werden allen Zertifikaten der CA vertraut. Beim IE und Chrome geht das nur wenn man den Browser als Administrator startet, die HTTPS Seite aufrufen | Laden der Webseite fortsetzen | in der Adressleite auf Zertifikate | Zertifikate anzeigen | Zertifizierungspfad | CA markieren | Zertifikate anzeigen | Zertifikat installieren | Vertrauenswürdige Stammzertifizierungsstellen wählen.
In der /etc/apache2/mods-enabled/ssl.conf muß auch noch folgende Parameter gesetzt sein (ist aber Standard).

<IfModule mod_ssl.c>
...
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
...
</IfModule>

 

Apache Server neustarten

service apache2 restart

- /etc/ssl/CA/cacert.pem (Zertifikat der CA) alle für den Browser nicht benötigten Informationen aus dem Zertifikat entfernen.

openssl x509 -in /etc/ssl/CA/cacert.pem -out /etc/ssl/cacert.crt

die Datei cacert.crt speichern, diese kann dann im Browser in den Zertifikatsspeicher unter Vertrauenswürdige Stammzertifizierungsstellen oder bei Firefox als Zertifizierungsstellen importiert werden.

Seitenanfang

Multidomain Zertifikat (SAN) einrichten

Subject Alternative Name Wiki

- ins OpenSSL Verzeichnis wechseln und die CA erstellen.

cd /etc/ssl
/usr/lib/ssl/misc/CA.sh -newca

- Zertifikat für den Server erstellen, als CN wird nur der erste Host aus der Multidomain Liste eingetragen

/usr/lib/ssl/misc/CA.sh -newreq
Generating a 2048 bit RSA private key
...
Common Name:host.local.zz
...

- Datei x509v3.cnf erstellen, das Zertifikat mit den SAN Hosts erweitern und von der CA signieren lassen.

# /etc/ssl/x509v3.cnf
# zur Erstellung eines Multidomain Zertifikates (SAN)
#
CERTFQDN1 = host.local.zz
CERTFQDN2 = srv.local.zz
CERTFQDN3 = remote.host.de
CERTFQDN4 = autodiscover.host.de
[x509v3_FQDN2]
subjectAltName=DNS:$ENV::CERTFQDN1,DNS:$ENV::CERTFQDN2,DNS:$ENV::CERTFQDN3,DNS:$ENV::CERTFQDN4
openssl ca -policy policy_anything -extfile x509v3.cnf -extensions x509v3_FQDN2 -out server.crt -infiles newreq.pem

Windows .PFX konforme Zertifikate

- Server Zertifikat umwandeln

openssl pkcs12 -export -inkey newkey.pem -in server.crt -out server.pfx

- öffentliches Zertifikat der CA als PFX / P12 speichern

openssl pkcs12 -export -nokeys -in CA/cacert.pem -out cacert.pfx

Die Datei cacert.pfx unter Windows nach "Vertrauenswürdige Stammzertifizierungsstellen" importieren.

Seitenanfang

Diffie-Hellman Zertifikat für Perfect Forward Secrecy erstellen

- Diffie-Hellman Zertifikat erstellen

openssl dhparam -outform PEM -out dhparam2048.pem 2048

 

Seitenanfang

Konvertieren der Zertifikate

PEM nach PKCS12 / PFX

öffentliches und privates Zertifikat konvertieren

openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out certificate.p12

nur öffentliches Zertifikat konvertieren

openssl pkcs12 -export -nokeys -in CA/cacert.pem -out cacert.p12

öffentliches und privates Zertifikat von der CA zertifiziert konvertieren ins PKCS12 Format

openssl pkcs12 -export -inkey newkey.pem -in server.crt -certfile CA/cacert.pem -out server.pfx

PEM nach DER

öffentliches Zertifikat der CA konvertieren

openssl x509 -outform der -in CA/cacert.pem -out cacert.der

oder

openssl enc -d -base64 CA/cacert.pem -out cacert.der

PKCS12 / PFX nach PEM

öffentliches Client Zertifikat exportieren

openssl pkcs12 -nokeys -clcerts -in server.pfx -out siteclientcert.pem

öffentliches CA Zertifikat exportieren

openssl pkcs12 -nokeys -cacerts -in server.pfx -out cacert.pem

nur den private Key des Zertifikates exportieren

openssl pkcs12 -nocerts -in server.pfx -out sitekey.pem
Seitenanfang

Informationen des Zertifikates anzeigen / verifizieren

- Zertifikat komplett anzeigen

openssl x509 -noout -text -in server.crt

- Subject Zeile des Zertifikates anzeigen

openssl x509 -noout -subject -in CA/cacert.pem 

- Herausgeber des Zertifikates anzeigen

openssl x509 -noout -issuer -in <zertifikat.pem>

Herausgeber, Empfänger/Host, Datum/Zeitraum der Gültigkeit

openssl x509 -noout -issuer -subject -dates -in <zertifikat.pem>
echo -e 'HEAD /\n' | openssl s_client -connect mail.domain.tld:993 | openssl x509 -noout -dates

Gültigkeit des Zertifikates eines entfernten Servers anzeigen, im Beispiel eines IMAP Servers

echo QUIT | openssl s_client -connect mail.domain.tld:993 2>/dev/null | sed -ne '/BEGIN CERT/,/END CERT/p' \
| openssl x509 -noout -text | grep -A2 Validity

- Zertifikat überprüfen

openssl verify -CAfile /etc/ssl/CA/cacert.pem -verbose server.crt

 

Seitenanfang

Zertifikatsinstallation testen

- SSL Verbindungen testen, im Beispiel Clientverbindung HTTPS

openssl s_client -connect host.domain.tld:443

man kann damit auch SMTP, IMAP, POP3 u.a. testen.

openssl s_client -connect host.domain.tld:587
openssl s_client -connect host.domain.tld:993
openssl s_client -connect host.domain.tld:995

- SSL Verbindung vom Server testen, Beispiel HTTPS, Zertifikatsdateien müssen angegeben werden, Standardmäßig wird nur nach server.pem gesucht.

openssl s_server -accept 443 -key host.domain.tld.key -cert host.domain.tld.pem

 

Seitenanfang

Zertifikatsanfrage für Trustcenter erstellen

 

openssl req -newkey rsa:2048 -subj /CN=www.domain.tld -nodes -keyout www.domain.tld_key_.pem \
 -out www.domain.tld.csr.pem
cat www.domain.tld.csr.pem

alles ab "-----BEGIN CERTIFICATE-----" bis "-----END CERTIFICATE-----" kopieren und in die Server Zertifikatsmaske des Trustcenters einfügen.

 

Seitenanfang

mit openssl s_client Verbindungen prüfen

- Zertifikate des Servers anzeigen

openssl s_client -connect www.domain.tld:443 -showcerts
...
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
...

TLSv1.2 - Protokoll
ECDHE - Schlüsselaustausch (Key Agreement), Elliptische Kurven basierend auf Diffie Hellman
RSA - Authentifizierung des Servers (Authentication)
AES256-GCM - Symmetrische Verschlüsselung und Schlüssellänge (Symmetric Cipher and Key Size)
SHA384 - Hash Funktion zur Nachrichtenauthentifizierung (Hash Algorithm for Message Authentication)

- Zertifikatsausgabe wird unterdrückt

openssl s_client -connect www.domain.tld:https -quiet

- Verbindung auf TLSv1 Protokoll beschränken

openssl s_client -connect www.domain.tld:443 -tls1
...
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA

Protokolle die als Parameter angegeben werden können

-ssl2          - just use SSLv2
-ssl3          - just use SSLv3
-tls1_2        - just use TLSv1.2
-tls1_1        - just use TLSv1.1
-tls1          - just use TLSv1
-dtls1         - just use DTLSv1
-fallback_scsv - send TLS_FALLBACK_SCSV

-no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol

- Cipher Suite vorgeben

openssl s_client -connect www.domain.tld:443 -cipher 'ECDH:DH'

- STARTTLS Verbindungen prüfen

openssl s_client -connect mail.domain.tld:587 -starttls smtp
openssl s_client -connect mail.domain.tld:995 -starttls pop3
openssl s_client -connect mail.domain.tld:993 -starttls imap
openssl s_client -connect ftp.domain.tld:22 -starttls ftp

- Laufzeit des Zertifikates anzeigen

openssl s_client -connect mail.domain.tld:587 -starttls smtp 2>&- | openssl x509 -enddate -noout

 

Seitenanfang

sonstiges

- die Datei host.domain.tld.key noch editieren und

-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----

ersetzen durch

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----