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

README

基本となるサンプルの修正

このチュートリアルとそれに伴うソースコードは、プラットフォーム間でできるだけ移植 性が高くなるように設計されています。アプリケーションに SSL と TLS を追加する方法 に焦点を当てるため、基本例はできるだけ単純化しています。不必要な複雑さを取り除く か、サポートされるプラットフォームの範囲を広げるために、Unix Network

Programming からいくつかの変更が加えられています。このチュートリアルの移植性を高 めるための提案がある場合は、support@wolfssl.com までお知らせください。

上記の本の echoserver と echoclient のに加えられた変更を次に列挙します。

echoserver(tcpserv04.c) の修正

⚫ Windowsで Fork() 関数がサポートされていないため、Fork() 関数は削除されまし た。この変更により、echoserver は、同時に一つのクライアントのみ受け付け可能 です。また、シグナル処理も削除されました。

⚫ 接続したクライアントのアドレスとポートを表示する printf 文が追加されていま す。

printf("Connection from %s, port %d\n",

inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)), ntohs(cliaddr.sin_port));

⚫ リスニング用の socket 作成後、”Address already in use” バインドエラーを回避す るために、setsocktopt() 関数呼び出しを追加しました。

⚫ 新しコンパイラの警告に対応するためにマイナーな調整 echoclient(tcpcli01.c) の修正

⚫ str_cli()関数を tcpcli01.c ファイルから str_cli.c ファイルへ移動

⚫ 新しコンパイラの警告に対応するためにマイナーな調整

unp.h ヘッダーの修正

⚫ この例で必要なものだけを含むように簡素化されました。

これらのソースコードの例は、特定の関数が大文字になります。例えば、Fputs() 及び Writen() などです。 Unix Network Programming の著者は、エラーチェックをきれいに 処理するために、通常の関数用のカスタムラッパー関数を作成しています。これについて の詳しい説明は、Unix Network Programming の 第1.4 節(11ページ)を参照してくださ い。

wolfSSL のビルドとインストール

開始する前に、上記の11.3節ソースコードの取得で示したサンプル・コード(echosever と echoclient)をダウンロードしてください。この節では、システムにwolfSSL 組み込み SSL ライブラリをダウンロード、設定、及びインストールする方法について説明します。

wolfSSL の最新のバージョンの wolfSSL をダウンロード・ページからダウンロードしてイ ンストールする必要があります。

使用可能なビルド・オプションの一覧については、wolfSSL のビルドガイドを参照してく ださい。wolfSSL は、移植性を念頭に置いて書かれており、一般的にほとんどのシステム で簡単に構築できます。 wolfSSL の構築が困難な場合、wolfSSL 製品フォーラムでサポー トを依頼してください。

Linux、*BSD、OS X、Solaris、又は他の *nix のようなシステムで wolfSSL をビルドする ときは、autoconf システムを使用できます。Windows 固有の手順については、2.3 節 Windows 上でのビルドを参照してください。wolfSSL を設定および構築するには、端末か ら次の2つのコマンドを実行します。任意のビルド・オプションを ./configure に追加する こともできます。(例: ./configure –enable-opensslextra)。

./configure make

wolfSSL をインストールします:

sudo make install

これにより、/usr/local/include/wolfSSL にヘッダーファイルが、/usr/local/bin に wolfSSL ライブラリがインストールされます。ビルドをテストするには、testsuite アプリケーショ ンを wolfSSL のルートディレクトリから実行します。

./testsuite/testsuite.test

wolfCrypt と wolfSSL が正しくインストールされていることを確認するために一連のテス トが実行されます。テストスイート・アプリケーションが正常に実行されると、次のよう な出力が表示されます。

error test passed!

base64 test passed!

asn test passed!

MD5 test passed!

SHA test passed!

SHA-224 test passed!

SHA-256 test passed!

SHA-384 test passed!

SHA-512 test passed!

SHA-3 test passed!

Hash test passed!

HMAC-MD5 test passed!

HMAC-SHA test passed!

HMAC-SHA224 test passed!

HMAC-SHA256 test passed!

HMAC-SHA384 test passed!

HMAC-SHA512 test passed!

HMAC-SHA3 test passed!

GMAC test passed!

