|
| 1 | +# wolfSSL JNI と wolfJSSE のコンパイル |
| 2 | + |
| 3 | +wolfJSSE をコンパイルする方法を3つ、ここで紹介します。 |
| 4 | +Unix コマンドライン、Android Studio ビルド、汎用 IDE ビルドを使用します。 |
| 5 | + |
| 6 | + |
| 7 | +## Unix コマンドライン |
| 8 | + |
| 9 | +このセクションの手順を実行する前に、第2章に記載のシステム要件とされているものがインストールされていることを確認してください。 |
| 10 | + |
| 11 | +パッケージのルートフォルダの `java.sh` スクリプトは、ネイティブのJNI C ソース ファイルをコンパイルしてUnix/Linux または Mac OSX 用の共有ライブラリとするために使用されます。 |
| 12 | + |
| 13 | +このスクリプトは、OSX (Darwin) から Linux までのOSを自動検出してインクルード パスと共有ライブラリ拡張タイプをセットアップしようとします。さらに、このスクリプトはJNI C ソース ファイルに対して gcc を直接呼び出して、`./lib/libwolfssljni.so` または`./lib/libwolfssljni.dylib`を生成します。 |
| 14 | + |
| 15 | + |
| 16 | +``` |
| 17 | +$ ./java.sh |
| 18 | +
|
| 19 | +Compiling Native JNI library: |
| 20 | + WOLFSSL_INSTALL_DIR = /usr/local |
| 21 | + Detected Linux host OS |
| 22 | + Linux x86_64 |
| 23 | + Java Home = /usr/lib/jvm/java-8-openjdk-amd64 |
| 24 | + Generated ./lib/libwolfssljni.so |
| 25 | +``` |
| 26 | +`/usr/local` にインストールされていないネイティブ wolfSSL ライブラリに対してリンクする場合には、 wolfSSL インストールフォルダを表す引数を `java.sh` に渡す必要があります。 |
| 27 | + |
| 28 | +例えば: |
| 29 | + |
| 30 | + |
| 31 | +``` |
| 32 | +$ ./java.sh /path/to/wolfssl/install |
| 33 | +``` |
| 34 | + |
| 35 | +Javaソースファイルのビルドには`ant`を使います: |
| 36 | + |
| 37 | +``` |
| 38 | +$ ant |
| 39 | +``` |
| 40 | +`ant` に対して指定可能なビルドターゲット: |
| 41 | + |
| 42 | + |
| 43 | +- `ant` (アプリケーションに必要なjarのみビルド) |
| 44 | +- `ant test` (jarとテスト実行に必要なテストをビルド。要JUNITのセットアップ) |
| 45 | +- `ant examples` (jarとサンプルプログラムをビルド) |
| 46 | +- `ant clean` (Javaアーティファクトをクリーンアップ) |
| 47 | +- `ant cleanjni` (ネイティブアーティファクトをクリーンアップ) |
| 48 | + |
| 49 | +次のコマンドは、プロジェクトで wolfJSSE を使用するために必要な wolfJSSE jar とネイティブ コードをビルドします。 JUnit テストをコンパイルして実行するには、コマンド `ant test` を使用します: |
| 50 | + |
| 51 | +``` |
| 52 | +$ ant test |
| 53 | +``` |
| 54 | + |
| 55 | +コマンドを実行すると、テストがコンパイルされ、主な wolfJSSE コードとテスト結果の出力が、wolfJSSE テストスイートと wolfSSL JNI テストスイートの最後に合格した全テストの要約とともに表示されます。 ビルドが成功すると、最後に "BUILD SUCCESSFUL" というメッセージが表示されます。 |
| 56 | + |
| 57 | + |
| 58 | + |
| 59 | +``` |
| 60 | +[junit] WolfSSLTrustX509 Class |
| 61 | +[junit] Testing parse all_mixed.jks ... passed |
| 62 | +[junit] Testing loading default certs ... passed |
| 63 | +[junit] Testing parse all.jks ... passed |
| 64 | +[junit] Testing verify ... passed |
| 65 | +... |
| 66 | +
|
| 67 | +build: |
| 68 | +
|
| 69 | +BUILD SUCCESSFUL |
| 70 | +Total time: 18 seconds |
| 71 | +``` |
| 72 | +wolfJSSEにバンドルされているサンプルプログラムをビルドして実行するためには`ant examples`を使います: |
| 73 | + |
| 74 | +``` |
| 75 | +$ ant examples |
| 76 | +``` |
| 77 | + |
| 78 | +## Android Studio を使ってのビルド |
| 79 | + |
| 80 | +Android Studio プロジェクトが、ディレクトリ `IDE/Android` に用意してあります。これは、wolfssljni / wolfJSSE の Android Studio プロジェクト ファイルのサンプルプログラムです。このプロジェクトは参照用としてのみ使用してください。 |
| 81 | + |
| 82 | +テスト時に使用されるツールとバージョン情報の詳細については、`wolfssljni/IDE/Android/README.md` を参照してください。 次の手順は、Android デバイスまたはエミュレーターでこのサンプルプログラムを実行するために必要です。 |
| 83 | + |
| 84 | + |
| 85 | +### 1. ネイティブ wolfSSL ライブラリのソースをプロジェクトに追加 |
| 86 | + |
| 87 | +このサンプルプロジェクトは、ネイティブwolfSSL ライブラリのソースファイルをコンパイルしてビルドするように既に設定されています。ただし、wolfSSL ファイル自体はパッケージに含まれていないので、適切なバージョンをダウンロードしてリンクする必要があります。以下のオプションのいずれかを使用して、このプロジェクトに wolfSSL を追加します。 |
| 88 | + |
| 89 | +プロジェクトはwolfSSL ソースコードのディレクトリを `wolfssljni/IDE/Android/app/src/main/cpp/wolfssl`から探します。 |
| 90 | + |
| 91 | +これは複数の方法で追加できます: |
| 92 | + |
| 93 | +- オプション A: www.wolfssl.com から最新の wolfSSL ライブラリ リリースをダウンロードします。解凍し、名前を"wolfssl"に変更して、ディレクトリ`wolfssljni/IDE/Android/app/src/main/cpp/` に配置します。 |
| 94 | + |
| 95 | + |
| 96 | +``` |
| 97 | +$ unzip wolfssl-X.X.X.zip |
| 98 | +$ mv wolfssl-X.X.X wolfssljni/IDE/Android/app/src/main/cpp/wolfssl |
| 99 | +``` |
| 100 | +- オプション B: GitHub を使用してwolfSSL をクローンすることもできます: |
| 101 | + |
| 102 | +``` |
| 103 | +$ cd /IDE/Android/app/src/main/cpp/ |
| 104 | +$ git clone https://github.com/wolfssl/wolfssl |
| 105 | +$ cp wolfssl/options.h.in wolfssl/options.h |
| 106 | +``` |
| 107 | +- オプション C: システム上の wolfSSL ディレクトリへのシンボリック リンクを作成: |
| 108 | + |
| 109 | + |
| 110 | +``` |
| 111 | +$ cd /IDE/Android/app/src/main/cpp/ |
| 112 | +$ ln -s /path/to/local/wolfssl ./wolfssl |
| 113 | +``` |
| 114 | + |
| 115 | +### 2. Java シンボリックリンクを更新 (Windowsユーザーのみ必要) |
| 116 | + |
| 117 | +次の Java ソース ディレクトリは、Unix/Linux の symlinkです: |
| 118 | + |
| 119 | + |
| 120 | +``` |
| 121 | +wolfssljni/IDE/Android/app/src/main/java/com/wolfssl |
| 122 | +``` |
| 123 | +これは Windows では正しく機能しないので、新しい Windows シンボリック リンクを作成する必要があります: |
| 124 | + |
| 125 | +1) Windows コマンド プロンプトを開きます (右クリックし、`管理者として実行`)。 |
| 126 | +2) `wolfssljni\IDE\Android\app\src\main\java\com`に移動。 |
| 127 | +3) 既存のシンボリックリンクファイルを削除します ("wolfssl"という名前のファイルとして表示されます)。 |
| 128 | + |
| 129 | + |
| 130 | +``` |
| 131 | +del wolfssl |
| 132 | +``` |
| 133 | + |
| 134 | +4) `mklink` で新しい相対シンボリック リンクを作成します: |
| 135 | + |
| 136 | +``` |
| 137 | +mklink /D wolfssl ..\..\..\..\..\..\..\src\java\com\wolfssl\ |
| 138 | +``` |
| 139 | + |
| 140 | +### 3. サンプルプログラムのJKSファイルをAndroid用のBKSに変換 |
| 141 | + |
| 142 | +Android デバイスでは、BKS 形式のキーストアが想定されています。 JKS サンプルバンドルを BKS に変換するには、次のコマンドを使用します(注: Bouncy Castle の Web サイトから bcprov JAR のバージョンをダウンロードする必要があります): |
| 143 | + |
| 144 | + |
| 145 | +``` |
| 146 | +cd examples/provider |
| 147 | +./convert-to-bks.sh <path/to/provider> |
| 148 | +``` |
| 149 | +例えば、bcprov-ext-jdk15on-169.jar を使用する場合: |
| 150 | + |
| 151 | + |
| 152 | +``` |
| 153 | +cd examples/provider |
| 154 | +./convert-to-bks.sh ~/Downloads/bcprov-ext-jdk15on-169.jar |
| 155 | +``` |
| 156 | + |
| 157 | +### 4. BKSファイルをAndroidデバイス/エミュレータにプッシュ |
| 158 | + |
| 159 | +BKS バンドルを証明書とともにデバイスにプッシュします。 エミュレーター/デバイスを起動し、"adb push"を使用します。 例として、wolfssljniのルートディレクトリからの以下の様なコマンドを実行します。 この手順は、Android Studio を起動してプロジェクトをコンパイルした後に行うことができますが、アプリまたはテスト ケースを実行する前に行う必要があります。 |
| 160 | + |
| 161 | + |
| 162 | +``` |
| 163 | +adb shell |
| 164 | +cd sdcard |
| 165 | +mkdir examples |
| 166 | +mkdir examples/provider |
| 167 | +mkdir examples/certs |
| 168 | +exit |
| 169 | +adb push ./examples/provider/*.bks /sdcard/examples/provider/ |
| 170 | +adb push ./examples/certs/ /sdcard/examples/ |
| 171 | +adb push ./examples/certs/intermediate/* /sdcard/examples/certs/intermediate/ |
| 172 | +``` |
| 173 | + |
| 174 | +### 5. サンプルプログラムプロジェクトをAndroid Studioにインポートしてビルド |
| 175 | +1) wolfssljni/IDE/ の"Android"フォルダをダブルクリックして、Android Studio プロジェクトを開きます。 または、Android Studio 内から、wolfssljni/IDE ディレクトリにある"Android"プロジェクトを開きます。 |
| 176 | + |
| 177 | +2) プロジェクトをビルドし、アプリ -> java/com/example.wolfssl から MainActivity を実行します。 これにより、/sdcard/ ディレクトリ内の証明書にアクセスする許可が求められ、成功するとサーバー証明書情報が出力されます。 |
| 178 | + |
| 179 | +3) オプション: androidTests は、許可が与えられた後に実行できます。 app->java->com.wolfssl->provider.jsse.test->WolfSSLJSSETestSuite |
| 180 | + および app->java->com.wolfssl->test->WolfSSLTestSuite |
| 181 | + |
| 182 | + |
| 183 | +## 汎用 IDE でビルド |
| 184 | + |
| 185 | +一般的な IDE ビルドの場合、IDE で新しいプロジェクトを作成し、`src/java` からソース ファイルを追加します。 以下のパッケージになります: |
| 186 | + |
| 187 | + |
| 188 | +``` |
| 189 | +com.wolfssl |
| 190 | +com.wolfssl.provider.jsse |
| 191 | +com.wolfssl.wolfcrypt |
| 192 | +``` |
| 193 | +コマンド ラインから java.sh を実行するか、IDE で `java.sh` を実行して、wolfSSL にリンクするネイティブ シム レイヤーを生成します。 |
| 194 | + |
| 195 | +プロジェクトにネイティブ ライブラリ参照を追加します。 それはlibにあるはずです |
| 196 | +libwolfssl.jnilib のディレクトリ (例: wolfssljni/lib/)。 |
| 197 | + |
| 198 | +テストケースをコンパイルするには、ディレクトリ`src/test`からパッケージ`com.wolfssl.provider.jsse.test`と`com.wolfssl.test`を追加します。 プロジェクトには、テストを実行するための Junit も必要です。 |
| 199 | + |
| 200 | +サンプルプログラムをさらに追加することもできます。その場合は、`examples/provider/` のソース コードをプロジェクトに追加します。 オプションで、IDE は "examples/provider/ClientJSSE.sh" を実行できます。 サンプルに追加するのが難しい部分の 1 つは、デフォルトのキーストアを使用しようとする場合に、サンプルを実行するときにキーストアへのパスが IDE に認識されるようにすることです。 |
| 201 | + |
0 commit comments