Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion wolfSSL-JNI/src-ja/chapter01.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ wolfSSL JNI/JSSE は、Java Secure Socket Extension (JSSE)のプロバイダー

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

このドキュメントでは、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 を使用して得られるすべての利点を享受できます。
このドキュメントでは、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 を使用して得られるすべての利点を享受できます。

wolfJSSE は、"**wolfssljni**"パッケージの一部として配布されます。
3 changes: 2 additions & 1 deletion wolfSSL-JNI/src-ja/chapter02.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ wolfJSSE では、ホスト システムに Java をインストールする必
+ Oracle JDK
+ OpenJDK
+ Zulu JDK
+ Amazon Coretto
+ Amazon Corretto
+ Eclipse Temurin
- Mac OSX
- Windows (Visual Studio)
- Android Studio
Expand Down
97 changes: 92 additions & 5 deletions wolfSSL-JNI/src-ja/chapter03.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Unix コマンドライン、Android Studio ビルド、汎用 IDE ビルドを

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

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


```
Expand All @@ -32,6 +32,26 @@ Compiling Native JNI library:
$ ./java.sh /path/to/wolfssl/install
```

2つ目の引数を使用して、wolfSSLライブラリの名前を指定することもできます。
これはwolfSSLのコンパイル時に`--with-libsuffix`オプションを使用しているケースで有用です。

```
$ ./java.sh /usr/local wolfssljsse
```

このスクリプトは`JAVA_HOME`の自動検出を試みます。
明示的に特定のJavaを指定したい場合は、スクリプト実行前に`JAVA_HOME`を設定してください。

事前に設定した`CFLAGS`は、そのままスクリプトに渡されます。

```
$ CFLAGS="-DWOLFJNI_USE_IO_SELECT" ./java.sh
```

また、x86_64・Aarch64のLinux環境では自動的に`-fPIC`が`CFLAGS`へ追加されます。

## antを使ってのビルド

Javaソースファイルのビルドには`ant`を使います:

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


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

## Mavenを使ってのビルド

wolfJSSEはMavenを使用したビルドやパッケージングに対応しています。

まずは先に示した`java.sh`を実行し、JNI共有ライブラリをコンパイルします。
これにより、ネイティブライブラリが`./lib`に生成されます。

```
$ ./java.sh
```

続いて、Javaソースファイルをコンパイルします。
成果物は`./target/classes`に出力されます。

```
$ mvn compile
```

JUnitテストをコンパイル・実行します。

```
$ mvn test
```

JARファイルにパッケージングします。
(テストを実行すると、`target/wolfssl-jsse-X.X.X-SNAPSHOT.jar`に作成されます。)

```
$ mvn package
```

Javadoc APIドキュメントを生成します。
成果物は`./docs/apidocs`に出力されます。

```
$ mvn javadoc:javadoc
```

JARファイルをローカルのMavenリポジトリにインストールするには、次のようにします。

```
$ mvn install
```

このようにしてインストールしたJARファイルは、以下のようなディレクトリに保存されます。

```
~/.m2/repository/com/wolfssl/wolfssl-jsse/X.X.X-SNAPSHOT/wolfssl-jsse-X.X.X-SNAPSHOT.jar
```

ネイティブライブラリ(`libwolfssljni.so` or `.dylib`)は、ネイティブライブラリ検索パス(例:`/usr/local/lib`)や`LD_LIBRARY_PATH` (Linux) or `DYLD_LIBRARY_PATH` (macOS)で参照できるようにする必要があります。

wolfJSSEはMaven dependencyの1つとしてアプリケーションに取り込むことができます。

```xml
<dependency>
<groupId>com.wolfssl</groupId>
<artifactId>wolfssl-jsse</artifactId>
<version>1.16.0-SNAPSHOT</version>
</dependency>
```

## VisualStudioを使ってのビルド

wolfJSSEは、Windows上のVisual Studioを用いてビルドすることもできます。
具体的な手順は、`wolfssljni`パッケージに含まれる`IDE/WIN/README.md`をご参照ください。

## Android Studio を使ってのビルド

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

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

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

Expand Down
49 changes: 44 additions & 5 deletions wolfSSL-JNI/src-ja/chapter04.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,25 +43,55 @@ for (Provider prov:providers) {
}
```

### Java Module System (JPMS)のサポート

wolfJSSEはJava Module System (JPMS)との互換性のため、Java ServiceLoaderに対応しています。
これによって、JARファイルがモジュールパスに存在するとき、wolfJSSEプロバイダーが自動的に検出・ロードできるようになっています。

wolfJSSEのJARファイルは自動検出のために`com.wolfssl.provider.jsse.WolfSSLProvider`を登録する`META-INF/services/java.security.Provider`ファイルを含んでいます。
アプリケーションはJava標準のServiceLoader APIを使用してwolfJSSE プロバイダーを検出・ロードできます。

```java
import java.security.Provider;
import java.security.Security;
import java.util.ServiceLoader;

