私はIntel x86_64 CPUアーキテクチャプラットフォームでDebian Bullseye Linuxディストリビューションを実行しています。プラットフォームでカスタムアプリケーションを実行します。このアプリケーションはシステムサービスとして動作する32ビットソフトウェアであり、多くの依存関係があり、その一部はQt5 v5.15.2(libqt5network5モジュールなど)とopenssl1.1のライブラリです。 opensslとQt5の新しいバージョンでは、SSLv3プロトコルは廃止されました。ただし、カスタムアプリケーションはネットワーク通信のためにSSLv3プロトコルのみをサポートします。 openssl1.1にSSLv3サポートを再追加し、使用しようとするたびに次のことを行いました。
# openssl s_client -connect <my-ip>:<my-port>
カスタムアプリケーションログに警告が表示されます。
QSslSocket::startServerEncryption Attempted to use an unsupported protocol
今私の目標は、SSLv3プロトコルのサポートをlibqt5networkモジュールに追加し、警告が削除され、正しい接続が確立されることです。また、私のカスタムアプリケーションと互換性があるには、32ビットアーキテクチャのlibqt5network5モジュールが必要です。
これまでに完了した手順は次のとおりです。
Qt5ソースコードをダウンロードしてコミットを元に戻しました(OpenSSL:Dropping support for SSLv2 and SSLv3、commit hash ID:455951f59074d6457fd2d10720ac3cbdaa966076。)。私は数時間コンパイルし、makefileエラーに苦しんだ最後にQt5ライブラリを正常に構築しました。 Qt5用の.debパッケージを作成してプラットフォームのルートファイルシステムにインストールしましたが、何も変更されていないかのように警告が表示されます。コミットを正しく元に戻すことができなかった可能性があります。ソースコードをさらに修正しようとしましたが、これにより、より多くのコンパイルエラーが発生しました。
私の質問は、目標を達成するためにQt5ソースコードで何を変更する必要がありますか?私はこの問題で3週間頭を傷つけていますが、解決策が見つかりません。
PS:私の質問に混乱があるか、情報が足りない場合は申し訳ありません。必要なすべての情報を提供する準備ができています。 PS-2:セキュリティ上の理由からSSLv3が廃止されていることを知っていますが、これは必須であるため変更できません。
時間をいただきありがとうございます。
答え1
プロローグ(既にご存知ですか?)
より簡単なソリューションであり、唯一のソリューション安全私の考えの解決策は、まだSSLv3に依存するという点で最新バージョンのTLSを使用することです。これらのライブラリのAPIは実際には変更されておらず、現在SSL3よりも最新のTLSをサポートしています。 SSL3は12年前に廃止されました(!)。 2014年に比較的マイナーな攻撃(POODLE)が発見され、それを悪用するための使いやすいツールがいくつか見つかりました。
したがって、現在POODLE緩和なしでSSL3を使用している場合、通信を暗号化したとは限りません。これは弱く難読化されており、メッセージを復号化するにはインターネット接続のみが必要です。
お尻を覆う
私はこれが要件であることを理解していますが、責任あるソフトウェア開発者として上司または顧客から「はい、これは安全ではありません。 。行く。あなた何かが間違っていると、斜線から出ることができます。
SSL3トラフィックがそのシステムを離れないように、同じシステムにTLSプロキシを設定するのに問題がある安全でないサービスを実行しているチームが、同じデータを最新のTLS1.3パケットに配置することをお勧めします。セキュリティとソフトウェアエンジニアリングの問題を同時に解決してください。 (もちろん、正しいことはアプリを修正することであり、修正することではありません。しかし、レガシーソフトウェアがどのように機能するかを理解しています。)
それをする方法
と言った、プログラムが使用しているQt5ライブラリを実際に置き換える必要があります。つまり、単にインストールすることはできません。一部Qt5バージョンを使用し、a)問題は発生せず、b)新しいバージョンが実際に使用しているバージョンを置き換えることを願っています。
したがって、Qt5ソースコードを手動でビルドする必要はありません。必要Debianメカニズムを使用して互換性のあるQt5パッケージを構築し、パッチを適用します(もう一度申し上げますが、これは悪い考えです)。
したがって、次の手順に従ってください。
前進、手動で構築したものを削除します。そうしないと、問題が発生する可能性があります。
- Debian開発ツールをインストールします。
sudo apt-get install build-essential fakeroot devscripts
- 変更したいライブラリを含むDebianパッケージを見つけます。
- 行くhttps://packages.debian.org、Debianのバージョンに適したバージョンで見つけてください。
- パッケージ情報ページの右側には、ソースパッケージの.dscファイルへのリンクがあります(ファイル私の考えではここにqtbase-opensource-srcがあるので、リンクは次のようになります。これ
- このリンクをコピーしてください。
- Debian 開発マシンで新しいディレクトリを作成し、
cd
そのディレクトリに移動します。 dget THE_LINK_YOU_JUST_COPIED
- すべてのビルド依存関係がインストールされていることを確認してください。
mk-build-deps; sudo apt-get install ./*build-deps*.deb
- サブフォルダーにある抽出されたソースコードに移動します。
cd debian
- すべての既存のパッチを適用して準備します。
quilt push -a
- 新しいパッチを開始します。
quilt new enable_ssl_v3_verybadidea
- どのファイルを変更したいかを知っているので:
quilt add file1 file2 file3 …
- その後、ファイルを編集してください。
- パッチ変更の送信
quilt refresh
- 次に、解凍したdebianの最上位ディレクトリに戻り、次のものをビルドします。
debuild -b -uc -us
- 5.で作成したディレクトリには、変更した新しいqt5 debianパッケージがあり、それを直接インストールしてからqt5パッケージを置き換えることができます。
sudo apt-get install ../*.deb
これらをインストールしてください!
なぜそんなに複雑なのですか?
まあ、私たちはQt5を構築するのが複雑であることにすべて同意することができます。 Debianはあなたのためにこれを行う方法を見つけたので、私たちは彼らのスクリプトを使うべきです。さらに、私たちは必要Debianと互換性があるにはライブラリが必要なので、Debianと同じようにビルドしてください。それ以外の場合、qt5 に依存する他の Debian パッケージの機能が中断されます。
だから私たちはDebianの方法で仕事をしなければなりません。利点は、アプリケーションをデプロイするすべてのコンピュータにコピーし、単一dpkg -i package.deb
またはapt-get install ./package.deb
コマンドを使用してインストールできる.debパッケージを入手できることです。
必要に応じてファイルを変更するときにパッチをインポートしてから、Debian ビルドプロセスを「新しい」ソースに適用して、ビルドが実際に安定していることを確認する必要があります。
あなたも
- 他のバグを修正できる Debian アップデートがファイルを上書きしないようにインストールされたパッケージを修正します。 (これはインストール方法に関係なく適用されます。)
- 手動でビルドしたすべてのアップデートにパッチを渡します(圧縮されたソースのdebian / patchesからパッチファイルをコピーしてdebian / patches / seriesに追加します)。
全体的に、あなたの要求により、あなたはシステムQt5の事実上の管理者になりました。Qt5の構築方法にかかわらず完全に。これは、管理者がユーザーのシステムのセキュリティを損なうよりも、他の解決策を見つけることを検討する必要があるという強力な主張でなければ、よくわかりません。他の会社ではそうしないので、次の給与交渉で考慮すべき事項かもしれません。あなたにこのようなことをするよう強要するのです。