web-dev-qa-db-ja.com

-DOPENSSL_NO_HEARTBEATSを使用してOpenSSLを再コンパイルすると、どのような副作用がありますか?

非常にオープンエンドの場合は申し訳ありません。 Heartbleedエクスプロイトに関するすべてのニュースがGoogleに殺到しており、私はそれが何をしているのか理解できません。 再コンパイルしても大丈夫ですか?

8
user2738698

OpenSSLを_-DOPENSSL_NO_HEARTBEATS_でコンパイルすると、「Heartbeat」と呼ばれるSSL/TLS拡張のサポートを除いて、「通常の」OpenSSLで実行できるすべてのことを実行できるOpenSSLライブラリとツールが得られます。その拡張は RFC 652 で説明されています。それはかなり最近の拡張です。

すべての拡張機能と同様に、SSL接続での使用は、ハンドシェイクの初期段階で発生するネゴシエーションの影響を受けます。基本的に、拡張機能は、クライアントがそれをサポートし、それを使用したい場合(ClientHello内)およびサーバーがサポートすることを応答した場合にのみ使用できます。それは(ServerHelloで)使用しても問題ありません。 SSLライブラリがハートビートサポートなしでコンパイルされた場合、ハートビートサポートをアドバタイズしません。その拡張子が表示されるハンドシェイクに関与している場合、「不明な拡張子」として処理されます。つまり、完全に無視されます。

それ以外は、新しくコンパイルしたOpenSSLは前のOpenSSLと同じように動作し、問題なく動作します。壊れるのは、特定のアプリケーションがハートビート拡張機能の使用を要求した場合です。その拡張機能は拡張機能をアクティブにして使用しようとし、機能しません。

OpenSSLソースコードを見ると、SSL_heartbeat()関数(Heartbeat対応のアプリケーションによって「ビート」を送信するために使用)は、汎用のSSL_ctrl()関数を呼び出すマクロであるように見えますいくつかの数値パラメータを使用します。これは、アプリケーションが実際にその機能を使用したい場合に、ハートビートなしのOpenSSLライブラリを提供すれば、リンクエラーは発生しないことを意味します。コードが実行されます。ただし、ビート送信コールはエラーステータスになります。アプリケーションがどのように反応するかは、アプリケーションによって異なります。実際、アプリケーションの観点からは、ピアがハートビートをサポートしていないかのようになります。

幸いなことに、この拡張機能はごく最近のものであり、Heartbeatを認識しているアプリケーションだけでなく、Heartbeatを使用するアプリケーションも多くなければなりません。おそらく、再コンパイルされたOpenSSLは何も壊さないので、あなたの質問への答えはyes、それはです。おそらく再コンパイルしても問題ありません。

12
Thomas Pornin