NetVision-Technik

Zur?ck   NetVision-Technik > Forum > Server > Webserver > Security

Security Hier kommen alle Fragen und Lösungen zur Sicherheit und zu Fixes am Serversystem rein

Antwort
 
Themen-Optionen Ansicht
Alt 19.03.2013, 20:48   #1
SSL/TLS - Mini FAQ
bl0bb bl0bb ist offline 19.03.2013, 20:48

Also wenn ich hier in manchen Beiträgen lese:

"https brauche ich nicht für mein Projekt"
"https ist unnütz"
"https *!?***!"

Leute, also mal ehrlich - da dreht sich mir der Magen um.

Klar braucht man es nicht. Aber es gibt so viele Dinge auf der Welt die keine Sau braucht. Und SSL zählt definitiv nicht dazu.

Daher ist es schon schön es anzubieten, um den sicherheitsbewußten User entgegen zu kommen. Man könnte den User sogar zwingen es zu nutzen, aber das wäre auch nicht die feine Englische.

Und das Gute ist, jeder Browser und Client kommt damit klar. Sogar die aus dem letzten Jahrhundert. Zumindest ist mir noch kein Client begegnet der es nicht kann. Und sollte es so einen geben, dann gehört der eh gebannt.
(OK, einige ältere Clienten haben Probleme mit einem SSL-RSS Feed, aber das sollte man verschmerzen können.)


Was ist SSL/TLS?

Es ist ein hybrides Verschlüsselungsprotokoll zur sicheren Datenübertragung im Netz.
Nur wird SSL (Secure Sockets Layer) seit geraumer Zeit unter dem Akronym TLS (Transport Layer Security) weiterentwickelt.
Der gesamte Datenverkehr (HTTP, FTP, POP, usw.) wird verschlüsselt (Verbindungsaufbau, Handshake, Datenübertragung, ...). Es liegt nichts mehr im Klartext vor, und ein erfolgreiches Sniffing wird schon recht schwer (man muss schon auf einer der beiden Seiten "anwesend" sein).

Wer mehr Details haben möchte, kann ruhig die Suchmaschine seiner Wahl fragen.


Gibt es potentielle Schwachstellen?

Ja, gibt es!
Nicht alle SSL/TLS Versionen und Ciphers (kryptographische Algorithmen, z.B. AES, DES usw) gelten als sicher. Einige wurden auch schon geknackt. Daher sollte man wissen was man anbietet, und was besser nicht.

Durch diese Schwachstellen wird sniffen wieder möglich (Man-in-the-middle, BEAST Attack).


Gibt es weitere Nachteile?

Auch hier gibt es ein Ja
  • Der Server wird etwas mehr strapaziert. Aber dieser Lastzuwachs ist minimal und kann daher vernachlässigt werden.
    OK, bei sehr großen Projekten mit vielen Hits, muss man schon splitten. Aber ich glaube kaum, dass hier jemand so ein Projekt fährt.
    Ich selber habe bei 100k requests/min keine nennenswerte Belastung festgestellt.
  • Um Zugriff auf die neuesten Protokolle zu haben, muss man OpenSSL selber kompilieren, da die diversen Packages doch ziemlich veraltet sind. Aber wie das geht, erkläre ich weiter unten.

Irgendeine SSL/TLS Empfehlung?

TLSv1.2
TLSv1.1
TLSv1 *
SSLv3 *

* Diese Protokolle sollten in naher Zukunft deaktiviert werden, da eine RC4 Schwachstelle aufgetaucht ist. Aber zurzeit ist dieser Exploit noch zu unpraktikabel, und es wird wohl auch noch eine Weile dauern, bis ein wirksamer Angriff möglich ist. Das Problem ist jedoch, dass viele Browser der Zeit wie immer hinterherhinken, und TLSv1.1/TLSv1.2 noch nicht unterstützen.


Irgendeine Cipher Empfehlung?

RC4:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!MD5:!aNULL:!eNULL:!NULL:!EDH:!EXPORT

>> Erklärung hier <<

Diese Cipher Sammlung ist mein persönlicher Geschmack. Jeder kann (und sollte) selber etwas experimentieren


Wie kompiliere ich OpenSSL?

Das Beispiel ist jetzt für Squeeze. Andere Distributionen können von den Befehlen abweichen.

Code:
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar -xzf openssl-1.0.1e.tar.gz
CD  openssl-1.0.1e
./config --prefix=/usr zlib-dynamic --openssldir=/etc/ssl shared
make
make test
make install
Kommt es zu Fehlern einfach lesen und eventuelle Abhängigkeiten installieren. Allerdings sollte es zu 99% ohne Fehler durchlaufen.

Mit
Code:
openssl version
kann man den Erfolg der Installation prüfen.


Aktuelle Infos und Quelldateien gibt es hier: OpenSSL Project
OpenSSL Binaries für Win: Win32 OpenSSL


Wie erstelle ich ein Zertifikat?

Ein paar Infos gibt es hier. Auch das Netz bietet zig Anleitungen.


Zuerst erstellen wir einen Private Key (RSA mit 4096bits ohne Passwort, da dies für einen Webserver ungeeignet wäre)

Code:
openssl genrsa -out priv.key 4096
Output:
Code:
Generating RSA private key, 4096 bit long modulus
...............................................................................................++
............................................................................................................................................................................................++
e is 65537 (0x10001)

Nun wird ein Certificate Signing Request erstellt