ServiceLoader<Provider> loader = ServiceLoader.load(Provider.class);
for (Provider provider : loader) {
if (provider.getName().equals("wolfJSSE")) {
Security.addProvider(provider);
break;
}
}
```

複数のモジュールで成り立っているアプリケーションにおいて、wolfJSSEは自動的に検出されて、あるいは`module-info.java`で定義された依存関係の1つとして使用できます。

**注意:** ServiceLoaderベースのプロバイダー検出は、JAR/モジュールシステムの1つとして`META-INF/services`機構によって実行されます。
Android環境においては、`Security.addProvider(new WolfSSLProvider())`を使用して明示的にプロバイダーをロードする必要があります。

## OS / システムレベルでのインストール

### Unix/Linux

システム/OS レベルで wolfJSSE プロバイダーをインストールするには、"wolfssl.jar"および/または"wolfssl-jsse.jar"を OS の正しい Java インストール ディレクトリにコピーし、"libwolfssljni.so"または"libwolfssljni.jnilib" 共有ライブラリがライブラリ検索パスに存在することを確認します。

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

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

**JDK 8**では:

```
$JAVA_HOME/jre/lib/ext
```
OpenJDK を使用する Ubuntu では、このパスは次のようになります:

OpenJDK 8 を使用する Ubuntu では、このパスは次のようになります:

```
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext
```

**注意:** `jre/lib/ext`拡張は、JDK 9で削除されました。JDK 9以降では、JARファイルをクラスパスまたはモジュールパスに配置してください。

さらに、次のエントリを `java.security` ファイルに追加します:


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

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

**JDK 8**では:

```
$JAVA_HOME /jre/lib/security/java.security
$JAVA_HOME/jre/lib/security/java.security
```

**JDK 9以降**では:

```
$JAVA_HOME/conf/security/java.security
```

"N"を、ファイル内の他のプロバイダーと比較して wolfJSSE に持たせたい優先順位に置き換えます。 WolfSSLProvider を最優先プロバイダとして配置するには、次の行を `java.security` ファイルのプロバイダリストに追加します。 また、java.security ファイルにリストされている他のプロバイダーの優先番号を付け直す必要があります。 最高の優先度は「1」です。


Expand Down
30 changes: 17 additions & 13 deletions wolfSSL-JNI/src-ja/chapter05.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,34 +8,38 @@ wolfJSSE / wolfSSL JNI パッケージ構成は以下の通りです:

```
wolfssljni/
build.xml ant build script
build.xml antビルドスクリプト
pom.xml Mavenビルド構成
COPYING
docs/ Javadocs
examples/ Example apps
IDE/ Example IDE project, Android Studio
java.sh Script to build native C JNI sources
docs/ Javadocs
examples/ アプリケーションの実装例
IDE/ IDEプロジェクト
Android/ Android Studio
WIN/ Windows Visual Studio
java.sh ネイティブC JNIソースをビルドするスクリプト
LICENSING
Makefile
lib/ Output directory for compiled library
native/ Native C JNI binding source files
platform/ Android AOSP build files
lib/ コンパイルされたライブラリの出力先
native/ ネイティブC JNIバインディングソースファイル
platform/ Android AOSPビルドファイル
README.md
rpm/ rpm spec files
rpm/ rpmスペックファイル
src/
java/ Java source files
test/ Test source files
java/ Javaソースファイル
test/ テストソースファイル
```

**wolfJSSE** プロバイダーのソース コードは、
`src/java/com/wolfssl/provider/jsse` ディレクトリにあり、"**com.wolfssl.provider.jsse**" Java パッケージの一部です。

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

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


```
lib/
libwolfSSL.so (Native C JNI wrapper shared library)
libwolfssljni.so (Native C JNI wrapper shared library)
wolfssl.jar (JAR with ONLY wolfSSL JNI Java classes)
wolfssl-jsse.jar (JAR with BOTH wolfSSL JNI and wolfJSSE classes)
```
17 changes: 15 additions & 2 deletions wolfSSL-JNI/src-ja/chapter06.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
wolfJSSE は、次の JSSE クラスを拡張または実装しています:

javax.net.ssl.SSLContextSpi
SSL, TLS, DEFAULT, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
SSL, TLS, DEFAULT, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, DTLSv1.3
javax.net.ssl.KeyManagerFactorySpi
PKIX, X509, SunX509
javax.net.ssl.TrustManagerFactorySpi
Expand All @@ -19,4 +19,17 @@ wolfJSSE は、次の JSSE クラスを拡張または実装しています:
javax.net.ssl.SSLSocketFactory
javax.net.ssl.SSLSessionContext
java.security.cert.X509Certificate
javax.security.cert.X509Certificate
javax.security.cert.X509Certificate

**注意:** DTLSv1.3は`SSLEngine`インタフェースを介した操作にのみ対応しています。
DTLS 1.0および1.2では、より低いwolfSSL JNIレベルでの操作が可能です。
ただし、現時点ではJSSE SSLContextタイプとして登録されていません。

## 安全な再ネゴシエーション

wolfSSLが以下のようにして安全な再ネゴシエーションに対応するよう構成されていれば、wolfJSSEも透過的にその機能を使用できます。

```
$ ./configure --enable-secure-renegotiation
```
あるいは、`HAVE_SECURE_RENEGOTIATION`を定義します。
Loading