Frage:
Empfohlene ssl_ciphers für Sicherheit, Kompatibilität - Perfect Forward-Geheimhaltung
binaryanomaly
2014-04-01 22:55:28 UTC
view on stackexchange narkive permalink

Ich verwende derzeit nginx mit den folgenden Chiffren:

  ssl_ciphers HIGH :! aNULL :! eNULL :! LOW :! ADH :! RC4 :! 3DES :! MD5 :! EXP :! PSK :! SRP :! DSS;  

Ich möchte die Kompatibilität mit älteren Browsern, insbesondere auch älteren mobilen Browsern, beibehalten und SHA1 daher nicht vollständig verbieten.

Wie kann ich erreichen, dass SHA256 gegenüber SHA1 für MAC (Message Authentication Code) bevorzugt und immer verwendet wird, wenn dies möglich ist?

Ich kann dh die Anwendung von SHA256 erzwingen, indem ich SHA256 :! SHA: zu meiner Zeichenfolge ssl_ciphers hinzufüge, aber Dies würde auch SHA1 vollständig verbieten.

Mit der ssl_cipher am Anfang wird jedoch tendenziell nur SHA1 verwendet. Irgendwelche Empfehlungen?


Update 29.12.2014

Vielen Dank an alle für die konstruktiven Beiträge und Diskussionen.

Auch wenn ich Ich denke immer noch, dass die Mozilla-Seite auf serverseitigem TLS das Thema insgesamt recht gut abdeckt - ich würde nur die moderne Kompatibilität mit der Einschränkung empfehlen, dass die DSS-Chiffren daraus entfernt werden sollten und ausdrücklich verboten (! DSS), wie im Kommentar von Anti-Schwachkennwörtern empfohlen - danke, dass Sie es entdeckt haben.

  ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES128-GCM- SHA256: ECDHE-RSA-AES256-GCM-SHA384: ECDHE-ECDSA-AES256-GCM-SHA384: DHE-RSA-AES128-GCM-SHA256: KEDH + AESGCM: ECDHE-RSA-AES128-SHA256: ECDHE8 SHA256: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-AES128-SHA: ECDHE-RSA-AES256-SHA384: ECDHE-ECDSA-AES256-SHA384: ECDHE-RSA-AES256-SHA: ECDHE-ECDSA-AES6: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE-RSA-AES256-SHA256: DHE-RSA-AES256-SHA :! ANULL :! ENULL :! EXPORT :! DSS :! DES :! RC4: ! 3DES :! MD5 :! PSK  

Interestin gly ssllabs hat dies nicht alarmiert oder verringert ...

Außerdem bevorzuge ich die Verwendung von benutzerdefinierten Diffie Hellman-Parametern. Auch wenn die Standard offensichtlich als sicher gelten. Was sind die OpenSSL-Standard-Diffie-Hellmann-Parameter (Primzahlen)?

  openssl dhparam -check -out /etc/ssl/private/dhparams.pem 2048  

Erhöhen Sie diesen Wert für Paranoia und Spaß auf 4096, wenn Sie möchten.

