Skip to content

Commit 1032c41

Browse files
authored
Merge pull request #91 from TakayukiMatsuo/ssljni
2 parents c36df93 + 94dbea5 commit 1032c41

File tree

10 files changed

+658
-1
lines changed

10 files changed

+658
-1
lines changed

wolfSSL-JNI/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ SOURCES = chapter01.md \
1212
chapter07.md \
1313
chapter08.md
1414

15-
PDF = wolfSSL-JNI-JSSE-Manual.pdf
15+
ifeq ($(DOC_LANG),JA)
16+
PDF = wolfSSL-JNI-JSSE-Manual-jp.pdf
17+
else
18+
PDF = wolfSSL-JNI-JSSE-Manual.pdf
19+
endif
1620

1721
.PHONY: html-prep
1822
html-prep:

wolfSSL-JNI/mkdocs-ja.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
site_name: wolfSSL JNI and wolfJSSE マニュアル
2+
site_url: https://wolfssl.com/
3+
docs_dir: build/html/
4+
site_dir: html/
5+
copyright: wolfSSL Inc. 2023
6+
nav:
7+
- "1. イントロダクション": index.md
8+
- "2. システム要件": chapter02.md
9+
- "3. wolfSSL JNI と wolfJSSE のコンパイル": chapter03.md
10+
- "4. インストール": chapter04.md
11+
- "5. パッケージ構成": chapter05.md
12+
- "6. サポートしているアルゴリズムとクラス": chapter06.md
13+
- "7. 使用方法": chapter07.md
14+
- "8. サンプルプログラム": chapter08.md
15+
theme:
16+
name: null
17+
custom_dir: ../mkdocs-material/material
18+
language: en
19+
palette:
20+
primary: indigo
21+
accent: indigo
22+
font:
23+
text: Roboto
24+
code: Roboto Mono
25+
icon: "logo.png"
26+
logo: logo.png
27+
favicon: logo.png
28+
feature:
29+
tabs: true
30+
extra_css: [skin.css]
31+
extra:
32+
generator: false
33+
use_directory_urls: false

