Wofür braucht Boost.Asio use_tmp_dh_file?



  • Hallo,

    ich entwickle zurzeit ein kleines Programm mithilfe von Boost.Asio, welches über https ansprechbar sein muss. Nun bin ich soweit dem Beispiel aus den Boost-Examples[1] gefolgt, und habe es soweit implementiert. Leider bekam ich beim Aufruf von use_tmp_dh_file("dh512.pem"); den Fehler, dass die Datei dh512.pem nicht gefunden werden konnte.

    Erst habe ich es einfach mit touch dh512.pem versucht, jedoch scheint es dem Programm nicht auszureichen.

    Zum Vergleich: der Apache-Webserver braucht nur die Zertifikat (pem) und den Schlüssel (key). Wozu braucht man diese dh512.pem? Und wie erzeugt man diese?

    Dankeschön!

    [1] http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/ssl/server.cpp



  • Ach, der Apache braucht ein Zertifikat? Ja natürlich. Das wird ja für https benötigt. Das wird boost auch brauchen. Und zwar im pem-Format. Also erzeugst Du ein selbst signiertes Zertifikat genau in die angegebene Datei. Beispielsweise so:

    openssl req -x509 -nodes -days 1095 -subj "/C=DE/L=Your Town/CN=$(hostname -A)/O=Your Organization/OU=Your unit" -newkey rsa:2048 -keyout dh512.pem -out dh512.pem
    


  • Das ist mir klar, aber wozu wird dieses dh512.pem file benötigt?





  • tntnet schrieb:

    Ach, der Apache braucht ein Zertifikat? Ja natürlich.

    Die Datei ist eben kein Zertifikat und dein Beispiel daher auch nicht korrekt.

    CCode schrieb:

    Das ist mir klar, aber wozu wird dieses dh512.pem file benötigt?

    Es handelt sich hierbei um öffentliche, nicht-geheime Zahlen, die für den Diffie-Hellman-Schlüsselaustausch (für die Symmetrische Verschlüsselung) benötigt werden.
    Diese sind im Allgemeinen jedoch zu aufwändig zu berechnen, um sie bei jedem Programmstart, oder gar bei jeder Verbindung neu zu generieren, daher die extra Datei.

    Generiert werden sie mit (siehe Link von Th69)

    openssl dhparam -out dh512.pem 512
    

    Soweit ich weiss wird für DH allerdings mittlerweile eine Länge von >= 2048 empfohlen (NIST, BSI), daher also besser:

    openssl dhparam -out dh2048.pem 2048
    

    ... und ASIO mitteilen, dass diese zu verwenden ist.

    Besonders wenn es einem mehr um die Verschlüsselung an sich als um das (selbst signierte) Zertifikat geht, ist hier eine hohe Schlüssellänge wichtig, da mit DH der Schlüssel ausgehandelt wird,
    mit dem im weiteren Verlauf die Kommunikation verschlüsselt wird. Die DH-Parameter sind zwar nicht geheim, aber wenn sie zu schwach sind, könnte der eigentliche geheime Schlüssel abgegriffen
    werden. Dann hilft auch eine starke symmetrische Verschlüsselung nix.

    Edit: Juhu! Mein 292^9ter Beitrag! 😉



  • Finnegan schrieb:

    Edit: Juhu! Mein 292^9ter Beitrag! 😉

    Und ich habe endlich diese Paragraphenklammern verstanden 😉


Log in to reply