• 検索結果がありません。

Seminar wolfssl を Visual Studio で試してみよう! wolfssl Japan 合同会社エンジニア松尾卓幸 2020 年 10 月 21 日 1

N/A
N/A
Protected

Academic year: 2021

シェア "Seminar wolfssl を Visual Studio で試してみよう! wolfssl Japan 合同会社エンジニア松尾卓幸 2020 年 10 月 21 日 1"

Copied!
37
0
0

読み込み中.... (全文を見る)

全文

(1)

Seminar

wolfSSL Japan合同会社 エンジニア 松尾 卓幸 2020年10月21日

wolfSSLをVisual Studioで試してみよう!

(2)

アジェンダ

1. wolfSSLを知る

n

会社としてのwolfSSLと製品としてのwolfSSL

2. Visual Studioでサンプルのビルドと実行

n

ソリューションのビルドとサンプルプログラムの実行

n

サンプルソースの中身を見てみる

3. IoT機器開発への移行

n

ポーティング

n

IDE

4. Q&A

(3)
(4)

セキュリティ層

SSL・TLS・DTLS

アプリケーション層

トランスポート層

TCP/IP・UDP

物理ネットワーク層

RT

O

S/

RT

O

S

ファイルシステム

ここだけに フォーカス

ここだけに

フォーカス

ネットワークセキュリテイ、

暗号技術の専門チームです

(5)
(6)
(7)

世界中のお客さまに

(8)

8

適用事例

車載:インフォティメント スマート工場 病院:検査機器

写真はイメージです

電力:スマードグリッド

署名用ペンタブレット

オフィス機器

(9)

適用事例:ホーム

(10)

wolfSSLのフォーカス分野

産業/ビジネス機器: • 金融決済端末 • スマートファクトリ • FA機器、産業用ロボット • 電力監視 • ビル管理 • 複合機、プリンタ • アプライアンスボックス 家庭/一般機器: • デジタルカメラ • 掃除ロボット • 健康機器 • スマートライト • ドアホン/キー 医療機器: • 内視鏡 • CT検査装置 • 見守りベッド 自動車/鉄道関係: • 車載AV • エンジン制御 • 車両テスト/計測機器 • 配車システム • 信号システム • AV機器 • 太陽光発電 • パソコンソフト • スマホアプリ/ゲーム

写真はイメージです

高い信頼性と、長期間安定した運用、サポート

高い信頼性

長期間安定した運用サポート

(11)

wolfSSLのダウンロード

1. wolfSSL ダウンロードページへ

www.wolfssl.jp/download

2.

お客様の情報を記入し

(12)

wolfSSLパッケージの構成

wolfSSL-master-4.5.0 testsuite IDE 各IDE用プロジェクト/アプリ examples サンプルアプリ src wolfSSLソースファイル テスト用アプリケーション wolfssl ヘッダーファイル群 wolfcrypt 暗号化ライブラリ certs 証明書データ

(13)
(14)
(15)

client.c ( Clientサンプルアプリ)

Int

main

( int argc, char** argv ) { StartTCP(); TCP通信ライブラリ(winsock)の初期化 wolfSSL_Init(); wolfSSLの初期化関数 client_test( &args ); テスト本体 wolfSSL_Cleanup(); wolfSSLの終了関数 }

(16)

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)

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

処理関数

(18)

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( ….);

}

(19)

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)

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)

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)

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オブジェクト

(23)

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)

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)

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)

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)

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); }

(28)
(29)

IoT機器開発時に必要なポーティング

処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト

(30)

IoT機器開発時に必要なポーティング

処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト ファイルが扱えない機器ではデータとして保持

(31)

IoT機器開発時に必要なポーティング

処理関数 CAルート証明書 SOCKET ssl CTX sslオブジェクト ソケットのRead/Write関数のラッパーを用意して設定

(32)

IoT機器開発時に必要なポーティング

n 標準時間関数

time() / gmtime() / ValidateDate()

n メモリ関数

malloc() / free() / realloc()

n 排他制御関数

mutex

n

ポーティングガイドを用意してあります

(33)

ポーティング済み

IDEを利用する

n

IDEフォルダ以下にIDEとMPU別にプロジェクトファイル等を提供

n サンプルアプケーション

(34)

ポーティング済み

IDEを利用する

(例)

Renesas E

2

Studio + RX72N Envision Kit 用プロジェクト

(35)
(36)

Currently Available!

組込み向けTLSライブラリであるwolfSSLは、

(37)

ウェビナーへのご参加、

ありがとうございました。

wolfSSL Japan

wolfに関するご要望や追加質問などありましたら、

アンケートにご記入いただければと思います。

あるいは

[email protected]

までお寄せくださっても結構です。

参照

関連したドキュメント

(※)Microsoft Edge については、2020 年 1 月 15 日以降に Microsoft 社が提供しているメジャーバージョンが 79 以降の Microsoft Edge を対象としています。2020 年 1

3 当社は、当社に登録された会員 ID 及びパスワードとの同一性を確認した場合、会員に

委員長 山崎真人 委員 田中貞雄 委員 伊藤 健..

Bluetooth® Low Energy プロトコルスタック GUI ツールは、Microsoft Visual Studio 2012 でビルドされた C++アプリケーションです。GUI

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県

「フェンオール」 )は、 2013 年 9 月~ 2020 年 10 月に製造した火災感知器および通信 用の中継器(計

大正13年 3月20日 大正 4年 3月20日 大正 4年 5月18日 大正10年10月10日 大正10年12月 7日 大正13年 1月 8日 大正13年 6月27日 大正13年 1月 8日 大正14年 7月17日 大正15年