wolfSSL は IoT デバイス、組み込み向け小型、軽量の SSL/TLS ライブラリーです。多くのリアルタイムOSを含む組み込み向けOSにポーティングされていると同時に、サードパーティー向けのインテグレーションにも力を入れています。今回は、Qt 5の最新版 Qt 5.15 のSSL/TLSバックエンドをwolfSSLでビルドし、簡単なサンプルを動かしてみます。
##概要
QtのデフォルトSSL/TLSライブラリーはOpenSSLです。このバックエンドをwolfSSLで置き換えます。今回は、LinuxやMacOS上でのコマンド環境を想定しています。
##QtのSSL/TLSバックエンドを wolfSSLとしてビルドする
###1.wolfSSLソースコードのダウンロードとパッチの入手
Qt 5.15 に対応した wolfSSL はもう間もなくの公開に向けて準備中です。また、Qt 5.15 のSSL/TLSバックエンドをwolfSSLに変更するためにパッチが必要となります。これらの入手については、公開までの少しの間wolfSSL までお問い合わせください。
###2.wolfSSLのビルド
入手したwolfSSLをビルドします。
--prefix オプションで wolfSSL ライブラリーを任意のフォルダーにインストールします。
$ cd wolfssl
$ ./configure --enable-qt --enable-qt-test --enable-alpn --enable-rc2 --prefix=/custom/install/path
$ make
$ make check
$ sudo make install
###3.リンク用の環境変数を設定
QtのSSL/TLSバックエンドとしてwolfSSLをリンクするために、次の環境変数を設定します。
Step2の-prefix オプションで指定した、/custom/install/pathをライブラリーパスとして指定します。
$ export WOLFSSL_LIBS="-L/custom/install/path/wolfssl-install/lib -lwolfssl"
###4.Qtのソースコードをダウンロード
今回は、Qt のバージョン 5.15.2 を使用します。qt5 ディレクトリへ5.15.2 ブランチをクローンします
$ git clone git://code.qt.io/qt/qt5.git --branch v5.15.2
qt5 ディレクトリでサブモジュールを初期化します
$./init-repository --module-subset=qtbase
コンパイル時間節約のために、"--module-subset=qtbase"を指定していますが、フルモジュールでコンパイルするさいには、"--module-subset=qtbase"を除きます。
###5.Qtにパッチを適用
QtのSSL/TLSバックエンドをwolfSSLに変更するために、パッチを適用します。ステップ1で入手したパッチをqt5フォルダーに配置しておきます。
$ cd /path/to/qt5/qtbase
$ git apply -v ../wolfssl_qt_src.patch
###6.Qtをビルド
ビルド用のフォルダを作成し、Qtのビルドコンフィグを実行します。
$ cd ../../
$ mkdir qt_build
$ cd qt_build
$ ../qt5/configure -wolfssl-linked -I/path/to/wolf-install/include/wolfssl -I/path/to/wolf-install/include
コンフィグが終了したら、make を実行します。
$ make
##QtのサンプルGUIプログラムを動かしてみる
出来上がった Qt のサンプルGUIプログラムを動かしてみます。また、Wireshark を使ってTLS通信を覗いてみます。
###1.サンプルGUIプログラムの起動
$ cd /path/to/qtbase/examples/network/securesocketclient
$ ./securesocketclient
次の画面が表示されるので、"Connect To Host"をクリックします。
接続の様子は、wireshark で覗いてみます。
TLS 1.3 で接続出来ているようです。
あらためて、wolfSSL を使用しているか確認してみます。
$ ldd securesocketclient
wolfSSL を使用してるようです。
##まとめ
今回は wolfSSL を Qt 5 の最新版バージョン 5.15 のSSL/TLSバックエンドとして使用する方法を紹介しました。
wolfSSLに関する詳細なドキュメント、製品情報については下記を参照してください。wolfSSLは、ソフトウェアの内容は同じですが無償のオープンソース版と有償商用版のデュアルライセンスとなっています。製品への組み込みの際は商用ライセンス契約が必要です。
wolfSSLのQtサポートまとめ:https://www.wolfssl.jp/qt_support/
ドキュメント:https://www.wolfssl.jp/docs/
英語サイト:https://www.wolfssl.com/
日本語サイト:https://www.wolfssl.jp/
Twitter: https://twitter.com/wolfSSL_Japan/