Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi2:ssl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
lpi2:ssl [2014/06/30 11:25] – ingo_wichmannlpi2:ssl [2026/05/28 15:06] (aktuell) – ingo_wichmann
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]]
 +  * [[https://www.feistyduck.com/library/openssl-cookbook/online/|OpenSSL Cookbook by Ivan Ristić/Feisty Duck]]
 +  * Kryptografie Grundlagen: https://www.cryptool.org/de/
 +
 ====== 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:4096bits -sha512 -x509 -nodes -subj /C=DE/ST=NRW/L=Essen/O=Linuxhotel/CN=notebook15.linuxhotel.de -keyout server.key -out server.crt
-<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 37:
  
 ===== 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 50:
 [ ca ] [ ca ]
 default_ca    = CA_default default_ca    = CA_default
 +
 +…
  
 [ CA_default ] [ CA_default ]
Zeile 51: Zeile 64:
 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 71: Zeile 86:
   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:
Zeile 89: Zeile 104:
   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 genrsa -out server-ssl/serverkey.pem 2048 
 +  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   openssl req -new -newkey rsa:2048 -nodes -sha512 -keyout server-ssl/serverkey.pem -out server-ssl/serverreq.csr
-(( Todo: ''-subj /CN=<your sever's address here>'' ))+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 
 +(( TODO: mit ''-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:
Zeile 107: Zeile 157:
  
 ==== 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
Zeile 124: Zeile 180:
 //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 ===== ===== Zertifikat widerufen =====
Zeile 210: Zeile 280:
  
 Antrag an Nutzer ca senden: Antrag an Nutzer ca senden:
-  cp newreq.csr /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 233: Zeile 304:
 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 425: Zeile 503:
 //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
 +
 +====== Debian Snakeoil ======
 +Voraussetzung: FQDN korrekt im DNS eingetragen
 +
 +Debian: ''ssl-cert''
 +
 +Zertifikat anzeigen:
 +  openssl x509 -in /etc/ssl/certs/ssl-cert-snakeoil.pem -text | less
  
 ====== Links and Doku ====== ====== Links and Doku ======
Zeile 432: Zeile 518:
   * [[ 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.1404127522.txt.gz · Zuletzt geändert: 2014/06/30 11:25 von ingo_wichmann