Zu Update4: Die vollständigen Chiffrierzeichenfolgen befinden sich nicht in den drei Beispielen bei #Nginx, befinden sich jedoch oben auf der Seite, und einige Konvertierungen in nicht (vollständig-) OpenSSL-Formulare befinden sich unten. Die Generatorseite deckt einen engeren Bereich ab, ist jedoch innerhalb dieses Bereichs praktisch.
Stimmt, habe das nicht bemerkt. Vielen Dank für den Hinweis.
Betreff: Update 16.12.2014: Ich würde dringend empfehlen, mindestens die -DSS- Chiffren zu entfernen und! DSS zu dieser Zeichenfolge hinzuzufügen. DSS-Chiffren sind in der Regel auf zu kleine 1024-Bit-Schlüsselgrößen beschränkt. Siehe [https://www.ssllabs.com/ssltest/viewClient.html?name=IE&version=11&platform=Win%208.1 lightboxes(https://www.ssllabs.com/ssltest/viewClient.html?name=IE&version=11&platform = Win% 208.1), Cipher Suite-Liste, hochgestellte Anmerkung 2, "(2) Kann nicht für die Weiterleitungsgeheimnis verwendet werden, da DSA-Schlüssel erforderlich sind, die effektiv auf 1024 Bit begrenzt sind."
Danke für die scharfen Augen! Keine Ahnung, warum Mozilla DSS hinzugefügt hat, es war sogar nicht in der Standard-Nginx-Einstellung enthalten. Interessanterweise haben sich ssllabs-Schecks nicht beschwert oder bewertet. Ich werde den Beitrag aktualisieren.
Sieben antworten:
Anti-weakpasswords
2014-04-02 09:09:52 UTC
view on stackexchange narkive permalink

First, let's go over how cipher suite negotiation works, very briefly. For example, we can use the TLS 1.2 document RFC 5246 starting at section 7.4.1.2 to see, in the short short form:

  • ClientHello: The client tells the server which cipher suites the client supports
  • Now the server picks one
    • I'll discuss how to control which one it picks next!
  • ServerHello: The server tells the client which cipher suite it has chosen, or gives the client a failure message.

Now, as to the actual selection. I've used the nginx ssl module documentation, the Qualys 2013 article on Configuring Apache, Nginx, and OpenSSL for Forward Secrecy, and the Hynek Hardening Your Web Server’s SSL Ciphers article for reference. The latter two cover both Apache and Nginx (as both use OpenSSL as a base).

Essentially, you need to tell Nginx to use the order you select, and you need to select an order. To see what the results of that order would be, you can use the OpenSSL command line, e.g.

openssl ciphers -v 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED'

NOTE: You may want to remove :!3DES from that string; 3-key triple-DES isn't efficient, but it is still secure in and of itself to more or less 112 bits of security, and is very, very common.

Use the above command to determine which cipher suites will be most preferred and least preferred in your configuration, and change it until you like the results. The references I've given have their own strings; I amended it slightly to get the above example (removing RC4 and SEED, and putting every TLS 1.2 cipher suite above any 'SSLv3' cipher suite, for example).

Then, for Nginx in particular, you would alter your configuration file to include something like:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";

Add in SSLv3 to ssl_protocols if you really insist on it.

The ssl_prefer_server_ciphers will inform nginx to use the order we specify, and ignore the order the client presents their cipher list in. Now, if the only shared cipher suite between the ClientHello and the list OpenSSL ciphers -v ... gives is our least preferred cipher, that's of course what nginx will use. If nothing matches, then we send the client a failure notice.

The ssl_ciphers command is the meat of the choice, here, as nginx will inform OpenSSL of our preferred cipher suite list. Please, please use the openssl ciphers -v command to see the results you get on your platform. Ideally, check it again after changing OpenSSL versions.

Also, please read Scott Helme's article on Setting up HSTS (HTTP Strict Transport Security) in nginx, which will allows a host to enforce the use of HTTPS on the client side. Be sure to include the HSTS header inside the http block with the ssl listen statement.

Edited to add: At least after this (if not before also), go to Qualys SSL Labs to see HTTPS security information and to Test Your Server that's been kept pretty well up to date for the last few years. Recommendations change regularly, and sometimes even frequently reverse themselves (RC4, for example, what nearly whiplash inducing). You can also even Test Your Browser!

Danke `openssl -v chiffren ...` ist genau das was ich brauchte.
Bitte; Siehe auch die Qualys SSL Labs im neuen letzten Absatz. Ich bin neugierig - warum [Kamelie] verbieten (http://info.isl.ntt.co.jp/crypt/eng/camellia/index.html)? Es ist eine äquivalente Blockverschlüsselung zu AES, die von der EU und Japan offiziell gebilligt wurde, gemäß den Ergebnissen von [NESSIE] (http://www.cosic.esat.kuleuven.be/nessie/deliverables/press_release_feb27.pdf) und [CRYPTREC ] (http://cryptrec.go.jp/english/topics/cryptrec_20130712_c12report.html) Wettbewerbe.
Guter Punkt, ich habe das gerade von den Cloudlfare-Chiffren kopiert. Ich sehe jedoch keinen zusätzlichen Vorteil, wenn ich es zulasse und erneut auf Cloudflare teste. Es scheint nicht FS-fähig zu sein? Ich bin wirklich kein Experte für Verschlüsselungsalgorithmen.
Vorwärtsgeheimnis ist ein Attribut eines kurzlebigen Schlüssels in der Mischung (zum Beispiel das letzte "E" in "DHE" oder "ECDHE"); es hat nichts mit der Wahl der symmetrischen Chiffre als solcher zu tun. Viele der Chiffren, die meine OpenSSL-Installation für Ihre aktuell ausgewählte Liste anzeigt, haben keine Vorwärtsgeheimnis, wie AES128-GCM-SHA256 (dritthäufigste auf Ihrer Liste). ECDHE-RSA-AES128-GCM-SHA256 bietet natürlich Vorwärtsgeheimnis.
Es stimmt, ich könnte wahrscheinlich tatsächlich die meisten nicht FS-fähigen Verschlüsselungskombinationen entfernen. Vielen Dank für den Hinweis.
@binaryanomaly [TLS 1.2 enthält den vollständigen Satz moderner Camellia-Chiffresuiten, PFS und andere. OpenSSL tut dies leider nicht.] (Http://security.stackexchange.com/a/45912/12480) OpenSSL unterstützt ältere wie DHE-RSA-CAMELLIA128-SHA, aber nicht die neueren ECDHE- oder ECDSA-Modelle .
Ich kann in Qualys SSL Labs die Note A mit den empfohlenen Chiffren und Protokollen erhalten: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH + aRSA + SHA256: EECDH + ECDSA + SHA384: EECDH + ECDSA + SHA256: EECDH + aRSA + SHA384: EDH + aRSA + AESGCM: EDH + ARSA + SHA256: EDH + ARSA: EECDH: :! LOW :! 3DES :! MD5 :! EXP :! PSK :! SRP :! DSS :! RC4 :! SEED "; in IE11 werden die Seiten jedoch nicht mehr angezeigt (die Verbindung wird abgebrochen). Funktioniert jedoch auch in anderen Browsern, einschließlich älterer IE-Versionen. Ich musste zu A zurückkehren. Irgendeine Idee?
Alex W
2015-04-22 02:26:56 UTC
view on stackexchange narkive permalink

Mozilla verfügt über ein Online-Tool, mit dem Sie die richtige Verschlüsselungssuite auswählen können.

https://mozilla.github.io/server-side-tls/ssl-config-generator/

Damit können Sie Ihren Server eingeben Version, Softwareversion usw. und wählen Sie dann zwischen einem Gleichgewicht zwischen Sicherheit und Legacy-Unterstützung.

Lesen Sie die Frage einschließlich des Updates erneut und Sie werden sehen, dass diese Informationen bereits enthalten sind. Weitere Mozilla-Empfehlung ist soso.
@binaranomaly Ich habe das Update gelesen. Es ist mit dem Mozilla-Wiki verknüpft, aber ich verstehe, dass das Tool, mit dem ich verlinkt habe, besser ist, da es auf dem neuesten Stand gehalten wird, indem Ihre Serverversion und andere Parameter als Eingabe verwendet werden
Sehr schönes Tool, ohne alle Fallstricke lesen zu müssen. Sie müssen nur wissen, was Sie verwenden
Dies ist ein ausgezeichnetes Werkzeug, das großartige Ergebnisse liefert!
Matt Nordhoff
2014-04-02 05:58:28 UTC
view on stackexchange narkive permalink

OpenSSL bevorzugt natürlich neuere MACs für ansonsten äquivalente Cipher Suites. Beispielsweise beginnt die lange Ausgabe von openssl chiphers -v für Ihre Verschlüsselungszeichenfolge mit:

  ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx = ECDH Au = RSA Enc = AESGCM (256) Mac = AEADECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx = ECDH Au = ECDSA Enc = AESGCM (256) Mac = AEADECDHE-RSA-AES256-SHA384 TLSv1.2 Kx = ECD = RSA Enc = AES (256) Mac = SHA384ECDHE-ECDSA-AES256-SHA384 TLSv1,2 Kx = ECDH Au = ECDSA Enc = AES (256) Mac = SHA384ECDHE-RSA-AES256-SHA SSLv3 Kx = ECDH Au = RSA Enc = AES (256) Mac = SHA1ECDHE-ECDSA-AES256-SHA SSLv3 Kx = ECDH Au = ECDSA Enc = AES (256) Mac = SHA1  

Natürlich verwendet TLS nur unterstützte Verschlüsselungssuiten sowohl vom Server als auch vom Client gegenseitig, und weder Chrome noch Firefox unterstützen HMAC-SHA256-Verschlüsselungssuiten. Da HMAC-SHA1 (und sogar HMAC-MD5) immer noch als sicher gelten, sind ihre Entwickler (und die von NSS, der TLS-Bibliothek, die beide verwenden) skeptisch, Entwickleraufwand und TLS-Handshake-Größe zu verschwenden, indem sie neue, unnötige und rückwärts gerichtete hinzufügen -inkompatible Cipher Suites.

Sehen Sie sich beispielsweise die von Chrome 33 unterstützten Cipher Suites in der Reihenfolge ihrer Präferenz an:

  1. ChaCha20- Poly1305,
  2. AES-128-GCM,
  3. AES-256-CBC mit HMAC-SHA1,
  4. RC4 (ugh) und AES- 128-CBC mit HMAC-SHA1, ...
  5. ol>

    OpenSSL unterstützt ChaCha20-Poly1305 nicht. Wenn Ihr AES-GCM ebenfalls nicht unterstützt (???) und ein RSA-Zertifikat verwendet, ist ECDHE-RSA-AES256-SHA natürlich die von Chrome verwendete Verschlüsselungssuite. (Firefox 29 würde ECDHE-RSA-AES128-SHA verwenden.)

    (Die "SHA-256" -Verschlüsselungssuiten, die Sie auf anderen Websites verwendet haben, sind vermutlich ChaCha20- Poly1305 oder AES-128-GCM, bei denen es sich um AEADs handelt, die kein HMAC verwenden, deren Chiffresuiten jedoch SHA-256 im PRF verwenden.)

that guy from over there
2014-04-04 20:52:15 UTC
view on stackexchange narkive permalink

for best compatibility the cloudflare-cipher-suite is not the best; i found the following better:

# suggestion from sslabs / including PFS, good compatibility#ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;# suggestion my mozilla-server-team - good compatibility, pfs#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;

when you check each setup with ssllabs you'll find for those 2 suites the following statement:

  • Forward Secrecy Yes (with most browsers) ROBUST

while on your suggested cipher_suite it says:

  • Forward Secrecy Yes (with modern browsers)

additional information: Guide to Nginx + SSL + SPDY

Danke für die Information. Die Mozilla-Empfehlung sieht für mich am besten aus, weniger RC4 mit diesen Chiffren zu verwenden.
Für das, was es wert ist, bietet Mozilla eine zweite Konfigurationszeichenfolge weiter unten auf der Seite im Abschnitt "RC4-Schwächen" an, die RC4 überhaupt nicht verwendet. Aus Gründen der IE / XP-Kompatibilität wird stattdessen 3DES verwendet, das langsam, aber tatsächlich mehr oder weniger sicher ist.
@MattNordhoff: Danke für diesen Zusatz; Aus den Dokumenten: "Während 3DES eine widerstandsfähigere Kryptographie bietet, ist es auch 30-mal langsamer und CPU-intensiver als RC4." Ich muss sagen, , ich würde jemandem die Sicherheit geben, wenn er / sie verwendet einen Browser wie z. B. 6/7, wenn dies zu massiven Auswirkungen auf die Leistung führt
In den Mozilla-Chiffren sind die RC4-Zeichenfolgen nur für die IE8 / XP-Unterstützung gemäß der Ausgabe des Qualys-Tests vorgesehen. Leider immer noch ein viel zu häufiges (Unternehmens-) Setup. In diesem Fall kann RC4 ein guter Kompromiss sein, da IE8 / XP in Bezug auf die Leistung bereits ein Problem darstellt und meine Website überhaupt nicht sicherheitskritisch ist.
Beachten Sie, dass diese Konfiguration nicht mehr sicher ist, da sie "TLS_ECDHE_RSA_WITH_RC4_128_SHA" und "TLS_RSA_WITH_RC4_128_SHA" aktiviert.
Michael
2014-12-06 03:37:58 UTC
view on stackexchange narkive permalink

Comodo-Empfehlung lautet:

  ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256-GCM-SHA384: DHE -RSA-AES128-GCM-SHA256: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA256: ECDHE-RSA-AES256-SHA: ECDHE-RSA-AES128-SHA: DHE-RSA-AES256-SHA256: DHE -RSA-AES128-SHA256: DHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA: ECDHE-RSA-DES-CBC3-SHA: EDH-RSA-DES-CBC3-SHA: AES256-GCM-SHA384: AES128 -GCM-SHA256: AES256-SHA256: AES128-SHA256: AES256-SHA: AES128-SHA: DES-CBC3-SHA: HOCH :! ANULL :! ENULL :! EXPORT :! DES :! MD5 :! PSK :! RC4 " ;  

Quelle: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/789/37/

artfulrobot
2018-05-01 16:09:45 UTC
view on stackexchange narkive permalink

https://cipherli.st/ ist eine weitere Site, die Folgendes bietet:

Die oben genannten Chiffren können in Ihrer Nginx-, Lighttpd- oder Apache-Konfiguration kopiert werden. Diese bieten eine starke SSL-Sicherheit für alle modernen Browser, und Sie erhalten ein A + für den SSL Labs-Test.

Dieses Zeug ist im Mai immer veraltet, aber für das, was es wert ist 2018 sind hier die Empfehlungen für nginx:

  ssl_protocols TLSv1.3; # Benötigt nginx > = 1.13.0, andernfalls verwenden Sie TLSv1.2ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparam.pem; # openssl dhparam -out /etc/nginx/dhparam.pem 4096ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-A25 GCM-SHA384: ECDHE-RSA-AES256-SHA384; ssl_ecdh_curve secp384r1; # Benötigt nginx > = 1.1.0ssl_session_timeout 10m; ssl_session_cache shared: SSL: 10m; ssl_session_tickets off; # Benötigt nginx > = 1.5.9ssl_stapling on; # Benötigt nginx > = 1.3.7ssl_stapling_verify on; # Benötigt nginx = > 1.3.7  
Tom Leek
2014-04-01 23:11:30 UTC
view on stackexchange narkive permalink

Choice of hash function (SHA-1 vs SHA-256) does not really depend on the cipher suite, but on the protocol version. Basically, you get SHA-256 if you use TLS 1.2, SHA-1 if you use an older version.

(Yes, I known this is a simplified description of a slightly more complex situation, but here it works.)

Normally, client and server will use the highest protocol version that they both support, so you should already get TLS-1.2 (hence SHA-256) whenever it is possible. Note that this requires that both the server's code (OpenSSL) and the client's code are recent. You can alter that mechanism explicitly with ssl_protocols.

Nun, serverseitig habe ich `ssl_protocols TLSv1 TLSv1.1 TLSv1.2;` Und ich verwende Firefox 29, das TLS 1.2-fähig sein sollte. Warum lande ich also bei SHA1?
Ich muss möglicherweise hinzufügen, dass ich auf anderen Websites SHA256 verwenden kann, damit der Browser nicht verwendet werden kann.
Chrome sagt tatsächlich, es ist TLS 1.2 mit SHA1? "Die Verbindung verwendet TLS 1.2. Die Verbindung wird mit AES_256_CBC verschlüsselt, mit SHA1 für die Nachrichtenauthentifizierung und ECDHE_RSA als Schlüsselaustauschmechanismus."
Tut mir leid aber nein. Der * PRF * -Hash hängt von der Version ab, der * HMAC * -Hash (noch) von der Suite. Um genau zu sein, gibt rfc5246 die PRF für alle bereits vorhandenen Suiten an, die (jetzt) ​​SHA-256 verwenden, und die PRF für neue Suiten wird pro Suite definiert (sowie HMAC, falls verwendet), und alle neuen Suiten definieren bisher SHA- 256 oder SHA-384. Es wäre möglich, eine neue Suite mit PRF (und / oder HMAC) SHA-1 oder sogar MD5 zu definieren, aber es wäre verrückt. Was wahrscheinlich bald Sinn machen wird, sind einige Suiten mit SHA-3.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...