Chacha test passed!

POLY1305 test passed!

ChaCha20-Poly1305 AEAD test passed!

AES test passed!

AES192 test passed!

AES256 test passed!

AES-GCM test passed!

RANDOM test passed!

RSA test passed!

DH test passed!

ECC test passed!

logging test passed!

mutex test passed!

memcb test passed!

SSL version is TLSv1.2

SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL curve name is SECP256R1

SSL version is TLSv1.2

SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL curve name is SECP256R1

Client message: hello wolfssl!

I hear you fa shizzle!

sending server shutdown command: quit!

client sent quit command: shutting down!

ciphers = DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128- SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256- SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM- SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE- RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-

AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128- SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA- CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20- POLY1305:ECDHE-RSA-CHACHA20-POLY1305-OLD:ECDHE-ECDSA-CHACHA20-POLY1305-OLD:DHE-RSA-CHACHA20-POLY1305-OLD

33bc1a4570f4f1abccd5c48aace529b01a42ab51293954a297796e90d20970f0 input

33bc1a4570f4f1abccd5c48aace529b01a42ab51293954a297796e90d20970f0 /tmp/output-69BRrZ

wolfSSL がインストールされたので、サンプル・コードを変更して SSL 機能を追加するこ とができます。最初に、echoclient に SSL を追加し、その後、echoserver へ移行します。

最初のコンパイル

サンプルとしてバンドルされた echoclient と echoserver をコンパイルするのに Makefile を使用できます。ディレクトリーを cd で、echoclient 又は echoserver に変更し、次のコ マンドを実行します。

make

これは、サンプル・コードをコンパイルし、どちらがビルドされているかに応じて

echoserver または echoclient のいずれかの実行可能ファイルを作成します。Makefile で使 用されている GCC コマンドを以下に示します。提供された Makefile を使用せずにサンプ ルをビルドする場合は、ディレクトリーを example ディレクトリーに変更し、次のコマン ドの tcpcli01.c(echoclient) 又は、tcpserv04.c (echoserver) を、正しいソースファイルで置 き換えてください。