Code:
openssl req -new -key priv.key -out cert.csr
Bis auf Common Name (MUSS wirklich eure FQDN sein!) "kann" alles leer gelassen werden.
Die 'extra' attributes sollten leer bleiben, aber probiert es selber aus

Output:
Code:
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) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:

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

Nun müsst ihr entscheiden. Entweder bedient ihr euch eines offiziellen Zertifiziers (Root Certificate Authority), oder ihr stellt ein selbstsigniertes Zertifikat aus (bei dem jeder Browser meckern sollte).


selbstsigniertes Zertifikat

Code:
openssl req -x509 -key priv.key -in cert.csr -out selfsigned.crt -days 365

Root Certificate Authority

Diese bietet euch in der Regel auch Möglichkeiten an, einen Private Key und ein Certificate Signing Request vor Ort zu erstellen.
Jedenfalls übernimmt sie die Erstellung des Zertifikats, welches ihr danach herunterladen könnt.
Um Problemen in der Zertifizierungskette (chain issues) vorzubeugen, solltet ihr euch das Primary CA Zertifikat (auf alle Fälle nicht das Root CA des Zertifizierers) herunterladen, und mit eurem frisch erstellten Zertifikat vereinen.

Code:
cat own.crt root.certificate.authority.primary.ca.pem > unified-certs.crt

Es kann sein, dass ihr händisch (z.B. nano) zwischen den beiden Zertifikaten einen Zeilenumbruch einfügen müsst, da sonst der Webserver meckert.
Also einfach mal das unified-certs.crt ansehen, und wenn da sowas steht wie
Code:
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
einen Linebreak einfügen
Code:
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

!!! Und bitte euren Key etc. nicht in euer Webverzeichnis packen, sondern hübsch irgendwo anders hin


Beispiel nginx

>> mehr Infos <<

Code:
listen 443 ssl;

...
		
ssl on;
ssl_certificate /path/to/unified-certs.crt;	
ssl_certificate_key /path/to/priv.key;

ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!MD5:!aNULL:!eNULL:!NULL:!EDH:!EXPORT;
ssl_prefer_server_ciphers on;

...

Beispiel Apache

>> mehr Infos hier << und >> hier <<

Code:
<VirtualHost *:443>
...

SSLEngine on
SSLCertificateFile /path/to/unified-certs.crt
SSLCertificateKeyFile /path/to/priv.key

SSLProtocol all -SSLv2
SSLCipherSuite RC4:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!MD5:!aNULL:!eNULL:!NULL:!EDH:!EXPORT
SSLHonorCipherOrder on

...
</VirtualHost>

Kann ich die Qualität meines Zertifkates irgendwo prüfen?

Ja, und zwar >> hier <<



So ich denke das sollte reichen mit der Mini - FAQ


Viel Spaß

Ge?ndert von bl0bb (19.03.2013 um 20:52 Uhr).

 
Benutzerbild von bl0bb
bl0bb
Erfahrener Benutzer
Punkte: 12.526, Level: 73 Punkte: 12.526, Level: 73 Punkte: 12.526, Level: 73
Levelaufstieg: 19% Levelaufstieg: 19% Levelaufstieg: 19%
Aktivität: 0% Aktivität: 0% Aktivität: 0%
Letzte Erfolge
Registriert seit: 04.04.2011
Beitr?ge: 247
Abgegebene Danke: 6
Erhielt 94 Danke für 7 Beiträge
Downloads: 2
Uploads: 0
Nachrichten: 34
Hits: 26309
Mit Zitat antworten
Folgende 17 Benutzer sagen Danke zu bl0bb für den nützlichen Beitrag:
$iMpLy (20.03.2013), BonkeR (19.03.2013), Cerberus (25.03.2013), D@rk-€vil™ (19.03.2013), DefCon3 (26.03.2013), dontcha (20.03.2013), Flori12345 (19.03.2013), Gandalf (19.03.2013), gotthummer (19.03.2013), Kracher (20.03.2013), Leon (19.03.2013), Lex (21.03.2013), pat (30.12.2013), robby (24.03.2013), Schwamm (19.03.2013), Sponge (19.03.2013), Thunder™ (19.03.2013)
Alt 19.03.2013, 21:06   #2
Flori12345
Profi
Punkte: 22.222, Level: 92 Punkte: 22.222, Level: 92 Punkte: 22.222, Level: 92
Levelaufstieg: 88% Levelaufstieg: 88% Levelaufstieg: 88%
Aktivität: 0% Aktivität: 0% Aktivität: 0%
Letzte Erfolge
 
Benutzerbild von Flori12345
 
Registriert seit: 22.06.2008
Alter: 38
Beitr?ge: 867
Abgegebene Danke: 188
Erhielt 82 Danke für 8 Beiträge
Downloads: 106
Uploads: 0
Nachrichten: 6
Renommee-Modifikator:
0 Flori12345 ist in Verruf geratenFlori12345 ist in Verruf geratenFlori12345 ist in Verruf geratenFlori12345 ist in Verruf geratenFlori12345 ist in Verruf geratenFlori12345 ist in Verruf geratenFlori12345 ist in Verruf geraten
Standard

jo supi dann is ja alles gesagt
Flori12345 ist offline   Mit Zitat antworten Nach oben
Antwort

Stichworte
https, nginx, openssl, ssl, tls


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, G?ste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beitr?ge zu antworten.
Es ist Ihnen nicht erlaubt, Anh?nge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beitr?ge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Template-Modifikationen durch TMS