Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung | Letzte Überarbeitung Beide Seiten, nächste Überarbeitung | ||
lpi2:ssl [2018/08/10 11:25] ingo_wichmann [Diffie Hellman Schlüsselaustausch vorbereiten] |
lpi2:ssl [2020/03/04 10:12] 127.0.0.1 Externe Bearbeitung |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | TODO: Lösung auf Basis von CFSSL, Boulder oder Consul evaluieren (( https://www.heise.de/select/ix/2019/1/1545992707007070 )) | ||
+ | |||
+ | ====== Links ====== | ||
+ | * [[https://crt.sh|Log aller ausgestellten Zertifikate]] | ||
+ | |||
====== OpenSSL ====== | ====== OpenSSL ====== | ||
===== Diffie Hellman Schlüsselaustausch vorbereiten ===== | ===== Diffie Hellman Schlüsselaustausch vorbereiten ===== | ||
Zeile 10: | Zeile 15: | ||
* welche Bitlänge haben die Diffie Hellman Parameter? | * welche Bitlänge haben die Diffie Hellman Parameter? | ||
+ | Doku: | ||
+ | * https://blog.zeit.de/mathe/allgemein/daten-verschluesselung-mathe/ | ||
+ | * https://weakdh.org/sysadmin.html | ||
===== Selbstsignierte Server Zertifikate bauen ===== | ===== Selbstsignierte Server Zertifikate bauen ===== | ||
Zeile 27: | Zeile 35: | ||
===== Server Zertifikat und CA selbst bauen ===== | ===== Server Zertifikat und CA selbst bauen ===== | ||
- | ==== Als root Vorgabewerte setzen ==== | + | ==== nutzer ca anlegen ==== |
+ | useradd -s /bin/bash -m ca | ||
+ | ==== Als Nutzer ca eine Beispiel CA erstellen ==== | ||
+ | TODO: ca und intermediate-ca bauen. ca signiert nur intermediate-ca. intermediate-ca signiert server-zertifikate. | ||
+ | |||
''/etc/ssl/openssl.cnf'' : ( SuSE 10.2, ab Debian 4.0 ) | ''/etc/ssl/openssl.cnf'' : ( SuSE 10.2, ab Debian 4.0 ) | ||
Zeile 52: | Zeile 64: | ||
… | … | ||
- | [ policy_match ] | + | # TODO: brauchen wir das? |
- | countryName = optional | + | #[ policy_match ] |
- | stateOrProvinceName = optional | + | #countryName = optional |
- | organizationName = optional | + | #stateOrProvinceName = optional |
+ | #organizationName = optional | ||
… | … | ||
- | [ req_distinguished_name ] | + | [ v3_ca ] |
- | countryName = Country Name (2 letter code) | + | … |
- | countryName_default = DE | + | basicConstraints = critical,CA:false |
- | stateOrProvinceName = State or Province Name (full name) | + | |
- | stateOrProvinceName_default = NRW | + | |
- | localityName = Locality Name (eg, city) | + | |
- | localityName_default = Essen | + | |
- | 0.organizationName = Organization Name (eg, company) | + | |
- | 0.organizationName_default = Linuxhotel | + | |
</file> | </file> | ||
- | useradd -s /bin/bash -m ca | + | Verzeichnisse und Dateien für die CA: |
- | ==== Als Nutzer ca eine Beispiel CA erstellen ==== | + | |
- | TODO: ca und intermediate-ca bauen. ca signiert nur intermediate-ca. intermediate-ca signiert server-zertifikate. | + | |
- | + | ||
- | Verzeichnisse und Dateien fuer die CA: | + | |
su - ca | su - ca | ||
mkdir -p ca.linuxhotel.de/{private,newcerts} | mkdir -p ca.linuxhotel.de/{private,newcerts} | ||
Zeile 124: | Zeile 126: | ||
Im Feld "Common Name" muss der korrekte DNS-Name des Servers eingetragen werden. Für Wildcard-Zertifikate muss an Stelle des Hostnamens ein ''*'' (z.B. ''*.example.com'') eingetragen werden. Soll das Wildcard-Zertifikat zusätzlich auch die übergeordnete Domain (z.B. ''example.com'') abdecken, dann muss man diesen Namen als ''subjectAltName'' hinzufügen, wie [[apache-ssl#ssl_tls_und_name_based_virtual_hosts]] beschrieben. | Im Feld "Common Name" muss der korrekte DNS-Name des Servers eingetragen werden. Für Wildcard-Zertifikate muss an Stelle des Hostnamens ein ''*'' (z.B. ''*.example.com'') eingetragen werden. Soll das Wildcard-Zertifikat zusätzlich auch die übergeordnete Domain (z.B. ''example.com'') abdecken, dann muss man diesen Namen als ''subjectAltName'' hinzufügen, wie [[apache-ssl#ssl_tls_und_name_based_virtual_hosts]] beschrieben. | ||
- | openssl req -new -newkey rsa:2048 -nodes -sha512 -subj /C=DE/ST=NRW/L=Essen/O=Linuxhotel/CN=notebook15.linuxhotel.de/subjectAltName=DNS.1=notebook15.linuxhotel.de,DNS.2=*.notebook15.linuxhotel.de -keyout server-ssl/serverkey.pem -out server-ssl/serverreq.csr | + | Version 1.1.1 von openssl verspricht mit dem Schalter ''-addext 'subjectAltName = DNS:*.notebook15.linuxhotel.de, DNS:notebook15.linuxhotel.de' '' erstmals eine übersichtliche Lösung für das Problem (TODO: testen). Bis dahin brauchen wir für den Request eine eigene Konfigurationsdatei: |
+ | <file txt subjectAltName-openssl.cnf> | ||
+ | [req] | ||
+ | prompt = no | ||
+ | req_extensions = ext | ||
+ | distinguished_name = dn | ||
+ | [dn] | ||
+ | CN=z22.test | ||
+ | C=DE | ||
+ | ST=NRW | ||
+ | L=Essen | ||
+ | O=Linuxhotel | ||
+ | |||
+ | [ext] | ||
+ | subjectAltName = DNS:*.z22.test,DNS:z22.test | ||
+ | </file> | ||
+ | openssl req -new -newkey rsa:2048 -nodes -sha512 -config subjectAltName-openssl.cnf -keyout server-ssl/serverkey.pem -out server-ssl/serverreq.csr | ||
Pruefen ob Antrag und Schlüssel ok sind: | Pruefen ob Antrag und Schlüssel ok sind: | ||
Zeile 137: | Zeile 155: | ||
==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== | ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== | ||
+ | Aus ''man 8 ca'': //The ca command is quirky and at times downright unfriendly. | ||
+ | The ca utility was originally meant as an example of how to do things in a CA. It was not supposed to be used as a full blown CA itself// | ||
+ | |||
+ | |||
su - ca | su - ca | ||
openssl ca -in serverreq.csr -out servercert.pem | openssl ca -in serverreq.csr -out servercert.pem | ||
+ | oder mit X509v3 extensions (z.B. für Subject Alternative Name) | ||
+ | openssl ca -extensions v3_ca -in serverreq.csr -out servercert.pem | ||
+ | | ||
Anzeigen des Server-Zertifikats: | Anzeigen des Server-Zertifikats: | ||
openssl x509 -in servercert.pem -text | less | openssl x509 -in servercert.pem -text | less |