wolfSSLサポートFAQ

 

よくあるご質問

このページではwolfSSLチームに寄せられるた質問とその回答を紹介しています。
もしこのページの情報で解決しない場合は、wolfSSLマニュアルを参照するかsupport@wolfssl.comまでご連絡ください。
 

1.wolfSSLアプリケーションのビルドコンフィグレーションはどのように指定できますか?

wolfSSLアプリケーションのビルドトラブルで最もよく見られる問題の一つは、アプリケーションとライブラリのミスマッチです。もしwolfSSLライブラリをアプリケーションとは独立にコンパイルした場合、ライブラリのビルド時に設定したコンフィグレーションオプションと同じものをアプリケーションのビルド時にもインクルードしなければいけません。

1) configureコマンドでビルドする場合

./configureコマンドを実行すると、指定したオプションを含んだ<wolf-root>/wolfssl/options.hファイルが生成されます。アプリケーションコードには以下の行を追加してください。このパターンはoptions.h以外の他のインクルードファイルでも使えます。

#include <wolfssl/options.h>
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/ssl.h>
/* 以下他のwolfSSLヘッダーファイル */

 
2) 組み込み用のIDEや独自のMakefileでビルドする場合

wolfSSLをソースコードから直接ビルドした場合、options.hには生成されたオプションが何も含まれていません。そんな時はWOLFSSL_USER_SETTINGSオプションを定義して、アプリケーションのプロジェクト内にuser_settings.hというヘッダーファイルを作ります。そして、user_settings.hへのインクルードパスが設定されていることを確認してください。上記のようなインクルードパターンはoptions.h以外の他のインクルードファイルにも使うことができます。

以下はプラットフォームごとのuser_settings.hの例です。

  • Windows: /IDE/WIN/user_settings.h
  • GCC ARM: /IDE/GCC-ARM/Header/user_settings.h
  • NXP ARM: /IDE/ROWLEY-CROSSWORKS-ARM/user_settings.h
  • Xcode: /IDE/XCODE/user_settings.h

トップに戻る

 

2. サーバー認証に必要な CA 証明書はどのように取得すれば良いですか?

クライアントアプリケーションやデバイスに読み込む必要がある CA (ルート)証明書を見つけるには少し前提知識が必要です。最初にwolfSSLがどのように証明書チェーンを検証するかを理解する必要があります。wolfSSLマニュアルの7.3に証明書を検証する手順の説明がありますので参照してください。

wolfSSLでは、証明書チェーンが信頼できるものかを検証するためにトップ(またはルート)証明書が必要です。例えば、ある証明書チェーン(A -> B -> C)で、証明書 C は 証明書 B で署名され、証明書 B は証明書 A で署名されているとします。wolfSSL は証明書チェーン全体を検証するためには証明書 A のみを信頼された証明書として読み込む必要があります。

シンプルな具体例を見てみましょう。
サーバー証明書チェーンが以下のようになっているとします。

A
|
+----> B
   |
   +----> C

wolfSSLクライアントは、信頼するルート証明書として証明書 A をすでに wolfSSL_CTX_load_verify_[locations | buffer] を使用し読み込んでいるとします。クライアントがサーバーから証明書チェーンを受信すると、証明書 A の署名で証明書 B を検証します。証明書 B の確認後、もし証明書 B が信頼されるルート証明書としてwolfSSLに登録されていなければ、内部に信頼する証明書として登録します。(wolfSSLは、コモンネームハッシュ、公開鍵、鍵タイプなど証明書の検証に必要な項目のみ保存します。)証明書 B の登録が成功すると、証明書 C の検証に証明書 B を使用します。

このようにwolfSSLサーバーに信頼できるルート証明書が読み込まれていれば、サーバーが証明書チェーン (A -> B -> C)または (B -> C)を送ってきてもサーバー証明書チェーンを検証することができます。ただし、もしサーバーが証明書 C の情報しか送ってこなかった場合、wolfSSLクライアントには中間証明書 B の情報がないため証明書チェーンの検証はできません。そのような場合は、証明書 A 及び 証明書 B の両方の証明書を事前にクライアントに読み込んでおく必要があります。つまり、CA 証明書として、ルート証明書 A 及び中間証明書 B が必要になります。

Google Chrome などのブラウザから CA 証明書を取得する場合は、取得したいサーバーにアクセスし「証明書のパス」を表示し、ルート証明書及び証明書 B に相当する証明書を各々ファイルに保存します。保存した証明書は、wolfSSL_CTX_load_verify_[locations | buffer] を必要な回数だけ呼び出し wolfSSL に読み込みます。wolfSSL は、信頼する証明書として関数呼び出し毎に、内部でそれらの証明書を追加保持します。

証明書登録用の関数例:

