Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi2:ssl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Letzte Überarbeitung Beide Seiten, nächste Überarbeitung
lpi2:ssl [2014/06/27 07:07]
127.0.0.1 Externe Bearbeitung
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 =====
 +DH-Parameter erzeugen: ((https://​bettercrypto.org empfiehlt 4096 Bit))
 +  openssl dhparam -2 -out /​etc/​ssl/​dhparams.pem
 +
 +DH-Parameter ansehen:
 +  openssl dhparam -text -in /​etc/​ssl/​dhparams.pem
 +
 +Aufgabe: ​
 +  * 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 =====
-''/​etc/​ssl/​openssl.cnf''​ : ( SuSE 10.2, Debian 4.0 ) 
  
-''/​etc/​pki/​tls/​openssl.cnf''​ : ( CentOS 5 ) +  ​openssl ​req -new -newkey rsa -nodes -subj /C=DE/ST=NRW/L=Essen/O=Linuxhotel/​CN=notebook15.linuxhotel.de -keyout serverkey.pem -out serverreq.csr
-<​file>​ +
-[ req_distinguished_name ] +
-countryName_default ​            = DE +
-stateOrProvinceName_default ​    = NRW +
-localityName_default ​           ​= Essen +
-</file>+
  
-  openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout serverkey.pem -out servercert.pem +((https://​bettercrypto.org empfiehlt 4096 Bit))
- +
-<​file>​ +
-Country Name (2 letter code) [DE]: +
-State or Province Name (full name) [NRW]: +
-Locality Name (eg, city[Essen]: +
-Organization Name (eg, company[Linuxhotel]:​ +
-Organizational Unit Name (eg, section) []: +
-Common Name (eg, YOUR name) []:​notebook07.linuxhotel.de +
-Email Address []:​nutzer07@notebook07.linuxhotel.de +
-</​file>​+
  
 Schlüssel ansehen: Schlüssel ansehen:
   openssl rsa -in serverkey.pem -text   openssl rsa -in serverkey.pem -text
 +
 +Aufgaben: ​
 +  * welche Länge hat der Schlüssel?
 +  * wie lässt sich ein ECDSA Schlüssel erzeugen?
  
 Zertifikat ansehen: Zertifikat ansehen:
Zeile 30: Zeile 35:
  
 ===== Server Zertifikat und CA selbst bauen ===== ===== Server Zertifikat und CA selbst bauen =====
-==== Als root Vorgabewerte setzen ​==== +==== nutzer ca anlegen ==== 
-''/​etc/​ssl/​openssl.cnf''​ : ( SuSE 10.2, Debian 4.0 )+  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/​pki/​tls/​openssl.cnf''​ : ( CentOS 5 )+''/​etc/​pki/​tls/​openssl.cnf''​ : ( ab CentOS 5 )
  
 die folgenden Zeilen anpassen die folgenden Zeilen anpassen
Zeile 39: Zeile 48:
 [ ca ] [ ca ]
 default_ca ​   = CA_default default_ca ​   = CA_default
 +
 +
  
 [ CA_default ] [ CA_default ]
 dir             = ./​ca.linuxhotel.de dir             = ./​ca.linuxhotel.de
 certs           = $dir/certs certs           = $dir/certs
 +crl_dir ​        = $dir/crl
 database ​       = $dir/​index.txt database ​       = $dir/​index.txt
 new_certs_dir ​  = $dir/​newcerts new_certs_dir ​  = $dir/​newcerts
Zeile 50: Zeile 62:
 default_days ​   = 365 default_days ​   = 365
  
-req_distinguished_name ​+… 
-countryName ​                    = Country Name (2 letter code) + 
-countryName_default ​            = DE +# TODO: brauchen wir das? 
-stateOrProvinceName ​            = State or Province Name (full name) +#policy_match ​
-stateOrProvinceName_default ​    = NRW +#countryName ​            ​= ​optional 
-localityName ​                   ​Locality Name (eg, city) +#stateOrProvinceName ​    ​= ​optional 
-localityName_default ​           = Essen +#​organizationName ​       ​optional 
-0.organizationName ​             = Organization Name (eg, company) + 
-0.organizationName_default ​     ​Linuxhotel+ 
 + 
 +[ v3_ca ] 
 +… 
 +basicConstraints ​critical,​CA:​false
 </​file>​ </​file>​
  
-  useradd -s /bin/bash -m ca +Verzeichnisse und Dateien ​für die CA:
-==== Als Nutzer ca eine Beispiel CA erstellen ==== +
-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 70: Zeile 84:
   echo 01 > serial   echo 01 > serial
  
-Erzeugen eines Schluessels fuer die CA: +Erzeugen eines Schluessels fuer die CA: ((https://​bettercrypto.org empfiehlt 4096 Bit)) 
-  openssl genrsa -aes256 -out private/​cakey.pem ​4096+  openssl genrsa -aes256 -out private/​cakey.pem ​2048
  
 Erzeugen eines selbstsignierten Root-CA-Zertifikats:​ Erzeugen eines selbstsignierten Root-CA-Zertifikats:​
-  openssl req -new -x509 -days 3650 -sha256 ​-key private/​cakey.pem -out cacert.pem+  openssl req -new -x509 -sha512 ​-days 3650 -key private/​cakey.pem -out cacert.pem
 <​file>​ <​file>​
 Common Name (eg, YOUR name) []:​ca.linuxhotel.de Common Name (eg, YOUR name) []:​ca.linuxhotel.de
Zeile 88: Zeile 102:
   mkdir server-ssl   mkdir server-ssl
  
-Antrag und Schluessel fuer Server erzeugen: +Antrag und Schluessel fuer Server erzeugen: ​((https://​bettercrypto.org empfiehlt 4096 Bit)) 
-  openssl req -new -newkey rsa:2048 -nodes -sha256 ​-keyout server-ssl/​serverkey.pem -out server-ssl/​serverreq.pem +  openssl genrsa -out server-ssl/​serverkey.pem 2048 
-(( Todo: ''​-subj /​CN=<​your sever'​s address here>''​ ))+  openssl req -new -key server-ssl/​serverkey.pem -out server-ssl/​serverreq.csr 
 +oder 
 +  openssl req -new -newkey rsa:2048 -nodes -sha512 ​-keyout server-ssl/​serverkey.pem -out server-ssl/​serverreq.csr 
 +oder  
 +  openssl req -new -newkey rsa:2048 -nodes -sha512 -subj /​C=DE/​ST=NRW/​L=Essen/​O=Linuxhotel/​CN=notebook15.linuxhotel.de -keyout server-ssl/​serverkey.pem -out server-ssl/​serverreq.csr 
 +(( TODOmit ''​-subj''​ wird der Befehl nicht-interaktiv (d.h. keine Rückfragen),​ Beispiel: 
 +''​-subj /​C=DE/​ST=NRW/​L=Essen/​O=Linuxhotel/​CN=<​your sever'​s address here>'' ​ 
 +^Feld ^ Bedeutung ​               ^ Beispiel ​     ^ 
 +|/C=  | Country/​Staat ​           | DE            | 
 +|/ST= | State/​Bundesland ​        | NRW           | 
 +|/L=  | Location/​Ort ​            | Essen         | 
 +|/O=  | Organization/​Handelsname | Linuxhotel ​   | 
 +|/OU= | Organizational Unit      | Schulungs lab | 
 +|/CN= | Common Name              | example.com ​  | 
 +))
 <​file>​ <​file>​
 Common Name (eg, YOUR name) []:​notebook32.linuxhotel.de Common Name (eg, YOUR name) []:​notebook32.linuxhotel.de
 Email Address []:​root@notebook32.linuxhotel.de Email Address []:​root@notebook32.linuxhotel.de
 </​file>​ </​file>​
 +
 +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. ​
 +
 +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:
-  openssl req -in server-ssl/​serverreq.pem -noout -verify -key server-ssl/​serverkey.pem+  openssl req -in server-ssl/​serverreq.csr -noout -verify -key server-ssl/​serverkey.pem
  
 Antrag ansehen: Antrag ansehen:
-  openssl req -in server-ssl/​serverreq.pem -noout -text+  openssl req -in server-ssl/​serverreq.csr -noout -text
  
 Antrag an Nutzer ca senden: Antrag an Nutzer ca senden:
-  cp server-ssl/​serverreq.pem /home/ca+  cp server-ssl/​serverreq.csr /home/ca
  
 ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== ==== Als Nutzer ca das Server-Zertifikat unterschreiben ====
-  su - ca +Aus ''​man 8 ca'': ​ //The ca command is quirky and at times downright unfriendly. 
-  openssl ​ca -in serverreq.pem -out servercert.pem+The ca utility was originally meant as an example of how to do things in a CAIt was not supposed to be used as a full blown CA itself//
  
 +
 +  su - ca
 +  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
Zeile 123: Zeile 178:
 //openssl s_server muss noch laufen// //openssl s_server muss noch laufen//
   openssl s_client -connect localhost:​4433 -CAfile /​home/​ca/​ca.linuxhotel.de/​cacert.pem   openssl s_client -connect localhost:​4433 -CAfile /​home/​ca/​ca.linuxhotel.de/​cacert.pem
 +
 +
 +
 +=== in der Praxis ===
 +Audit-Tools:​
 +  sslscan linuxhotel.de
 +  testssl.sh linuxhotel.de
 +
 +Automatische Audits helfen die Konfiguration zu verbessern:
 +
 +  * https://​en.internet.nl
 +  * https://​www.ssllabs.com/​ssltest
 +  * https://​de.ssl-tools.net/​mailservers/​sys4.de
 +  * https://​dane.sys4.de/​
 +
 +===== Zertifikat widerufen =====
 +//Todo: noch nicht fertig//
 +  openssl ca -config example_root.conf -gencrl -keyfile privkey.pem \
 +    -cert example_root.cer -out example_root.crl.pem
 + ​openssl crl -inform PEM -in example_root.crl.pem -outform DER -out \
 +    example_root.crl && rm example_root.crl.pem
 +  su - ca
 +  echo 01 > crl
 +  openssl ca -revoke servercert.pem -keyfile serverkey.pem -cert xxx
  
 ===== Client Zertifikate bauen ===== ===== Client Zertifikate bauen =====
Zeile 139: Zeile 218:
  
 Antrag fuer Client-Zertifikat erzeugen: ( Todo: nicht sicher ob -extfile hier geht ... ) Antrag fuer Client-Zertifikat erzeugen: ( Todo: nicht sicher ob -extfile hier geht ... )
-  openssl req -extfile client.ext -new -key nutzer-key.pem -out nutzer-req.pem+  openssl req -extfile client.ext -new -key nutzer-key.pem -out nutzer-req.csr
 <​file>​ <​file>​
 Common Name (eg, YOUR name) []:​nutzer@notebook32.linuxhotel.de Common Name (eg, YOUR name) []:​nutzer@notebook32.linuxhotel.de
Zeile 200: Zeile 279:
 Antrag an Nutzer ca senden: Antrag an Nutzer ca senden:
   cp newreq.pem /home/ca/   cp newreq.pem /home/ca/
 +  (vormals: newreq.csr statt newreq.pem)
  
 ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== ==== Als Nutzer ca das Server-Zertifikat unterschreiben ====
Zeile 222: Zeile 302:
 Pakete: ''​gnutls-bin gnutls-doc''​ Pakete: ''​gnutls-bin gnutls-doc''​
  
-=== openSuSE 12.1 ===+=== openSuSE ​(ab 12.1===
 Pakete: ''​gnutls''​ Pakete: ''​gnutls''​
 +
 +===== Diffie Hellman Schlüsselaustausch vorbereiten =====
 +DH-Parameter erzeugen:
 +  certtool --generate-dh-params --outfile /​etc/​ssl/​dhparams.pem
 +
 +DH-Parameter ansehen:
 +  certtool --dh-info --infile /​etc/​ssl/​dhparams.pem
  
 ===== Selbstsignierte Server Zertifikate bauen ===== ===== Selbstsignierte Server Zertifikate bauen =====
Zeile 301: Zeile 388:
 Antrag und Schluessel für Server erzeugen: Antrag und Schluessel für Server erzeugen:
   certtool --generate-privkey --outfile server-ssl/​serverkey.pem   certtool --generate-privkey --outfile server-ssl/​serverkey.pem
-  certtool --generate-request --load-privkey server-ssl/​serverkey.pem --outfile server-ssl/​serverreq.pem+  certtool --generate-request --load-privkey server-ssl/​serverkey.pem --outfile server-ssl/​serverreq.csr
 <​file>​ <​file>​
 Country name (2 chars): DE Country name (2 chars): DE
Zeile 330: Zeile 417:
  
 Pruefen ob Antrag und Schluessel ok sind: Pruefen ob Antrag und Schluessel ok sind:
-  openssl req -in server-ssl/​serverreq.pem -noout -verify -key server-ssl/​serverkey.pem+  openssl req -in server-ssl/​serverreq.csr -noout -verify -key server-ssl/​serverkey.pem
  
 Antrag ansehen: Antrag ansehen:
-  openssl req -in server-ssl/​serverreq.pem -noout -text+  openssl req -in server-ssl/​serverreq.csr -noout -text
  
 Antrag an Nutzer ca senden: Antrag an Nutzer ca senden:
-  cp server-ssl/​serverreq.pem /home/ca +  cp server-ssl/​serverreq.csr /home/ca 
-  chmod a+r /​home/​ca/​serverreq.pem+  chmod a+r /​home/​ca/​serverreq.csr
  
 ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== ==== Als Nutzer ca das Server-Zertifikat unterschreiben ====
   su - ca   su - ca
-  certtool --generate-certificate --load-request serverreq.pem --outfile servercert.pem --load-ca-certificate ca.linuxhotel.de/​cacert.pem --load-ca-privkey ca.linuxhotel.de/​cakey.pem+  certtool --generate-certificate --load-request serverreq.csr --outfile servercert.pem --load-ca-certificate ca.linuxhotel.de/​cacert.pem --load-ca-privkey ca.linuxhotel.de/​cakey.pem
 <​file>​ <​file>​
 Enter the certificate'​s serial number in decimal (default: 1302213585): ​ Enter the certificate'​s serial number in decimal (default: 1302213585): ​
Zeile 421: Zeile 508:
   * [[ http://​www.cacert.org | caCert: kostenlose, Web-of-trust-basierte Zertifikate ]]   * [[ http://​www.cacert.org | caCert: kostenlose, Web-of-trust-basierte Zertifikate ]]
   * [[ http://​portecle.sourceforge.net/​ | portecle: GUI application for creating, managing and examining keystores, keys, certificates,​ certificate requests, certificate revocation lists and more. ]]    * [[ http://​portecle.sourceforge.net/​ | portecle: GUI application for creating, managing and examining keystores, keys, certificates,​ certificate requests, certificate revocation lists and more. ]] 
 +  * http://​math.cmu.edu/​~svasey/​old-homepage-archive-2013/​projects/​software-usage-notes/​ssl_en.html
 +
  
lpi2/ssl.txt · Zuletzt geändert: 2024/03/21 16:48 von sven_ruess