wolfSSLライブラリを使って目的の組込みアプリケーションを開発する際、ビルドが終わってターゲッットにダウンロードしたアプリケーションのTLS通信をテストするのに対向テスト用のTLSクライアントないしサーバが必要になります。wolfSSLではそのような時のために、PCやLinuxなどの通常の開発環境の上で動作するTLSサーバとクライアントが含まれています。
wolfSSLライブラリを通常のセルフ環境でビルドすると、ライブラリとともに、examplesディレクトリの下にclient/client(TLSクライアント)とserver/server(TLSサーバ)がビルドされます。これらは、1往復の暗号化されたメッセージのやりとりをするだけの簡単なTLSクライアントとサーバですが、さまざまなコマンドオプションを持っているので開発環境の上で動作させて、色々な条件で目的の組込みアプリケーションとの対向テストをすることができます。
wolfSSLのビルドが終わったら、まず二つのコマンドウィンドウを開いて、一つ目のウィンドウから
$ ./examples/server/server
とコマンドを発行してみます。ビルドが正常に終了しているなら、開発環境の上で、テスト用のサーバがTLSアクセプト状態となります。次に、二つ目のウィンドウから
$ ./examples/client/client
とコマンドを発行すると、デフォルトの接続先であるlocalhost(127.0.0.1)、つまり先ほど立ち上げたテスト用サーバにTLS接続に行きます。デフォルトのポートは”11111″です。通信が成功すると次のように、使用されたTLSのバージョン、暗号スイート、楕円曲線の種類や、送られたメッセージなどが表示されるはずです。
===
SSL version is TLSv1.2
SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
SSL curve name is SECP521R1
Client message: hello wolfssl!
===
テスト用サーバとクライアントが正常に動作していることを確認したら、コマンドオプションを指定して目的のテストをしてみてください。
使用例:
クライアント側で一番最初に必要になるのは、次のような接続先、ポート指定でしょう。-h オプションで接続先のホスト、ドメイン名やIPアドレスを、-pオプションでポート番号を指定することができます。
$ ./examples/client/client -h <ホスト名> -p <ポート番号>
また、さらに
-g: 簡単なHTTP GETリクエストの送信
-v: TLSバージョンの指定(0:SSLv3, 1:TLS1.0, 2: TLS1.1: 3:TLS1.2, 4: TLS1.3)
などが可能です。
このコマンドでは証明書、鍵ファイルはデフォルトでは./certsディレクトリの下にあるclient-cert.pem(クライアント証明書)、client-key.pem(クライアント鍵)、ca-cert.pem(CA証明書)が使用されます。これらをテスト用に独自のものに変更したい場合は、
-c <file> 証明書ファイル, -k <file> 鍵ファイル, -A <file> CA証明書ファイルの各オプションで指定することができます。
また、-eオプションを指定するとこのビルドで組み込まれている暗号スイートの一覧を得ることができるので、その一覧の中から適当なスイートを選択して -lオプションで指定することで、下記の例のように特定のスイートを指定したTLS接続をテストすることができます。
$ ./examples/client/client -l ECDHE-ECDSA-AES128-GCM-SHA256
テストサーバ側を起動する際は、通常は外部からの接続を可能にするためにポートをバインドする必要があります。これには-bオプションを指定します。デフォルトのアクセプトポートは”11111″です。その他のポートを使用する場合は-pオプションで指定します。また、テストサーバはデフォルトではクライアント認証を行います。このため、クライアント側が認証に対応していない場合は、-dオプションを指定します。
./examples/server/server -b -d -p <ポート番号>
クライアント、サーバとも使用できるオプションについては -? でヘルプメッセージを表示できるので、さらに詳しい使い方についてはそちらを参照してください。