// PEM形式の証明書ファイルを登録する関数
wolfSSL_CTX_load_verify_locations(ctx, fileName, NULL);

// DER形式の証明書ファイルを登録する関数
wolfSSL_CTX_der_load_verify_locations(ctx, fileName, WOLFSSL_FILETYPE_ASN1);

// DER形式の証明書バイト配列データを登録する関数
wolfSSL_CTX_load_verify_buffer(ctx, buf, bufLength, WOLFSSL_FILETYPE_ASN1)

// PEM形式の指定フォルダ内証明書ファイル一式を登録する関数
wolfSSL_CTX_load_verify_locations(ctx, NULL, directoryName);

トップへ戻る

 

3.証明書ファイルをC言語のデータに変換できますか?

証明書バッファを生成するには、Perlスクリプト<wolfssl-root/gencertbuf.pl(generate certificate buffersの略)をお使いください。

  1. 取得した証明書を好きな場所に配置してください。(wolfSSLは<wolfssl-root>/certsディレクトリに証明書ファイルを置きますが、どこにおいても問題ありませんのでユーザー環境で最適な場所を選んでください。)
  2. gencertbuf.plスクリプトの一部をお使いの証明書にあわせて@fileListの値を変更してください。(例えば、1024bit RSAの証明書なら1024、ECC 256bit 証明書なら256と変更してください。)
  3. スクリプトを実行すると、<wolfssl-root>/wolfssl/certs_test.hヘッダーファイルが生成されます。

スクリプトはマニュアルで実行してください。(perl gencertbuf.plまたは./gencertbuf.pl)

トップに戻る

 

4. wolfSSLに必要なFlash/RAMのサイズを知るには?

wolfSSLのメモリー消費量はコンパイル時にどのようなオプションを指定してどのような機能を使うかによって変わります。また、オプションにはメモリーの使用方法や使用量を指定するものもあります。wolfSSLのリソース使用についてはwolfSSL Resource Useガイドをご参照ください。

最大リソース使用量の主な要因は鍵のサイズです。大きな鍵サイズはリソースの利用量を増やします。

ページのトップへ戻る

 

5. wolfSSLまたはwolfCryptで標準関数malloc/free以外のメモリー管理を選べますか?

USER_MALLOCオプションを指定することによってユーザー独自のmalloc関数をwolfSSLで使うことができます。

ページのトップへ戻る

 

6. wolfSSLのビルド方法を教えてください。(*NIX, Windows, 組み込みシステム)

wolfSSLユーザーマニュアルの第2章「wolfSSLのビルド」をご参照ください。

ページのトップへ戻る

 

7. IDEのプロジェクトでwolfSSLを使うにはどうしたらいいでしょうか?どのファイルとヘッダーが必要ですか?

wolfSSLは、多くのポピュラーなIDE環境用のプロジェクトファイルを提供しています。プロジェクトファイルと利用方法についてはwolfSSLソースのIDEディレクトリの下にあります。


