Seminar
wolfSSL Japan合同会社 エンジニア 松尾 卓幸 2020年10月21日wolfSSLをVisual Studioで試してみよう!
アジェンダ
1. wolfSSLを知る
n
会社としてのwolfSSLと製品としてのwolfSSL2. Visual Studioでサンプルのビルドと実行
n
ソリューションのビルドとサンプルプログラムの実行n
サンプルソースの中身を見てみる3. IoT機器開発への移行
n
ポーティングn
IDE4. Q&A
セキュリティ層
SSL・TLS・DTLSアプリケーション層
トランスポート層
TCP/IP・UDP物理ネットワーク層
RT
O
S/
非
RT
O
S
ファイルシステム
ここだけに フォーカスここだけに
フォーカス
ネットワークセキュリテイ、
暗号技術の専門チームです
世界中のお客さまに
8
適用事例
車載:インフォティメント スマート工場 病院:検査機器写真はイメージです
電力:スマードグリッド署名用ペンタブレット
オフィス機器適用事例:ホーム
wolfSSLのフォーカス分野
産業/ビジネス機器: • 金融決済端末 • スマートファクトリ • FA機器、産業用ロボット • 電力監視 • ビル管理 • 複合機、プリンタ • アプライアンスボックス 家庭/一般機器: • デジタルカメラ • 掃除ロボット • 健康機器 • スマートライト • ドアホン/キー 医療機器: • 内視鏡 • CT検査装置 • 見守りベッド 自動車/鉄道関係: • 車載AV • エンジン制御 • 車両テスト/計測機器 • 配車システム • 信号システム • AV機器 • 太陽光発電 • パソコンソフト • スマホアプリ/ゲーム写真はイメージです
高い信頼性と、長期間安定した運用、サポート•
高い信頼性
•
長期間安定した運用サポート
wolfSSLのダウンロード
1. wolfSSL ダウンロードページへ
www.wolfssl.jp/download
2.
お客様の情報を記入しwolfSSLパッケージの構成
wolfSSL-master-4.5.0 testsuite IDE 各IDE用プロジェクト/アプリ examples サンプルアプリ src wolfSSLソースファイル テスト用アプリケーション wolfssl ヘッダーファイル群 wolfcrypt 暗号化ライブラリ certs 証明書データclient.c ( Clientサンプルアプリ)
Int
main
( int argc, char** argv ) { StartTCP(); TCP通信ライブラリ(winsock)の初期化 wolfSSL_Init(); wolfSSLの初期化関数 client_test( &args ); テスト本体 wolfSSL_Cleanup(); wolfSSLの終了関数 }16
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
/* 全体設定 ( 振る舞い、証明書)*/
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
17
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
/* 全体設定 ( 振る舞い、証明書)*/
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
}
CTX
処理関数
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_method_ex();
WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
/* socketを作成してサーバーにTCP接続 */ SOCKET* sock = socket( ….);
}
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
/* socketを作成してサーバーにTCP接続 */
SOCKET* sock = socket( ….);
connect( *sock, …..);
}
20
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); /* セッション毎の設定*/ WOLFSSL* ssl = wolfSSL_new( ctx ); } ssl CTX sslオブジェクト
21
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); WOLFSSL* ssl = wolfSSL_new( ctx ); /* ソケットとSSLの関連付け*/ wolfSSL_set_fd( ssl, *sock ); } SOCKET ssl CTX sslオブジェクト
22
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock ); } 処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock ); /* TLSハンドシェーク実行*/ wolfSSL_connect( ssl ); }
24
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock ); /* TLSハンドシェーク実行*/ wolfSSL_connect( ssl ); } 処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト
25
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..); WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock ); wolfSSL_connect( ssl ); /*データ送受信*/ wolfSSL_write( ssl, msg, msgSz ); wolfSSL_read( ssl, buff, buffSz );
26
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..);
WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock );
wolfSSL_connect( ssl );
wolfSSL_write( ssl, msg, msgSz ); wolfSSL_read( ssl, buff, buffSz );
/* TLSセッション切断 */ wolfSSL_shutdown(ssl );
CloseSocket(*sock); }
27
client.c ( Clientサンプルアプリ)
client.c
Int main(int argc, char** argv) { StartTCP(); wolfSSL_Init(); client_test( &args ); wolfSSL_Cleanup(); }
unsigned int client_test(void* args)プログラムメインロジック {
wolfSSL_method_func mtd = wolfSSLv23_client_method_ex; WOLFSSL_CTX* ctx = wolfSSL_CTX_new( mtd(NULL) ); wolfSSL_CTX_load_verify_locations_ex( ctx, cert, 0,0 );
SOCKET* sock = socket( ….); connect( *sock, …..);
WOLFSSL* ssl = wolfSSL_new( ctx ); wolfSSL_set_fd( ssl, *sock );
wolfSSL_connect( ssl );
wolfSSL_write( ssl, msg, msgSz ); wolfSSL_read( ssl, buff, buffSz ); wolfSSL_shutdown(ssl ); CloseSocket(*sock); /* オブジェクト解放*/ wolfSSL_free(ssl); wolfSSL_CTX_free(ctx); }
IoT機器開発時に必要なポーティング
処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクトIoT機器開発時に必要なポーティング
処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト ファイルが扱えない機器ではデータとして保持IoT機器開発時に必要なポーティング
処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト ソケットのRead/Write関数のラッパーを用意して設定IoT機器開発時に必要なポーティング
n 標準時間関数
time() / gmtime() / ValidateDate()
n メモリ関数
malloc() / free() / realloc()
n 排他制御関数
mutex
n
…
ポーティングガイドを用意してあります
ポーティング済み
IDEを利用する
n
IDEフォルダ以下にIDEとMPU別にプロジェクトファイル等を提供
n サンプルアプケーション
ポーティング済み
IDEを利用する
(例)
Renesas E
2Studio + RX72N Envision Kit 用プロジェクト
Currently Available!
組込み向けTLSライブラリであるwolfSSLは、