Skip to content

Commit 6fdb0ab

Browse files
authored
Merge pull request #256 from tamasan238/pr245and249
[JA] update wolfJSSE manual to reflect changes up to 1.16.0 release
2 parents 8be2097 + 356638d commit 6fdb0ab

8 files changed

Lines changed: 448 additions & 41 deletions

File tree

wolfSSL-JNI/src-ja/chapter01.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ wolfSSL JNI/JSSE は、Java Secure Socket Extension (JSSE)のプロバイダー
44

55
Java Secure Socket Extension ( **JSSE** ) フレームワークは、セキュリティプロバイダのインストールをサポートしています。 セキュリティプロバイダーは、SSL/TLS など、Java JSSE セキュリティ API で使用される機能のサブセットを実装できます。
66

7-
このドキュメントでは、wolfSSL の JSSE プロバイダーの実装 "**wolfJSSE / wolfProvider**" について説明しています。 wolfJSSE は、ネイティブの wolfSSL SSL/TLS ライブラリをラップします。 このインターフェースにより、Java アプリケーションは [TLS 1.3](https://wolfssl.jp/products/product-wolfssl-tls1-3/)までの現在の SSL/TLS 標準、[FIPS 140-2 および 140-3](https://wolfssl.jp/products/wolfcrypt-fips/) サポート、パフォーマンスの最適化、ハードウェア暗号化のサポート、[商用サポート](https://wolfssl.jp/license/support-packages/)等々のwolfSSL を使用して得られるすべての利点を享受できます。
7+
このドキュメントでは、wolfSSL の JSSE プロバイダーの実装 "**wolfJSSE / wolfProvider**" について説明しています。 wolfJSSE は、ネイティブの wolfSSL SSL/TLS ライブラリをラップします。 このインターフェースにより、Java アプリケーションは [TLS 1.3](https://wolfssl.jp/products/product-wolfssl-tls1-3/)[DTLS 1.3](https://wolfssl.jp/wolfblog/2025/08/13/wolfssl-java-jsse-provider-supports-dtls-1-3/)までの現在の SSL/TLS 標準、[FIPS 140-2 および 140-3](https://wolfssl.jp/products/wolfcrypt-fips/) サポート、パフォーマンスの最適化、ハードウェア暗号化のサポート、[商用サポート](https://wolfssl.jp/license/support-packages/)等々のwolfSSL を使用して得られるすべての利点を享受できます。
88

99
wolfJSSE は、"**wolfssljni**"パッケージの一部として配布されます。

wolfSSL-JNI/src-ja/chapter02.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ wolfJSSE では、ホスト システムに Java をインストールする必
88
+ Oracle JDK
99
+ OpenJDK
1010
+ Zulu JDK
11-
+ Amazon Coretto
11+
+ Amazon Corretto
12+
+ Eclipse Temurin
1213
- Mac OSX
1314
- Windows (Visual Studio)
1415
- Android Studio

wolfSSL-JNI/src-ja/chapter03.md

Lines changed: 92 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Unix コマンドライン、Android Studio ビルド、汎用 IDE ビルドを
1010

1111
パッケージのルートフォルダの `java.sh` スクリプトは、ネイティブのJNI C ソース ファイルをコンパイルしてUnix/Linux または Mac OSX 用の共有ライブラリとするために使用されます。
1212

13-
このスクリプトは、OSX (Darwin) から Linux までのOSを自動検出してインクルード パスと共有ライブラリ拡張タイプをセットアップしようとします。さらに、このスクリプトはJNI C ソース ファイルに対して gcc を直接呼び出して、`./lib/libwolfssljni.so` または`./lib/libwolfssljni.jnilib`を生成します。
13+
このスクリプトは、OSX (Darwin) から Linux までのOSを自動検出してインクルード パスと共有ライブラリ拡張タイプをセットアップしようとします。さらに、このスクリプトはJNI C ソース ファイルに対して gcc を直接呼び出して、`./lib/libwolfssljni.so` または`./lib/libwolfssljni.dylib`を生成します。
1414

1515

1616
```
@@ -32,6 +32,26 @@ Compiling Native JNI library:
3232
$ ./java.sh /path/to/wolfssl/install
3333
```
3434

35+
2つ目の引数を使用して、wolfSSLライブラリの名前を指定することもできます。
36+
これはwolfSSLのコンパイル時に`--with-libsuffix`オプションを使用しているケースで有用です。
37+
38+
```
39+
$ ./java.sh /usr/local wolfssljsse
40+
```
41+
42+
このスクリプトは`JAVA_HOME`の自動検出を試みます。
43+
明示的に特定のJavaを指定したい場合は、スクリプト実行前に`JAVA_HOME`を設定してください。
44+
45+
事前に設定した`CFLAGS`は、そのままスクリプトに渡されます。
46+
47+
```
48+
$ CFLAGS="-DWOLFJNI_USE_IO_SELECT" ./java.sh
49+
```
50+
51+
また、x86_64・Aarch64のLinux環境では自動的に`-fPIC``CFLAGS`へ追加されます。
52+
53+
## antを使ってのビルド
54+
3555
Javaソースファイルのビルドには`ant`を使います:
3656

3757
```
@@ -40,8 +60,8 @@ $ ant
4060
`ant` に対して指定可能なビルドターゲット:
4161

4262

43-
- `ant` (アプリケーションに必要なjarのみビルド)
44-
- `ant test` (jarとテスト実行に必要なテストをビルド。要JUNITのセットアップ)
63+
- `ant` アプリケーションに必要なjarのみビルド)
64+
- `ant test` jarとテスト実行に必要なテストをビルド。要JUNITのセットアップ)
4565
- `ant examples` (jarとサンプルプログラムをビルド)
4666
- `ant clean` (Javaアーティファクトをクリーンアップ)
4767
- `ant cleanjni` (ネイティブアーティファクトをクリーンアップ)
@@ -75,6 +95,73 @@ wolfJSSEにバンドルされているサンプルプログラムをビルドし
7595
$ ant examples
7696
```
7797

98+
## Mavenを使ってのビルド
99+
100+
wolfJSSEはMavenを使用したビルドやパッケージングに対応しています。
101+
102+
まずは先に示した`java.sh`を実行し、JNI共有ライブラリをコンパイルします。
103+
これにより、ネイティブライブラリが`./lib`に生成されます。
104+
105+
```
106+
$ ./java.sh
107+
```
108+
109+
続いて、Javaソースファイルをコンパイルします。
110+
成果物は`./target/classes`に出力されます。
111+
112+
```
113+
$ mvn compile
114+
```
115+
116+
JUnitテストをコンパイル・実行します。
117+
118+
```
119+
$ mvn test
120+
```
121+
122+
JARファイルにパッケージングします。
123+
(テストを実行すると、`target/wolfssl-jsse-X.X.X-SNAPSHOT.jar`に作成されます。)
124+
125+
```
126+
$ mvn package
127+
```
128+
129+
Javadoc APIドキュメントを生成します。
130+
成果物は`./docs/apidocs`に出力されます。
131+
132+
```
133+
$ mvn javadoc:javadoc
134+
```
135+
136+
JARファイルをローカルのMavenリポジトリにインストールするには、次のようにします。
137+
138+
```
139+
$ mvn install
140+
```
141+
142+
このようにしてインストールしたJARファイルは、以下のようなディレクトリに保存されます。
143+
144+
```
145+
~/.m2/repository/com/wolfssl/wolfssl-jsse/X.X.X-SNAPSHOT/wolfssl-jsse-X.X.X-SNAPSHOT.jar
146+
```
147+
148+
ネイティブライブラリ(`libwolfssljni.so` or `.dylib`)は、ネイティブライブラリ検索パス(例:`/usr/local/lib`)や`LD_LIBRARY_PATH` (Linux) or `DYLD_LIBRARY_PATH` (macOS)で参照できるようにする必要があります。
149+
150+
wolfJSSEはMaven dependencyの1つとしてアプリケーションに取り込むことができます。
151+
152+
```xml
153+
<dependency>
154+
<groupId>com.wolfssl</groupId>
155+
<artifactId>wolfssl-jsse</artifactId>
156+
<version>1.16.0-SNAPSHOT</version>
157+
</dependency>
158+
```
159+
160+
## VisualStudioを使ってのビルド
161+
162+
wolfJSSEは、Windows上のVisual Studioを用いてビルドすることもできます。
163+
具体的な手順は、`wolfssljni`パッケージに含まれる`IDE/WIN/README.md`をご参照ください。
164+
78165
## Android Studio を使ってのビルド
79166

80167
Android Studio プロジェクトが、ディレクトリ `IDE/Android` に用意してあります。これは、wolfssljni / wolfJSSE の Android Studio プロジェクト ファイルのサンプルプログラムです。このプロジェクトは参照用としてのみ使用してください。
@@ -188,12 +275,12 @@ adb push ./examples/certs/intermediate/* /sdcard/examples/certs/intermediate/
188275
```
189276
com.wolfssl
190277
com.wolfssl.provider.jsse
191-
com.wolfssl.wolfcrypt
278+
com.wolfssl.provider.jsse.adapter
192279
```
193280
コマンド ラインから java.sh を実行するか、IDE で `java.sh` を実行して、wolfSSL にリンクするネイティブ シム レイヤーを生成します。
194281

195282
プロジェクトにネイティブ ライブラリ参照を追加します。 それはlibにあるはずです
196-
libwolfssl.jnilib のディレクトリ (例: wolfssljni/lib/)。
283+
libwolfssljni.so または libwolfssljni.dylib のディレクトリ (例: wolfssljni/lib/)。
197284

198285
テストケースをコンパイルするには、ディレクトリ`src/test`からパッケージ`com.wolfssl.provider.jsse.test``com.wolfssl.test`を追加します。 プロジェクトには、テストを実行するための Junit も必要です。
199286

wolfSSL-JNI/src-ja/chapter04.md

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,55 @@ for (Provider prov:providers) {
4343
}
4444
```
4545

46+
### Java Module System (JPMS)のサポート
47+
48+
wolfJSSEはJava Module System (JPMS)との互換性のため、Java ServiceLoaderに対応しています。
49+
これによって、JARファイルがモジュールパスに存在するとき、wolfJSSEプロバイダーが自動的に検出・ロードできるようになっています。
50+
51+
wolfJSSEのJARファイルは自動検出のために`com.wolfssl.provider.jsse.WolfSSLProvider`を登録する`META-INF/services/java.security.Provider`ファイルを含んでいます。
52+
アプリケーションはJava標準のServiceLoader APIを使用してwolfJSSE プロバイダーを検出・ロードできます。
53+
54+
```java
55+
import java.security.Provider;
56+
import java.security.Security;
57+
import java.util.ServiceLoader;
58+
59+
ServiceLoader<Provider> loader = ServiceLoader.load(Provider.class);
60+
for (Provider provider : loader) {
61+
if (provider.getName().equals("wolfJSSE")) {
62+
Security.addProvider(provider);
63+
break;
64+
}
65+
}
66+
```
67+
68+
複数のモジュールで成り立っているアプリケーションにおいて、wolfJSSEは自動的に検出されて、あるいは`module-info.java`で定義された依存関係の1つとして使用できます。
69+
70+
**注意:** ServiceLoaderベースのプロバイダー検出は、JAR/モジュールシステムの1つとして`META-INF/services`機構によって実行されます。
71+
Android環境においては、`Security.addProvider(new WolfSSLProvider())`を使用して明示的にプロバイダーをロードする必要があります。
72+
4673
## OS / システムレベルでのインストール
4774

4875
### Unix/Linux
4976

50-
システム/OS レベルで wolfJSSE プロバイダーをインストールするには、"wolfssl.jar"および/または"wolfssl-jsse.jar"を OS の正しい Java インストール ディレクトリにコピーし、"libwolfssljni.so"または"libwolfssljni.jnilib" 共有ライブラリがライブラリ検索パスに存在することを確認します。
51-
52-
JAR ファイル (`wolfssl.jar``wolfssl-jsse.jar`) と共有ライブラリ(`libwolfssljni.so`)を次のディレクトリに追加します:
77+
システム/OS レベルで wolfJSSE プロバイダーをインストールするには、"wolfssl.jar"および/または"wolfssl-jsse.jar"を OS の正しい Java インストール ディレクトリにコピーし、"libwolfssljni.so"または"libwolfssljni.dylib" 共有ライブラリがライブラリ検索パスに存在することを確認します。
5378

79+
JAR ファイル (`wolfssl.jar``wolfssl-jsse.jar`) と共有ライブラリ(`libwolfssljni.so` または `libwolfssljni.dylib`)を次のディレクトリに追加します:
5480

81+
**JDK 8**では:
5582

5683
```
5784
$JAVA_HOME/jre/lib/ext
5885
```
59-
OpenJDK を使用する Ubuntu では、このパスは次のようになります:
86+
87+
OpenJDK 8 を使用する Ubuntu では、このパスは次のようになります:
6088

6189
```
6290
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
6391
```
6492

93+
**注意:** `jre/lib/ext`拡張は、JDK 9で削除されました。JDK 9以降では、JARファイルをクラスパスまたはモジュールパスに配置してください。
94+
6595
さらに、次のエントリを `java.security` ファイルに追加します:
6696

6797

@@ -71,9 +101,18 @@ security.provider.N=com.wolfssl.provider.jsse.WolfSSLProvider
71101

72102
java.security ファイルは次の場所にあります:
73103

104+
**JDK 8**では:
105+
74106
```
75-
$JAVA_HOME /jre/lib/security/java.security
107+
$JAVA_HOME/jre/lib/security/java.security
76108
```
109+
110+
**JDK 9以降**では:
111+
112+
```
113+
$JAVA_HOME/conf/security/java.security
114+
```
115+
77116
"N"を、ファイル内の他のプロバイダーと比較して wolfJSSE に持たせたい優先順位に置き換えます。 WolfSSLProvider を最優先プロバイダとして配置するには、次の行を `java.security` ファイルのプロバイダリストに追加します。 また、java.security ファイルにリストされている他のプロバイダーの優先番号を付け直す必要があります。 最高の優先度は「1」です。
78117

79118

wolfSSL-JNI/src-ja/chapter05.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,38 @@ wolfJSSE / wolfSSL JNI パッケージ構成は以下の通りです:
88

99
```
1010
wolfssljni/
11-
build.xml ant build script
11+
build.xml antビルドスクリプト
12+
pom.xml Mavenビルド構成
1213
COPYING
13-
docs/ Javadocs
14-
examples/ Example apps
15-
IDE/ Example IDE project, Android Studio
16-
java.sh Script to build native C JNI sources
14+
docs/ Javadocs
15+
examples/ アプリケーションの実装例
16+
IDE/ IDEプロジェクト
17+
Android/ Android Studio
18+
WIN/ Windows Visual Studio
19+
java.sh ネイティブC JNIソースをビルドするスクリプト
1720
LICENSING
1821
Makefile
19-
lib/ Output directory for compiled library
20-
native/ Native C JNI binding source files
21-
platform/ Android AOSP build files
22+
lib/ コンパイルされたライブラリの出力先
23+
native/ ネイティブC JNIバインディングソースファイル
24+
platform/ Android AOSPビルドファイル
2225
README.md
23-
rpm/ rpm spec files
26+
rpm/ rpmスペックファイル
2427
src/
25-
java/ Java source files
26-
test/ Test source files
28+
java/ Javaソースファイル
29+
test/ テストソースファイル
2730
```
31+
2832
**wolfJSSE** プロバイダーのソース コードは、
2933
`src/java/com/wolfssl/provider/jsse` ディレクトリにあり、"**com.wolfssl.provider.jsse**" Java パッケージの一部です。
3034

3135
**wolfSSL JNI** ラッパーは `src/java/com/wolfssl` ディレクトリにあり、"**com.wolfssl**" Java パッケージの一部です。 このパッケージは wolfJSSE クラスによって利用されるため、JSSE のユーザーはこのパッケージを直接使用する必要はありません。
3236

33-
wolfSSL JNI と wolfJSSE がコンパイルされると、2 つの JAR ファイルと 1 つのネイティブ共有ライブラリが`./lib` ディレクトリに生成されます。オペレーティングシステムに応じて異なりますが、ネイティブ共有ライブラリには`libwolfssljni.jnilib`と名前をつけることもできます。
37+
wolfSSL JNI と wolfJSSE がコンパイルされると、2 つの JAR ファイルと 1 つのネイティブ共有ライブラリが`./lib` ディレクトリに生成されます。オペレーティングシステムに応じて異なりますが、ネイティブ共有ライブラリには`libwolfssljni.dylib`と名前をつけることもできます。
3438

3539

3640
```
3741
lib/
38-
libwolfSSL.so (Native C JNI wrapper shared library)
42+
libwolfssljni.so (Native C JNI wrapper shared library)
3943
wolfssl.jar (JAR with ONLY wolfSSL JNI Java classes)
4044
wolfssl-jsse.jar (JAR with BOTH wolfSSL JNI and wolfJSSE classes)
4145
```

wolfSSL-JNI/src-ja/chapter06.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
wolfJSSE は、次の JSSE クラスを拡張または実装しています:
55

66
javax.net.ssl.SSLContextSpi
7-
SSL, TLS, DEFAULT, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
7+
SSL, TLS, DEFAULT, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, DTLSv1.3
88
javax.net.ssl.KeyManagerFactorySpi
99
PKIX, X509, SunX509
1010
javax.net.ssl.TrustManagerFactorySpi
@@ -19,4 +19,17 @@ wolfJSSE は、次の JSSE クラスを拡張または実装しています:
1919
javax.net.ssl.SSLSocketFactory
2020
javax.net.ssl.SSLSessionContext
2121
java.security.cert.X509Certificate
22-
javax.security.cert.X509Certificate
22+
javax.security.cert.X509Certificate
23+
24+
**注意:** DTLSv1.3は`SSLEngine`インタフェースを介した操作にのみ対応しています。
25+
DTLS 1.0および1.2では、より低いwolfSSL JNIレベルでの操作が可能です。
26+
ただし、現時点ではJSSE SSLContextタイプとして登録されていません。
27+
28+
## 安全な再ネゴシエーション
29+
30+
wolfSSLが以下のようにして安全な再ネゴシエーションに対応するよう構成されていれば、wolfJSSEも透過的にその機能を使用できます。
31+
32+
```
33+
$ ./configure --enable-secure-renegotiation
34+
```
35+
あるいは、`HAVE_SECURE_RENEGOTIATION`を定義します。

0 commit comments

Comments
 (0)