src/*.c
wolfcryptsrc/*.c
wolfssl/*.h
インクルードパスとしてwolfSSLソースファイルのルートディレクトリを指定してください。

様々なプラットフォームでwolfSSLをビルドするより詳しいドキュメントはwolfSSLユーザーマニュアルのセクション2.4「(組み込みシステム向け)非標準環境でのビルド」をご参照ください。

ページのトップへ戻る

 

8. 自社のプラットフォーム上でベンチマークデータを取得できますか?

wolfSSLはお客様のプラットフォーム上で動作させることのできるベンチマークアプリケーションを提供しています。ベンチマークアプリケーションはビルドで有効化された暗号アルゴリズムでのベンチマークを行います。アプリケーションのソースファイルはwolfcrypt/benchmark/benchmark.cです。*nixプラットフォームでは、ベンチマークは./wolfcrypt/benchmark/benchmarkで実行することができます。configure, makeによるビルドでは、ベンチマークアプリケーションはデフォルトでコンパイルされます。

 

9. サーバーとクライアントを接続した時、共通の暗号スイートが見つかりませんでした。なぜでしょうか?

wolfSSLはクライアントとサーバーの両方で共通の暗号スイートになるよう設定してコンパイルすることができます。また、configureオプションで暗号スイートを追加することができます。configureオプションは.*nix環境の場合 ./configure –helpで確認することができます。

*nix環境でデフォルトの暗号スイートを確認するには、wolfSSLルートディレクトリから以下のコマンドを実行します。

./examples/client/client -e

Windows環境でデフォルトの暗号スイートを見るためには、client.exeコマンドがあるディレクトリから以下のように実行します。

./client.exe -e

ページのトップへ戻る

 

10. 最大TLSコードサイズを小さくすることは可能でしょうか?

組み込みシステムのメモリ制限のためにTLSレコードサイズを制限することができます。

通常のTLSの最大レコード長は2^14バイト(~16k)です。wolfSSLは最大レコードサイズを制限するために2つの方法があります。1つ目は、configureの–enable-maxfragmentオプションで指定する方法です。これはクライアントがサーバーに接続する時、wolfSSL_CTX_UseMaxFragment関数またはwolfSSL_UseMaxFragment関数を呼ぶために必要になります。もし同じサーバーに複数の接続を行いたい場合は、wolfSSL_CTX_UseMaxFragmentの方をお使いください。

2つ目の方法はMAX_RECORD_SIZEを定義する方法です。この場合、サーバーとクライアントの両方に設定する必要があります。もしクライアントの設定ができない場合はこのオプションは使えません。

 

11. wolfSSLのアプリケーションで、X509証明書から公開鍵を取り出すことができますか?

wolfSSLは、この機能を持つwolfSSL_x509_get_pubkey()を備えていて、WOLFSSL_EVP_PKEYのポインタを返します。WOLFSSL_EVP_PKEYは、公開鍵に関連したメンバーを持つ構造体でポインタから直接アクセスすることができます。構造体の宣言は<wolfssl/ssl.h>にあります。

ページのトップへ戻る

 

12. SSL/TLSや暗号処理に関するサンプルコードはありますか?

オフィシャルのwolfSSL GitHubリポジトリにあります。https://github.com/wolfSSL/wolfssl-examplesからダウンロードすることができます。

サンプルコードとして3DES,AES,Camelliaなどの暗号アルゴリズム、TLSクライアントとサーバー、wolfSSL CertManager、署名や検証など各種のサンプルプログラムがあります。

ページのトップへ戻る

 

13. 必要なアルゴリズムやプロトコルをビルド時に有効にしたのですが、サーバーと接続できません。

サーバーによっては特定のTLS拡張やECCカーブが必要な場合があり、またサポートされている暗号やプロトコルバージョンに関わらず接続を無視する場合もあります。configureスクリプト(またはMakefileプロジェクトやIDEプロジェクト)なしでwolfSSLをビルドする場合は、HAVE_TLS_EXTENSIONSマクロとHAVE_SUPPORTED_CURVESマクロが定義されていることを確認してください。

ページのトップへ戻る

 

14.証明書に署名を行うにはどのようにすればいいですか?

証明書の署名は、多くのセキュリティプロトコルの基本的な機能です。wolfSSLは証明書の署名を簡単に行えるようにするためのAPIを備えています。キーとなるAPIは以下の通りです。

また、これらのAPIの使い方やどのような状況で利用できるかを説明するためのサンプルコードのリポジトリがあります。この中にはCSRのサンプルがwolfssl-examples/certgen/にあります。このサンプルをビルドして動かすためにはwolfSSLがインストールされている必要があります。wolfSSLはダウンロードページからかまたはgitHubリポジトリからダウンロードしてください。サンプルコードはgitHubのwolfSSLサンプルコードリポジトリ(https://github.com/wolfSSL/wolfssl-examples)からダウンロードしてください。
wolfSSLとサンプルコードをgitHubからクローンしてビルドする方法は以下の通りです。

# Download, build, and install wolfSSL
git clone https://github.com/wolfSSL/wolfssl #(if not downloaded from the download page)
cd wolfssl
./autogen.sh
./configure --enable-certgen --enable-certreq
make
sudo make install
cd ..

# Download and build the CSR example
git clone https://github.com/wolfSSL/wolfssl-examples
cd wolfssl-examples/certgen/
make

./csr_example
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIOkUjkguP0GTizna+13jooJu55sbQBsAqqkMZqjQeO55oAoGCCqGSM49
AwEHoUQDQgAEWYTvqyt3e3nLkIWqBhjmZcxLu8XcLN+mUW+g4dO5qdGxnKEYxaz1
3/K3dXlU75e3MlCIjC5gTiEuPbs3N+eIzw==
-----END EC PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIBTDCB8wIBAjCBkDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk9SMREwDwYDVQQH
DAhQb3J0bGFuZDEQMA4GA1UECgwHd29sZlNTTDEUMBIGA1UECwwLRGV2ZWxvcG1l
bnQxGDAWBgNVBAMMD3d3dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5m
b0B3b2xmc3NsLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFmE76srd3t5
y5CFqgYY5mXMS7vF3CzfplFvoOHTuanRsZyhGMWs9d/yt3V5VO+XtzJQiIwuYE4h
Lj27NzfniM+gADAKBggqhkjOPQQDAgNIADBFAiEAy8GSm89MAU69hKfp6rwaR3Eg
IjaBzRZ4VxRl22LQ+IcCIEiP9OLVIemAfZz2D26g/3oIF2ETjjwAhh8UpZSiJmdh
-----END CERTIFICATE REQUEST-----

ページのトップへ戻る