wolfSSL-JNI/src-ja/chapter01.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# イントロダクション
2+
3+
wolfSSL JNI/JSSE は、Java Secure Socket Extension のプロバイダー実装です。 また、ネイティブの wolfSSL SSL/TLS ライブラリの薄い JNI ラッパーも含んでいます。
4+
5+
Java Secure Socket Extension ( **JSSE** ) フレームワークは、セキュリティプロバイダのインストールをサポートしています。 セキュリティプロバイダーは、SSL/TLS など、Java JSSE セキュリティ API で使用される機能のサブセットを実装できます。
6+
7+
このドキュメントでは、wolfSSL の JSSE プロバイダーの実装 "**wolfJSSE**" について説明しています。 wolfJSSE は、ネイティブの wolfSSL SSL/TLS ライブラリをラップします。 このインターフェースにより、Java アプリケーションは [TLS 1.3](https://www.wolfssl.com/tls13)までの現在の SSL/TLS 標準、[FIPS 140-2 および 140-3](https://www.wolfssl.com/license/fips/) サポート、パフォーマンスの最適化、ハードウェア暗号化のサポート、[商用サポート](https://www.wolfssl.com/products/support-and-maintenance/)等々のwolfSSL を使用して得られるすべての利点を享受できます。
8+
9+
wolfJSSE は、"**wolfssljni**"パッケージの一部として配布されます。 このパッケージには、wolfSSL 用の薄い JNI ラッパーと wolfJSSE プロバイダーの両方が含まれています。
10+

wolfSSL-JNI/src-ja/chapter02.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# システム要件
2+
3+
## Java / JDK
4+
5+
wolfJSSE では、ホスト システムに Java をインストールする必要があります。 ユーザーと開発者が利用できる JDK バリアントがいくつかあります。 wolfSSL JNI/JSSE では以下についてテスト済みです:
6+
7+
- Unix/Linux:
8+
+ Oracle JDK
9+
+ OpenJDK
10+
+ Zulu JDK
11+
+ Amazon Coretto
12+
- Android
13+
14+
wolfSSL JNI/JSSE のビルド システムは、現時点でMicrosoft Windows で実行するようにセットアップされていません。この件について興味がある方は[[email protected]](mailto:[email protected])までお問い合わせください。
15+
16+
"IDE/Android"の下に含まれるAndroid Studioのサンプルプログラムプロジェクトは、Linux と Windows の両方でテストされています。
17+
18+
19+
## JUnit
20+
21+
ユニットテストを実行するには、開発システムに JUnit 4 がインストールされている必要があります。JUnit は、プロジェクトの Web サイト[www.junit.org]()
22+
からダウンロードできます。
23+
24+
Unix/Linux/OSX システムに JUnit をインストールするには:
25+
26+
1) [junit.org/junit4/]() から "**junit-4.13.2.jar**" と " **hamcrest-all-1.3.jar**" をダウンロードします。 執筆時点では、上記の .jar ファイルは次のリンクからダウンロードできます。
27+
28+
[junit-4.13.jar](https://search.maven.org/search?q=g:junit%20AND%20a:junit) <br/>
29+
[hamcrest-all-1.3.jar](https://search.maven.org/artifact/org.hamcrest/hamcrest-all/1.3/jar)
30+
31+
32+
33+
2) ダウンロードしたJarファイルをシステムに配置したらそのパスを **JUNIT_HOME** にセットします。例えば:
34+
35+
36+
```
37+
$ export JUNIT_HOME=/path/to/jar/files
38+
```
39+
40+
## システム要件 (gcc、ant)
41+
42+
**gcc****ant** がそれぞれCコードとJavaコードのコンパイルに使用されます。開発システム上に上記がインストールされていることを確認してください。
43+
44+
45+
**注意事項**: `java.sh` スクリプトは、Java のインストールフォルダとして一般的なロケーションを使用します。 Java のインストールフォルダが異なる場合、`java.sh` の実行時にエラーが発生する可能性があります。 この場合、`java.sh` を環境に合わせて変更する必要があります。
46+
47+
48+
49+
## wolfSSL SSL/TLS ライブラリ
50+
51+
wolfSSL JNI/JSSEのコンパイルに先立ち、ネイティブ wolfSSL ライブラリのラッパーとして、[wolfSSL](https://wolfssl.jp/products/wolfssl/) C ライブラリをホスト プラットフォームにインストールし、インクルードおよびライブラリ検索パスに配置する必要があります。
52+
53+
54+
### wolfSSL と wolfCrypt C ライブラリのコンパイル
55+
56+
wolfJSSE で使用するために Unix/Linux 環境で wolfSSL をコンパイルしてインストールするには、[wolfSSL マニュアル](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/)のビルド手順に従ってください。 wolfSSL をコンパイルする最も一般的な方法は、Autoconf を使用することです。
57+
58+
Autoconf を使用して wolfSSL を設定する場合、`--enable-jni` オプションを使用する必要があります:
59+
60+
61+
```
62+
$ cd wolfssl-X.X.X
63+
$ ./configure --enable-jni
64+
$ make
65+
```
66+
"make check" が正常にパスすることを確認してから、ライブラリをインストールします:
67+
68+
69+
```
70+
$ make check
71+
$ sudo make install
72+
```
73+
これにより、システムのデフォルトのインストールフォルダに wolfSSL ライブラリがインストールされます。 多くのプラットフォームでは、次のフォルダです:
74+
75+
76+
```
77+
/usr/local/lib
78+
/usr/local/include
79+
```
80+
wolfSSL が非標準のライブラリ インストールフォルダにインストールされている場合、`LD_LIBRARY_PATH` (Unix/Linux) または `DYLD_LIBRARY_PATH` (OSX) を更新する必要がある場合があります:
81+
82+
83+
```
84+
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/wolfssl/install
85+
```

wolfSSL-JNI/src-ja/chapter03.md

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
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

Comments
 (0)