走り出した TLS 1.3(5、最終回):TLS 1.3をフルサポートするwolfSSL

さて、連載最後はwolfSSLのサポートするTLS1.3について紹介して締めくくることにしよう。

今まで紹介してきたようにTLS1.3では、プロトコルの内部的には大幅な改定、改善強化となっている。しかし、wolfSSL ライブラリの使用方法という面からは、今までに対して最小の変更で新しいバージョンのプロトコル機能を追加することができるように配慮されている。例えばビルド方法では、

$ ./configure –-enable-tls13

のようにTLS1.3機能追加のためのビルドオプションを一つ指定するだけでアプリケーションから使用することができる。今までと同じように make コマンドを実行すると、一連のコンパイル、リンクによってwolfSSLライブラリと基本的なサンプルプログラムが出来上がる。

ビルドをした同じパソコン上で、二つウィンドウを開いて、簡単にローカルなTLSサーバー、クライアント間通信を試してみよう。TLS1.2との違いがわかるようにWiresharkなどのパケットキャプチャツールでその内容を見ることができる。プロトコルバージョンオプションに “-v 4” とTLS1.3を指定して、

サーバ側ウインドウ:$ ./examples/server/server -v 4

クライアント側ウインドウ:$ ./examples/client/client -v 4

と実行すると、

SSL version is TLSv1.3
SSL cipher suite is TLS_AES_128_GCM_SHA256
SSL curve name is SECP256R1
I hear you fa shizzle!

のように、TLS1.3のハンドシェイク情報と簡単なサーバクライアント間のアプリケーションメッセージが表示される。Wireshark ならこんな風にローカルホスト同士のハンドシェイクとメッセージのやりとりが表示される。ハンドシェイクでは、最初のClientHello と ServerHello 以降はすべて暗号化されていることがわかるはずだ。ClientHelloのレコード詳細を見てみれば、Cipher Suiteリスト中のTLS1.3独自の暗号スイートやSupportedVersion TLS拡張の内容を見ることもできる。

 

TLS1.3のパケットキャプチャ

 

比較のために、サーバー、クライアントをオプションなしで実行させてみると、このようにデフォルトのTLS1.2でのパケットがキャプチャできる。ハンドシェイクは暗号化されていないので、レコードの種別がきちんと表示されるはずだ。

 

TLS1.2のパケットキャプチャ

 

では、次にアプリケーションから使用する際のAPIについて見てみよう。wolfSSLを使用した典型的なクライアントアプリケーションのコードは概ね次のようになっているはずだ。単純にそれをTLS1.3とするだけであれば、異なるのは最初のプロトコルバージョン指定の部分だけで、その他はまったく変更なく先ほどのような結果を得ることができる。

method = wolfTLSv1_3_client_method(); /* プロトコルバージョン指定 */
ctx = wolfSSL_CTX_new(method); /* コンテクストディスクリプタ確保 */
ssl = wolfSSL_new(ctx); /* セッションディスクリプタ確保 */

/* TCP層の接続処理 */

wolfSSL_connect(ssl); /* TLSセッション確立 */

wolfSSL_write(ssl, buff, size); /* メッセージ送信 */
wolfSSL_read(ssl, buff, size); /* メッセージ受信 */

wolfSSL_free(ssl); /* TLSセッション解放 */
wolfSSL_CTX_free(ctx); /* コンテクスト解放 */

もちろん、TLS1.3で新たに加わった新機能をもっと積極的に利用することも可能だ。この連載の最初でも紹介したような、Early Data (0-RTT)や鍵の明示的更新、また、ハンドシェイク後の認証、セッション再開時DHEなしやセッションチケットを送らないためのオプション指定など各種の新機能に対応したAPIが追加されている。

wolfSSLのTLS1.3機能は昨年夏のIETFによるRFC8446の正式サブミッションとほぼ同時に正式サポートを開始している。無償のGPLv2版はこちらからダウンロードできるので、ぜひ実機で評価してみて欲しい。また、商用版でのTLS1.3についてはinfo@wolfssl.jpまでお知らせください。

連載のご購読ありがとうございました。

wolfSSL Japan 技術サポートチーム

 連載「走り出したTLS 1.3」
 第一回
 第二回 0-RTTでいきなり暗号化メッセージ
 第三回 一律3割引き !?
 第四回 セキュリティプロトコルの技術と経験を結集
 第五回 TLS 1.3をフルサポートするwolfSSL (最終回、本ページ)