lpi2:ssl
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| lpi2:ssl [2013/01/24 11:17] – Externe Bearbeitung 127.0.0.1 | lpi2: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:// | ||
| + | |||
| + | ====== Links ====== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * Kryptografie Grundlagen: https:// | ||
| + | |||
| ====== OpenSSL ====== | ====== OpenSSL ====== | ||
| + | ===== Diffie Hellman Schlüsselaustausch vorbereiten ===== | ||
| + | DH-Parameter erzeugen: ((https:// | ||
| + | openssl dhparam -2 -out / | ||
| + | |||
| + | DH-Parameter ansehen: | ||
| + | openssl dhparam -text -in / | ||
| + | |||
| + | Aufgabe: | ||
| + | * welche Bitlänge haben die Diffie Hellman Parameter? | ||
| + | |||
| + | Doku: | ||
| + | * https:// | ||
| + | * https:// | ||
| ===== Selbstsignierte Server Zertifikate bauen ===== | ===== Selbstsignierte Server Zertifikate bauen ===== | ||
| - | ''/ | ||
| - | ''/ | + | |
| - | < | + | |
| - | [ req_distinguished_name ] | + | |
| - | countryName_default | + | |
| - | stateOrProvinceName_default | + | |
| - | localityName_default | + | |
| - | </file> | + | |
| - | openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout serverkey.pem -out servercert.pem | + | ((https:// |
| - | + | ||
| - | < | + | |
| - | 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) []: | + | |
| - | Email Address []: | + | |
| - | </ | + | |
| 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 ==== |
| - | ''/ | + | 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. | ||
| + | |||
| + | ''/ | ||
| - | ''/ | + | ''/ |
| die folgenden Zeilen anpassen | die folgenden Zeilen anpassen | ||
| Zeile 39: | Zeile 50: | ||
| [ ca ] | [ ca ] | ||
| default_ca | default_ca | ||
| + | |||
| + | … | ||
| [ CA_default ] | [ CA_default ] | ||
| dir = ./ | dir = ./ | ||
| certs = $dir/certs | certs = $dir/certs | ||
| + | crl_dir | ||
| database | database | ||
| new_certs_dir | new_certs_dir | ||
| Zeile 50: | Zeile 64: | ||
| default_days | default_days | ||
| - | [ req_distinguished_name | + | … |
| - | countryName | + | |
| - | countryName_default | + | # TODO: brauchen wir das? |
| - | stateOrProvinceName | + | #[ policy_match |
| - | stateOrProvinceName_default | + | #countryName |
| - | localityName | + | #stateOrProvinceName |
| - | localityName_default | + | # |
| - | 0.organizationName | + | |
| - | 0.organizationName_default | + | … |
| + | |||
| + | [ v3_ca ] | ||
| + | … | ||
| + | basicConstraints | ||
| </ | </ | ||
| - | useradd -s /bin/bash -m ca | + | Verzeichnisse und Dateien |
| - | ==== Als Nutzer ca eine Beispiel CA erstellen ==== | + | |
| - | Verzeichnisse und Dateien | + | |
| su - ca | su - ca | ||
| mkdir -p ca.linuxhotel.de/ | mkdir -p ca.linuxhotel.de/ | ||
| Zeile 70: | Zeile 86: | ||
| echo 01 > serial | echo 01 > serial | ||
| - | Erzeugen eines Schluessels fuer die CA: | + | Erzeugen eines Schluessels fuer die CA: ((https:// |
| - | openssl genrsa -des3 -out private/ | + | openssl genrsa -aes256 |
| Erzeugen eines selbstsignierten Root-CA-Zertifikats: | Erzeugen eines selbstsignierten Root-CA-Zertifikats: | ||
| - | openssl req -new -x509 -days 3650 -key private/ | + | openssl req -new -x509 -sha512 |
| < | < | ||
| Common Name (eg, YOUR name) []: | Common Name (eg, YOUR name) []: | ||
| Zeile 88: | Zeile 104: | ||
| mkdir server-ssl | mkdir server-ssl | ||
| - | Antrag und Schluessel fuer Server erzeugen: | + | Antrag und Schluessel fuer Server erzeugen: |
| - | openssl req -new -newkey rsa:2048 -nodes -keyout server-ssl/ | + | openssl genrsa -out server-ssl/ |
| + | openssl req -new -key server-ssl/ | ||
| + | oder | ||
| + | openssl req -new -newkey rsa:2048 -nodes | ||
| + | oder | ||
| + | openssl req -new -newkey rsa:2048 -nodes -sha512 -subj / | ||
| + | (( TODO: mit '' | ||
| + | '' | ||
| + | ^Feld ^ Bedeutung | ||
| + | |/C= | Country/ | ||
| + | |/ST= | State/ | ||
| + | |/L= | Location/ | ||
| + | |/O= | Organization/ | ||
| + | |/OU= | Organizational Unit | Schulungs lab | | ||
| + | |/CN= | Common Name | example.com | ||
| + | )) | ||
| < | < | ||
| Common Name (eg, YOUR name) []: | Common Name (eg, YOUR name) []: | ||
| Email Address []: | Email Address []: | ||
| </ | </ | ||
| + | |||
| + | Im Feld " | ||
| + | |||
| + | Version 1.1.1 von openssl verspricht mit dem Schalter '' | ||
| + | <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: | ||
| + | </ | ||
| + | openssl req -new -newkey rsa:2048 -nodes -sha512 -config subjectAltName-openssl.cnf -keyout server-ssl/ | ||
| Pruefen ob Antrag und Schlüssel ok sind: | Pruefen ob Antrag und Schlüssel ok sind: | ||
| - | openssl req -in server-ssl/ | + | openssl req -in server-ssl/ |
| Antrag ansehen: | Antrag ansehen: | ||
| - | openssl req -in server-ssl/ | + | openssl req -in server-ssl/ |
| Antrag an Nutzer ca senden: | Antrag an Nutzer ca senden: | ||
| - | cp server-ssl/ | + | cp server-ssl/ |
| ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== | ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== | ||
| - | su - ca | + | Aus '' |
| - | openssl | + | 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 | ||
| + | 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 122: | Zeile 180: | ||
| //openssl s_server muss noch laufen// | //openssl s_server muss noch laufen// | ||
| openssl s_client -connect localhost: | openssl s_client -connect localhost: | ||
| + | |||
| + | |||
| + | |||
| + | === in der Praxis === | ||
| + | Audit-Tools: | ||
| + | sslscan linuxhotel.de | ||
| + | testssl.sh linuxhotel.de | ||
| + | |||
| + | Automatische Audits helfen die Konfiguration zu verbessern: | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ===== 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 | ||
| + | | ||
| + | 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 138: | Zeile 220: | ||
| 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 |
| < | < | ||
| Common Name (eg, YOUR name) []: | Common Name (eg, YOUR name) []: | ||
| Zeile 153: | Zeile 235: | ||
| //openssl s_server muss noch laufen// | //openssl s_server muss noch laufen// | ||
| openssl s_client -connect localhost: | openssl s_client -connect localhost: | ||
| + | |||
| + | ====== CA.pl ====== | ||
| + | ===== Server Zertifikat und CA selbst bauen ===== | ||
| + | ==== Als root Vorgabewerte setzen ==== | ||
| + | ''/ | ||
| + | |||
| + | ''/ | ||
| + | |||
| + | die folgenden Zeilen anpassen | ||
| + | < | ||
| + | [ ca ] | ||
| + | default_ca | ||
| + | |||
| + | [ CA_default ] | ||
| + | dir = ./demoCA | ||
| + | certs = $dir/certs | ||
| + | database | ||
| + | new_certs_dir | ||
| + | certificate = $dir/ | ||
| + | private_key = $dir/ | ||
| + | serial | ||
| + | default_days | ||
| + | |||
| + | [ req_distinguished_name ] | ||
| + | countryName | ||
| + | countryName_default | ||
| + | stateOrProvinceName | ||
| + | stateOrProvinceName_default | ||
| + | localityName | ||
| + | localityName_default | ||
| + | 0.organizationName | ||
| + | 0.organizationName_default | ||
| + | </ | ||
| + | |||
| + | useradd -s /bin/bash -m ca | ||
| + | ==== Als Nutzer ca eine Beispiel CA erstellen ==== | ||
| + | Verzeichnisse und Dateien fuer die CA: | ||
| + | su - ca | ||
| + | / | ||
| + | |||
| + | ==== Als root ein Server-Zertifikat beantragen ==== | ||
| + | cd | ||
| + | / | ||
| + | |||
| + | Antrag an Nutzer ca senden: | ||
| + | cp newreq.pem /home/ca/ | ||
| + | (vormals: newreq.csr statt newreq.pem) | ||
| + | |||
| + | ==== Als Nutzer ca das Server-Zertifikat unterschreiben ==== | ||
| + | su - ca | ||
| + | / | ||
| + | |||
| + | ==== Als root Zertifikat abholen ==== | ||
| + | cp / | ||
| + | cp newkey.pem server-ssl/ | ||
| + | |||
| + | ==== testen ==== | ||
| + | mit zwei Shell-Fenstern: | ||
| + | === als root / Server === | ||
| + | openssl s_server -cert server-ssl/ | ||
| + | |||
| + | === als Nutzer / Client === | ||
| + | //openssl s_server muss noch laufen// | ||
| + | openssl s_client -connect localhost: | ||
| ====== GnuTLS ====== | ====== GnuTLS ====== | ||
| Zeile 158: | Zeile 304: | ||
| Pakete: '' | Pakete: '' | ||
| - | === openSuSE 12.1 === | + | === openSuSE |
| Pakete: '' | Pakete: '' | ||
| + | |||
| + | ===== Diffie Hellman Schlüsselaustausch vorbereiten ===== | ||
| + | DH-Parameter erzeugen: | ||
| + | certtool --generate-dh-params --outfile / | ||
| + | |||
| + | DH-Parameter ansehen: | ||
| + | certtool --dh-info --infile / | ||
| ===== Selbstsignierte Server Zertifikate bauen ===== | ===== Selbstsignierte Server Zertifikate bauen ===== | ||
| Zeile 237: | Zeile 390: | ||
| Antrag und Schluessel für Server erzeugen: | Antrag und Schluessel für Server erzeugen: | ||
| certtool --generate-privkey --outfile server-ssl/ | certtool --generate-privkey --outfile server-ssl/ | ||
| - | certtool --generate-request --load-privkey server-ssl/ | + | certtool --generate-request --load-privkey server-ssl/ |
| < | < | ||
| Country name (2 chars): DE | Country name (2 chars): DE | ||
| Zeile 266: | Zeile 419: | ||
| Pruefen ob Antrag und Schluessel ok sind: | Pruefen ob Antrag und Schluessel ok sind: | ||
| - | openssl req -in server-ssl/ | + | openssl req -in server-ssl/ |
| Antrag ansehen: | Antrag ansehen: | ||
| - | openssl req -in server-ssl/ | + | openssl req -in server-ssl/ |
| Antrag an Nutzer ca senden: | Antrag an Nutzer ca senden: | ||
| - | cp server-ssl/ | + | cp server-ssl/ |
| - | chmod a+r / | + | chmod a+r / |
| ==== 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/ | + | certtool --generate-certificate --load-request serverreq.csr --outfile servercert.pem --load-ca-certificate ca.linuxhotel.de/ |
| < | < | ||
| Enter the certificate' | Enter the certificate' | ||
| Zeile 350: | Zeile 503: | ||
| //openssl s_server muss noch laufen// | //openssl s_server muss noch laufen// | ||
| openssl s_client -connect localhost: | openssl s_client -connect localhost: | ||
| + | |||
| + | ====== Debian Snakeoil ====== | ||
| + | Voraussetzung: | ||
| + | |||
| + | Debian: '' | ||
| + | |||
| + | Zertifikat anzeigen: | ||
| + | openssl x509 -in / | ||
| ====== Links and Doku ====== | ====== Links and Doku ====== | ||
| Zeile 355: | Zeile 516: | ||
| * [[ http:// | * [[ http:// | ||
| * [[ http:// | * [[ http:// | ||
| - | * [[ http:// | + | * [[ http:// |
| + | * [[ http:// | ||
lpi2/ssl.1359026238.txt.gz · Zuletzt geändert: 2014/02/24 23:09 (Externe Bearbeitung)