gcc -o echoserver ../lib/*.c tcpserv04.c -I ../include

現在のサンプルを実行可能ファイルにコンパイルし、“echoserver” または、”echocient”

アプリケーションを作成します。コンパイル後のサンプルを実行するには、現在のディレ クトリーを目的のサンプルディレクトリへ変更し、アプリケーションを起動します。例え ば、echoserver を実行するには次のようにタイプします。

./echoserver

ローカルホスト上の echoclient をテストするために2番目の端末ウインドウを開きます。ア プリケーション起動時にサーバーのIPアドレスを指定する必要があります。この場合、

127.0.0.1 になります。現在のディレクトリーを”echoclient” ディレクトリーに変更し、次 のコマンドを実行します。echoserver は、既に実行されている必要があります。

./echoclient 127.0.0.1

echoserver と echoclient の両方が動作したら、echoserver は、echoclient から受け取った 入力をエコーバック(オウム返し)します。echoserver 又は echoclient を終了するには、

[ Ctrl + C ] を押してアプリケーションを終了します。現在のところ、これらの2つの例の間 の送信データは明瞭な平文です。クラインとサーバー間に手を加えることでやり取りを見 ることができます。

ライブラリ

wolfSSL ライブラリは、一度コンパイルされると libwolfssl という名前になり、特に設定 されない限り wolfSSL のビルドとインストールのプロセスで次のディレクトリーの下に共 有ライブラリのみが作成されます。適切なビルド・オプションを使用して、共有ライブラ リと静的ライブラリの両方を有効または無効にできます。

/usr/local/lib

必要な最初のステップは、wolfSSL ライブラリをサンプルアプリケーションとリンクする ことです。GCC コマンドを変更すると(例として echoserver を使用)、次の新しいコマ ンドが得られます。 wolfSSL は、ヘッダーファイルとライブラリを標準的な場所にインス トールするので、コンパイラは(-l か -L を使って)明示的な指定なしでライブラリを見つ けることができるはずです。-lwolfssl を使用すると、コンパイラは自動的に必要なライブ

ラリ(静的または共有ライブラリ)を選択します。

gcc -o echoserver ../lib/*.c tcpserv04.c -I ../include -lm -lwolfssl

ヘッダー

最初に必要なことは、クライアントとサーバーの両方に wolfSSL ネイティブAPIヘッダー を含めることです。クライアント用の tcpcli01.c ファイルとサーバー用の tcpserv04.c で、

先頭近くに次の行を追加します。

#include <wolfssl/ssl.h>

スタートアップとシャットダウン

コード内で wolfSSL を使用する前に、ライブラリと WOLFSSL_CTX を初期化する必要が あります。wolfSSL は、wolfSSL_Init() を呼び出すことによって初期化されます。ライブ ラリを使用して何かをする前に必ず行う必要があります。

WOLFSSL_CTX構造体(wolfSSLコンテキスト)には、証明書情報を含む各 SSL 接続の グローバル値が含まれています。単一の WOLFSS_CTX は、作成された WOLFSSL オブ ジェクトをいくつでも使用できます。これにより、信頼できる CA 証明書の一覧など、特 定の情報を一回だけ読み込むことができます。

新し WOLFSSL_CTX を作成するには、wolfSSL_CTX_new() を使用してください。この 関数には、クライアントまたはサーバーが使用する SSL または TLS プロトコルを定義す る引数が必要です。目的のプロトコルを選択するいくつかのオプションがあります。

wolfSSL は現在、SSL 3.0、TLS 1.0、TLS 1.1 、TLS 1.2、TLS 1.3、DTLS 1.0、及び DTLS 1.2 をサポートしています。これらのプロトコルはそれぞれ wolfSSL_CTX_new() へ の引数として使用できる対応する関数を持っています。可能なクライアントとサーバーの プロトコルオプションを以下に示します。SSL 2.0 は、数年前から安全性に問題があるため に wolfSSL ではサポートしていません。

EchoClient:

wolfSSLv3_client_method(); // SSL 3.0 wolfTLSv1_client_method(); // TLS 1.0

wolfTLSv1_1_client_method(); // TLS 1.1 wolfTLSv1_2_client_method(); // TLS 1.2 wolfTLSv1_3_client_method(); // TLS 1.3

wolfSSLv23_client_method(); // Use highest version possible from // SSLv3 - TLS 1.2

wolfDTLSv1_client_method(); // DTLS 1.0 wolfDTLSv1_2_client_method(); // DTLS 1.2 EchoServer:

wolfSSLv3_server_method(); // SSLv3 wolfTLSv1_server_method(); // TLSv1 wolfTLSv1_1_server_method(); // TLSv1.1 wolfTLSv1_2_server_method(); // TLSv1.2 wolfTLSv1_3_server_method(); // TLSv1.3

wolfSSLv23_server_method(); // Allow clients to connect with // TLSv1+

wolfDTLSv1_server_method(); // DTLS wolfDTLSv1_2_server_method(); // DTLS 1.2

echoclient が ecoserver に接続したときにサーバーの身元を確認できるように、CA(認証 局)証明書を WOLFSSL_CTX にロードする必要があります。CA証明書を

WOLFSSL_CTX にロードするには、wolfSSL_CTX_load_verify_locations() を使用してく ださい。この関数には、WOLFSSL_CTXポインタ、証明書ファイル、及びパスの値の3つ の引数が必要です。パス値は、PEM形式のCA証明書を含むディレクトリーを指定します。

証明書を調べるとき、wolfSSL は指定のパスを調べる前に証明書ファイルの値を調べま す。この場合、CAファイルを1つ指定するので証明書パスを指定する必要はありません。

そのため、path 引数には値 0 を使用します。 wolfSSL_CTX_load_verify_locations 関数 は、SSL_SUCCESS 又は SSL_FAILURE を返します。

wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file, const char* path)

これらをまとめると(ライブラリの初期化、プロトコルの選択、および CA 証明書)、次 のようになります。ここでは、TLS 1.2 を使用することを選択しました。

EchoClient:

WOLFSSL_CTX* ctx;

wolfSSL_Init();/* Initialize wolfSSL */

/* Create the WOLFSSL_CTX */

if ( (ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())) == NULL){

fprintf(stderr, "wolfSSL_CTX_new error.\n");

exit(EXIT_FAILURE);

関連したドキュメント