Ist die Reihenfolge der Chiffre Namen in TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList
wichtig?
Meistens Ja.
TLS tut nicht angeben, wer entscheidet über die Chiffre. Herkömmlicherweise berücksichtigt der Server die Präferenzen des Kunden. Das heißt, der Server verwendet die erste Einstellung des Clients, wenn diese verfügbar und aktiviert ist, oder die zweite Einstellung des Clients, falls diese verfügbar und aktiviert ist, und so weiter.
Die meisten Bibliotheken ermöglichen es einem Server, das Verhalten zu überschreiben. Zum Beispiel mit OpenSSL, SSL_OP_CIPHER_SERVER_PREFERENCE
Option. In diesem Fall stimmt der Server mit der ersten Einstellung des Servers überein, wenn der Client sie ankündigt, der zweiten Einstellung des Servers, wenn der Kunde sie ankündigt, und so weiter.
Für Server, die ich kontrolliere, stimme ich die Cipher Suite Liste und in der Regel setzen SSL_OP_CIPHER_SERVER_PREFERENCE
, weil viele Kunden nicht auf die Details achten. Sie werfen einfach die Suppe der Chiffre-Suiten in den ClientHello in der Hoffnung, dass etwas klebt.
Die Reihenfolge, in der ein Server Chiffre bietet, ist wichtig, aber habe ich die Kontrolle über diesen Auftrag?
Ja.
Bestimmen Sie auf dem Server die Reihenfolge der Cipher Suites, und legen Sie sie dann mit SSL_CTX_set_cipher_list
oder SSL_set_cipher_list
fest. Indem Sie die Liste einstellen, stellen Sie sicher, dass RC4-MD5
nicht verwendet wird, auch wenn es die erste Wahl des Kunden ist (vorausgesetzt, Sie lassen es weg). Um die maximale Wirkung zu erzielen, setzen Sie auch SSL_OP_CIPHER_SERVER_PREFERENCE
Kontextoption.
Siehe auch How do I disable a particular cipher suite in openssl? Der Kontext ist OpenSSL, aber es sollte Ihnen eine Vorstellung davon geben, wo in Delphi zu gehen ist.
(Kommentare): Was kann man von Ihrer Antwort mir nicht klar ist: Hat bereits die CipherList Eigenschaft einen Auftrag bedeuten? Wenn ich an dem zugrunde liegenden Delphi/Indy Code aussehen sehe ich, dass es nur ein Wrapper für externe Funktion ist SSL_CTX_set_cipher_list : function(_para1: PSSL_CTX; const str: PAnsiChar): TIdC_INT cdecl = nil; in IdSSLOpenSSLHeaders.pas
Wenn ich Delphi bin Verständnis richtig, dann glaube ich, die Antwort ist Ja, es tut. Aber es verwendet wahrscheinlich entweder (1) die OpenSSL-Standardliste oder (2) eine Delphi-Standardliste. Beide sind wahrscheinlich so etwas wie "ALL:!EXP:!LOW"
oder ähnlich. In jedem Fall werden Sie es nach Ihrem Geschmack abstimmen wollen.
Wenn Sie interessiert sind, wie die Liste aussieht, wenn sie auf die Leitung gelegt wird, verwenden Sie Wireshark, um die ClientHello zu überprüfen. Es ist einfach, ein mit s_client
zu erzeugen, und es zeigt Ihnen, was Standard Cipher Suite Liste der OpenSSL wie folgt aussieht:
$ openssl s_client -connect www.ietf.org:443 -tls1 -servername www.ietf.org
und die entsprechenden Wireshark Spur mit 55 Standard Chiffriersätze hinein gestopft:

