Changelog
- 13. Jan 2015 – Apache DH Parameter werden in SSLCertificateFile definiert
Abgesehen von der stetigen Implementierung von Sicherheitspatches in das System, gibt es immer wieder Kleinigkeiten zu beachten.
Ich entscheide mich zugegeben relativ spät für einen Artikel zum Thema SSL Hardening, der Aufschrei verklang in den letzten Wochen ja zunehmend, dennoch…
Trotzdem besteht eine Kompatibilität zu beinahe allen Browsern, die noch Verwendung finden. Der Ausreißer aus Abbildung 1 ist keine wirkliche Überraschung…
Für Linux gilt, dass OpenSSL zu diesem Zeitpunkt mindestens in Version 1.0.1c vorliegt (zu überprüfen mit „openssl version“).
Nginx sollte in jedem Repository bereits eine Version höher 1.0.6 erreicht haben („nginx -v“).
Ein Apache Web-Server muss ab Version 2.4.7 installiert sein („apache2 -v“).
Nginx
Zuerst für den Diffie Hellman Schlüsselaustausch über 2048bit folgende Datei erstellen:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
Anschließend die Site-Konfiguration ändern:
server { [...] ssl on; ssl_dhparam /etc/nginx/dhparam.pem; ssl_certificate path-to.crt; ssl_certificate_key path-to.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers !aNULL:!eNULL:FIPS@STRENGTH; [...]
Mit obiger Konfiguration überlässt der Besucher Nginx die Auswahl des Ciphers, die Auswahl erfolgt von stärkster Methode an absteigend. Timeout und Cache werden auf 10m reduziert.
IIS
Nach langem Zögern und Hadern entscheide ich mich für die GUI-Methode, werde dafür aber etwas genauer. Ich finde es schade, dass das kleine Tool in meiner Umgebung relativ lange verborgen blieb:
Einigen dürfte der über die „Local Security Policy“ einstellbare Wert „System cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing“ ein Begriff sein.
Die Funktion triggert den DWORD32 Eintrag „Enabled“ in „HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy“ auf 1. Eine hilfreiche Funktion, wenn wirklich das ganze Betriebssystem von der FIPS-Richtlinie profitieren soll. Allerdings ist der Modus sehr weitreichend und wird selbst von Microsoft nur bedingt empfohlen, da es zu einigen Einschränkungen kommt.
Der IIS Crypto liegt ebenso in einer Command Line Version vor, in beiden Fällen in .Net 2.0 sowie 4.0. Änderungen, die hiermit erzielt werden, können mit Software wie regshot eingefangen- und zu einem PowerShell-Script umgeschrieben werden. Das erwähnt, dürften auch die Scripter zufriedengestellt sein.
Apache2
Benutzer des Apache Web-Servers in Version 2, haben es je nach Konfiguration etwas schwieriger. Der vorhandene Schalter „SSLFIPS“ wird nur funktionieren, wenn Apache2 unter Verwendung einer FIPS SSL-Bibliothek gebaut wurde. Darauf verzichte ich jedoch und biete eine Konfiguration an, die ähnlich den obigen ist.
Zuerst für den Diffie Hellman Schlüsselaustausch über 2048bit folgende Datei erstellen:
openssl dhparam -out /etc/apache2/dhparam.pem 2048
Der Inhalt der Datei „/etc/apache2/dhparam.pem“ wird an das Ende des SSL-Zertifikates angehangen. Etwa:
cat /etc/apache2/dhparam.pem >> /etc/apache2/ssl/www.crt
Apache 2.4 extrahiert DH-Parameter wie auch alle Informationen zur Zertifikatskette aus einer Datei.
In der Datei „/etc/apache2/mods-enabled/ssl.conf“ (Ubuntu/Debian) ändere oder füge ich Folgendes hinzu:
SSLProtocol all -SSLv2 -SSLv3 SSLCompression off SSLHonorCipherOrder on SSLCipherSuite "EECDH+AESGCM EDH+AESGCM EECDH EDH RSA -CAMELLIA -SEED !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS !RC4"
Anmerkungen
Ein Hinweis zum Zertifikat der Certification Authority (CA): Einige Benutzer neigen dazu, die Zertifikate zu vereinen. Etwa das öffentliche Zertifikat der CA und das privat ausgestellte Zertifikat, wie auch in meiner eigenen Konfiguration.
SSL Test-Anwendungen wie „ssllabs.com“ weisen auf den untypischen Zustand hin, einen Einfluss auf die Sicherheit hat es jedoch nicht. Es ensteht unwesentlich mehr Netzwerkverkehr, wohl etwa 1kB.
Abschließend lässt sich noch sagen, dass es sich bei den Empfehlungen – wenn man es denn so nennen kann -, die ich in diesem Artikel beschreibe, nicht um absolut FIPS 140-2 konforme Einstellungen handelt. Aber wer würde sich bei sowas auch auf einen Blog verlassen…
Jedoch resultiert eine sichere Konfiguration, die weit enfernt von paranoid und somit hoch-kompatibel bleibt.
Ich habe das gerade einmal bei mir durchgeführt, aber ich bekommen vom Apache die Fehlermeldung:
Invalid command ‚SSLDHParametersFile‘, perhaps misspelled or defined by a module not included in the server configuration.
Hi,
das ist kein kritischer Parameter und erst seit v2.4.7 in Apache verfügbar. Ich ändere es oben ab. Danke!
Grüße
André
In
„/etc/apache2/mods-enabled/ssl.conf“
habe ich nun
„SSLDHParametersFile [Dateipfad]“
mit Apache version
„Server Version: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.5 OpenSSL/1.0.1f“.
Trotzdem findet er den Befehl nicht.
Hab ich da was falsch gemacht?
Kann es sein, dass nun ein „SSLCertificateFile“ verwendet wird stattdessen?
http://www.apachelounge.com/viewtopic.php?t=5675
Hi,
danke, ich habe es im Artikel angepasst!
Das Zertifikat kann nun die DH-Parameter beinhalten, genau wie das Zertifikat für die CA, wenn du es benötigst.
Viele Grüße
André
Alternativ: https://bettercrypto.org/
Danke, der Link sollte tatsächlich nicht unerwähnt bleiben! :)
Ich moechte ebenfalls fuer bettercrypto plaedieren. Im Dokument `Applied Crypto Hardening` ist auch beschrieben, wie wir zu den Empfehlungen kamen und das ist ein sehr wichtiger Punkt, wie wir seit einem Jahr nachweislich wissen. FIPS ist diesbezueglich ja vorbelastet…