Mit der Option -cipher
und "HIGH:!aNULL:!MD5:!RC4"
können Sie auch Ihre Sicherheit verbessern und die Anzahl der Verschlüsselungssammlungen reduzieren. Die Cipher Suite-Anzahl wird auf etwa 35 reduziert.
$ openssl s_client -connect www.ietf.org:443 -tls1 -servername www.ietf.org \
-cipher 'HIGH:!aNULL:!MD5:!RC4'
Wenn Sie nicht TripleDES und Cameilla mögen, dann können Sie es auf etwa 20 Chiffriersätze mit reduzieren:
$ openssl s_client -connect www.ietf.org:443 -tls1 -servername www.ietf.org \
-cipher 'HIGH:!aNULL:!MD5:!RC4:!3DES:!CAMELLIA'
Angenommen nun, ein Client mit nur konfiguriert ist RC4-MD5
und Ein Server ist nur mit AES-GCM
konfiguriert. D.h., es gibt keine Überschneidung von Cipher-Suites zwischen Client und Server. In diesem Fall erhalten Sie einen Fehler in OpenSSL. Der Fehler wird 0x1408A0C1 sein, "keine geteilten Cipher Suites". Es wird auf dem Server wie folgt aussehen:
140339533272744:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1353
Für OpenSSL-basierten Clients und Server, können Sie die Standard Cipher Suite Liste mit dem "STANDARD" Zeichenfolge bestimmen. Das ist wörtlich was es heißt (siehe ciphers(1)
man page).
Es gibt 103 von ihnen, die schwache und verwundete Algorithmen enthält. In der Praxis sollten Sie es auf 16 oder so Chiffriersätze paaren unten Sie bequem mit fühlen (dh Ihre Sicherheitsposition):
$ openssl ciphers -v 'DEFAULT' | cut -f 1 -d " " | wc -l
103
Und:
$ openssl ciphers -v 'DEFAULT' | cut -f 1 -d " "
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA-AES256-SHA
ECDHE-ECDSA-AES256-SHA
SRP-DSS-AES-256-CBC-SHA
SRP-RSA-AES-256-CBC-SHA
SRP-AES-256-CBC-SHA
DH-DSS-AES256-GCM-SHA384
DHE-DSS-AES256-GCM-SHA384
DH-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-SHA256
DHE-DSS-AES256-SHA256
DH-RSA-AES256-SHA256
DH-DSS-AES256-SHA256
DHE-RSA-AES256-SHA
DHE-DSS-AES256-SHA
DH-RSA-AES256-SHA
DH-DSS-AES256-SHA
DHE-RSA-CAMELLIA256-SHA
DHE-DSS-CAMELLIA256-SHA
DH-RSA-CAMELLIA256-SHA
DH-DSS-CAMELLIA256-SHA
ECDH-RSA-AES256-GCM-SHA384
ECDH-ECDSA-AES256-GCM-SHA384
ECDH-RSA-AES256-SHA384
ECDH-ECDSA-AES256-SHA384
ECDH-RSA-AES256-SHA
ECDH-ECDSA-AES256-SHA
AES256-GCM-SHA384
AES256-SHA256
AES256-SHA
CAMELLIA256-SHA
PSK-AES256-CBC-SHA
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-ECDSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
ECDHE-ECDSA-AES128-SHA
SRP-DSS-AES-128-CBC-SHA
SRP-RSA-AES-128-CBC-SHA
SRP-AES-128-CBC-SHA
DH-DSS-AES128-GCM-SHA256
DHE-DSS-AES128-GCM-SHA256
DH-RSA-AES128-GCM-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES128-SHA256
DHE-DSS-AES128-SHA256
DH-RSA-AES128-SHA256
DH-DSS-AES128-SHA256
DHE-RSA-AES128-SHA
DHE-DSS-AES128-SHA
DH-RSA-AES128-SHA
DH-DSS-AES128-SHA
DHE-RSA-SEED-SHA
DHE-DSS-SEED-SHA
DH-RSA-SEED-SHA
DH-DSS-SEED-SHA
DHE-RSA-CAMELLIA128-SHA
DHE-DSS-CAMELLIA128-SHA
DH-RSA-CAMELLIA128-SHA
DH-DSS-CAMELLIA128-SHA
ECDH-RSA-AES128-GCM-SHA256
ECDH-ECDSA-AES128-GCM-SHA256
ECDH-RSA-AES128-SHA256
ECDH-ECDSA-AES128-SHA256
ECDH-RSA-AES128-SHA
ECDH-ECDSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA256
AES128-SHA
SEED-SHA
CAMELLIA128-SHA
IDEA-CBC-SHA
PSK-AES128-CBC-SHA
ECDHE-RSA-RC4-SHA
ECDHE-ECDSA-RC4-SHA
ECDH-RSA-RC4-SHA
ECDH-ECDSA-RC4-SHA
RC4-SHA
RC4-MD5
PSK-RC4-SHA
ECDHE-RSA-DES-CBC3-SHA
ECDHE-ECDSA-DES-CBC3-SHA
SRP-DSS-3DES-EDE-CBC-SHA
SRP-RSA-3DES-EDE-CBC-SHA
SRP-3DES-EDE-CBC-SHA
EDH-RSA-DES-CBC3-SHA
EDH-DSS-DES-CBC3-SHA
DH-RSA-DES-CBC3-SHA
DH-DSS-DES-CBC3-SHA
ECDH-RSA-DES-CBC3-SHA
ECDH-ECDSA-DES-CBC3-SHA
DES-CBC3-SHA
PSK-3DES-EDE-CBC-SHA
EDH-RSA-DES-CBC-SHA
EDH-DSS-DES-CBC-SHA
DH-RSA-DES-CBC-SHA
DH-DSS-DES-CBC-SHA
DES-CBC-SHA
Ich weiß nicht, wie das nmap-Skript benotet, aber A für ** RC4 ist sehr falsch **; es ist so stark geschwächt durch zahlreiche Angriffe, dass es kürzlich offiziell für TLS verboten wurde, siehe Wikipedia für Details und Links. Und wenn 'DHE-RSA ... (dh 256)' eine DHE-Gruppe von 256 Bits bedeutet, ist das * grob * unsicher - es ist ungefähr so, als ob Logjam gewürfelt wäre! Wenn Sie Sicherheit wünschen, http://security.stackexchange.com/questions/51680/optimal-web-server-ssl-cipher-suite-configuration und http://security.stackexchange.com/questions/76993/now-that -it-is-2015-what-ssl-tls-cipher-suits-sollte-verwendet- –
@ dave_thompson_085 Danke, aktualisiert die Liste. –
Re update: überprüfen Sie auch DHparams Größe, wenn Sie nicht haben. Ich weiß nicht, ob dein openssl-Build gepatcht ist, aber Upstream 1.0.2 unterstützt weder CHACHA noch CAMELLIA mit SHA2; Die Website zeigt 1.1.0 (jetzt in der Betaversion) wird (anscheinend alle) CHACHA und CAMELLIA-SHA2 nur mit ECDHE haben (nicht DHE, oder eben plainRSA). Beachten Sie, dass OpenSSL stillschweigend ignorierte Elemente in einem Chiffrierstring ignoriert, solange mindestens ein Element gültig ist und eine nicht leere Liste erstellt. –