diff --git a/wolfSSL-JNI/src-ja/chapter01.md b/wolfSSL-JNI/src-ja/chapter01.md
index db025593..7f83e4af 100644
--- a/wolfSSL-JNI/src-ja/chapter01.md
+++ b/wolfSSL-JNI/src-ja/chapter01.md
@@ -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**"パッケージの一部として配布されます。
diff --git a/wolfSSL-JNI/src-ja/chapter02.md b/wolfSSL-JNI/src-ja/chapter02.md
index bc72cc02..ca23bddb 100644
--- a/wolfSSL-JNI/src-ja/chapter02.md
+++ b/wolfSSL-JNI/src-ja/chapter02.md
@@ -8,7 +8,8 @@ wolfJSSE では、ホスト システムに Java をインストールする必
+ Oracle JDK
+ OpenJDK
+ Zulu JDK
- + Amazon Coretto
+ + Amazon Corretto
+ + Eclipse Temurin
- Mac OSX
- Windows (Visual Studio)
- Android Studio
diff --git a/wolfSSL-JNI/src-ja/chapter03.md b/wolfSSL-JNI/src-ja/chapter03.md
index cbf60227..2e035a4d 100644
--- a/wolfSSL-JNI/src-ja/chapter03.md
+++ b/wolfSSL-JNI/src-ja/chapter03.md
@@ -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`を生成します。
```
@@ -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`を使います:
```
@@ -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` (ネイティブアーティファクトをクリーンアップ)
@@ -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
+
+ com.wolfssl
+ wolfssl-jsse
+ 1.16.0-SNAPSHOT
+
+```
+
+## VisualStudioを使ってのビルド
+
+wolfJSSEは、Windows上のVisual Studioを用いてビルドすることもできます。
+具体的な手順は、`wolfssljni`パッケージに含まれる`IDE/WIN/README.md`をご参照ください。
+
## Android Studio を使ってのビルド
Android Studio プロジェクトが、ディレクトリ `IDE/Android` に用意してあります。これは、wolfssljni / wolfJSSE の Android Studio プロジェクト ファイルのサンプルプログラムです。このプロジェクトは参照用としてのみ使用してください。
@@ -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 も必要です。
diff --git a/wolfSSL-JNI/src-ja/chapter04.md b/wolfSSL-JNI/src-ja/chapter04.md
index 378b0061..1c633bfa 100644
--- a/wolfSSL-JNI/src-ja/chapter04.md
+++ b/wolfSSL-JNI/src-ja/chapter04.md
@@ -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 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` ファイルに追加します:
@@ -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」です。
diff --git a/wolfSSL-JNI/src-ja/chapter05.md b/wolfSSL-JNI/src-ja/chapter05.md
index acdb4545..8ca16524 100644
--- a/wolfSSL-JNI/src-ja/chapter05.md
+++ b/wolfSSL-JNI/src-ja/chapter05.md
@@ -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)
```
diff --git a/wolfSSL-JNI/src-ja/chapter06.md b/wolfSSL-JNI/src-ja/chapter06.md
index 53d93942..6084b1e1 100644
--- a/wolfSSL-JNI/src-ja/chapter06.md
+++ b/wolfSSL-JNI/src-ja/chapter06.md
@@ -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
@@ -19,4 +19,17 @@ wolfJSSE は、次の JSSE クラスを拡張または実装しています:
javax.net.ssl.SSLSocketFactory
javax.net.ssl.SSLSessionContext
java.security.cert.X509Certificate
- javax.security.cert.X509Certificate
\ No newline at end of file
+ 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`を定義します。
diff --git a/wolfSSL-JNI/src-ja/chapter07.md b/wolfSSL-JNI/src-ja/chapter07.md
index dd85e21e..b5316f1c 100644
--- a/wolfSSL-JNI/src-ja/chapter07.md
+++ b/wolfSSL-JNI/src-ja/chapter07.md
@@ -1,11 +1,210 @@
# 使用方法
-使用方法については、前の章で指定されたクラスの Oracle/OpenJDK Javadoc に従ってください。"wolfJSSE" プロバイダーが、 `java.security` ファイルで同じアルゴリズムを提供している他のプロバイダーよりも優先順位が低く設定されている場合は、明示的に"wolfJSSE" プロバイダーを使用することを要求する必要あります。
+使用方法については、前の章で指定されたクラスの Oracle/OpenJDK Javadoc に従ってください。"wolfJSSE" プロバイダーが、`java.security` ファイルで同じアルゴリズムを提供している他のプロバイダーよりも優先順位が低く設定されている場合は、明示的に"wolfJSSE" プロバイダーを使用することを要求する必要あります。
たとえば、TLS 1.2 の SSLContext クラスで wolfJSSE プロバイダーを使用するには
アプリケーションは次のように SSLContext オブジェクトを作成します:
```
-SSLContext ctx = SSLContext.getInstance(“TLSv1.2”, “wolfJSSE”);
+SSLContext ctx = SSLContext.getInstance("TLSv1.2", "wolfJSSE");
```
+
+## セキュリティプロパティ
+
+wolfJSSEは`java.security`ファイルによるJava標準/wolfJSSE固有のプロパティ構成に対応しています。
+
+### Java標準のセキュリティプロパティ
+
+wolfJSSEは以下のプロパティに対応しています。
+
+| プロパティ | デフォルト値 | 説明 |
+| --- | --- | --- |
+| `keystore.type` | JKS | 標準のキーストアタイプ |
+| `jdk.tls.disabledAlgorithms` | | アルゴリズム、プロトコル、鍵長の無効化 (一部のみ対応) |
+
+`jdk.tls.disabledAlgorithms`は以下のように使用できます。
+
+```
+jdk.tls.disabledAlgorithms=SSLv3, TLSv1.1, DH keySize < 1024, EC keySize < 224, RSA keySize < 1024
+```
+
+### wolfJSSE固有のセキュリティプロパティ
+
+wolfJSSEは以下のプロパティに対応しています。
+
+| プロパティ | デフォルト値 | 説明 |
+| --- | --- | --- |
+| `wolfjsse.enabledCipherSuites` | | 使用できる暗号スイートを制限 |
+| `wolfjsse.enabledSupportedCurves` | | 使用できるECC曲線を制限 |
+| `wolfjsse.enabledSignatureAlgorithms` | | 使用できる署名アルゴリズムを制限 |
+| `wolfjsse.keystore.type.required` | | 特定の鍵ストアタイプを要求 |
+| `wolfjsse.clientSessionCache.disabled` | "false" | クライアントセッションキャッシュを無効化 |
+| `wolfjsse.X509KeyManager.disableCache` | "false" | X509KeyManagerのキャッシュを無効化 |
+| `wolfssl.readWriteByteBufferPool.disabled` | "false" | ByteBufferプールへの直接の読み書きを無効化 |
+| `wolfssl.readWriteByteBufferPool.size` | | スレッドごとのプールにおけるByteBuffersの最大値を設定 |
+| `wolfssl.readWriteByteBufferPool.bufferSize` | | プール内のそれぞれのByteBuffersのサイズを設定 |
+
+使用可能な暗号スイートを制限する例:
+
+```
+wolfjsse.enabledCipherSuites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+```
+
+使用可能なECC曲線を制限する例:
+
+```
+wolfjsse.enabledSupportedCurves=secp256r1, secp521r1
+```
+
+使用可能な署名アルゴリズムを制限する例:
+
+```
+wolfjsse.enabledSignatureAlgorithms=RSA+SHA256:ECDSA+SHA256
+```
+
+## システムプロパティ
+
+wolfJSSEはJava標準/wolfJSSE固有のシステムプロパティ構成に対応しています。
+
+### Java標準のシステムプロパティ
+
+wolfJSSEは以下のプロパティに対応しています。
+
+| プロパティ | 説明 |
+| --- | --- |
+| `javax.net.ssl.keyStore` | KeyStoreファイル (for KeyManager) |
+| `javax.net.ssl.keyStoreType` | KeyStoreタイプ (for KeyManager) |
+| `javax.net.ssl.keyStorePassword` | KeyStoreパスワード (for KeyManager) |
+| `javax.net.ssl.trustStore` | KeyStoreファイル (for TrustManager) |
+| `javax.net.ssl.trustStoreType` | KeyStoreタイプ (for TrustManager) |
+| `javax.net.ssl.trustStorePassword` | KeyStoreパスワード (for TrustManager) |
+| `jdk.tls.client.SignatureSchemes` | クライアント署名アルゴリズム(一部のみ対応) |
+| `jdk.tls.client.enableSessionTicketExtension` | クライアントセッションチケットの有効化 (Java 13以降) |
+| `jdk.tls.server.enableSessionTicketExtension` | サーバセッションチケットの有効化 (Java 13以降、現時点ではクライアントサイドのみ対応) |
+| `jdk.tls.server.SignatureSchemes` | サーバ署名アルゴリズム(一部のみ対応) |
+| `jdk.tls.useExtendedMasterSecret` | Extended Master Secretの有効/無効 |
+| `jdk.tls.ephemeralDHKeySize` | ephemeral DH鍵サイズを制御 |
+| `jdk.tls.trustNameService` | ホスト名検証のためのreverse DNS lookupを有効化 |
+| `jsse.enableSNIExtension` | SNI拡張の有効/無効 (デフォルト値:true) |
+
+### wolfJSSE固有のシステムプロパティ
+
+wolfJSSEは以下のプロパティに対応しています。
+
+| プロパティ | デフォルト値 | 設定可能値 | 説明 |
+| --- | --- | --- | --- |
+| `wolfssl.debug` | "false" | "true" | wolfSSLのネイティブデバッグログ |
+| `wolfssljni.debug` | "false" | "true" | wolfJNIのデバッグログ |
+| `wolfjsse.debug` | "false" | "true" | wolfJSSEのデバッグログ |
+| `wolfjsse.debugFormat` | | "JSON" | デバッグログをJSONフォーマットで出力 |
+| `wolfsslengine.debug` | "false" | "true" | SSLEngineのデバッグログ |
+| `wolfsslengine.io.debug` | "false" | "true" | SSLEngineのI/Oバイトログ |
+| `wolfjsse.autoSNI` | "false" | "true" | ホスト名によるSNI自動設定 |
+
+## デバッグ
+
+ネイティブwolfSSLデバッグログ(`wolfssl.debug`)は、wolfSSLが`--enable-debug`を有効にしてコンパイルされているときのみ有効です。
+
+前節でご紹介したプロパティは、実行時に以下のように
+
+```sh
+java -Dwolfjsse.debug=true App
+```
+
+あるいはプログラム内で以下のように
+
+```java
+System.setProperty("wolfjsse.debug", "true");
+```
+
+記載することで設定できます。
+
+もし`WolfSSLDebug`が初期化される前にプロパティを変更したときは、`WolfSSLDebug.refreshDebugFlags()`を実行することで値を更新できます。
+
+また、JDKデバッグログは`-Djavax.net.debug=all`により有効化できます。
+
+### JSONログフォーマット
+
+DataDogのようなツールで使用しやすくするために、ログメッセージはJSONフォーマットでも出力できます。
+以下のように設定します。
+
+```
+java -Dwolfjsse.debug=true -Dwolfjsse.debugFormat=JSON App
+```
+
+## ネイティブファイルディスクリプタイベント
+
+wolfJSSEは`poll()`や`select()`を使用してネイティブファイルディスクリプタへのread/writeを監視します。
+
+デフォルトの状態では`poll()`が使用されます。
+ただし、以下の場合には`select()`が使用されます。
+
+- ネイティブJNIソースをコンパイルする際、`WOLFJNI_USE_IO_SELECT`を定義したとき。
+- Windows環境では、`select()`がデフォルトとして使用されます。
+
+特段の事情が無ければ、`poll()`関数を選択することを推奨します。
+`select()`では、ファイルディスクリプタ番号が`FD_SETSIZE`(一般的には1024)に達したときの動作が定義されていません。
+
+## ALPNサポート
+
+Application-Layer Protocol Negotiation (ALPN)は`SSLSocket`および`SSLEngine`の両方によってサポートしています。
+
+ネゴシエートされたプロトコルを参照するには、ハンドシェイクの後に以下を実行します。
+
+```java
+String protocol = sslSocket.getApplicationProtocol();
+```
+
+wolfJSSEはALPNに非ASCII文字が使用されている場合にも対応します。
+
+## SNIサポート
+
+Server Name Indication (SNI) はクライアントサイド・サーバサイドの両方で対応しています。
+
+クライアントサイドでは、`SSLParameters`を使用してSNIを設定できます。
+
+```java
+SSLParameters params = sslSocket.getSSLParameters();
+params.setServerNames(Arrays.asList(new SNIHostName("example.com")));
+sslSocket.setSSLParameters(params);
+```
+
+システムプロパティ`wolfjsse.autoSNI`によって、ホスト名に基づくSNIの自動設定を有効化できます。`HttpsURLConnection`に適用されます。
+
+サーバサイドでは、`SSLSession.getRequestedServerNames()`を実行することでクライアントがSNIを求めているか確認できます。
+このとき、`WolfSSLSocket`によるSNI一致ロジックが実行されます。
+
+## DTLS 1.3の使い方
+
+DTLS 1.3は`SSLEngine`インタフェースを介してのみ使用できます。
+
+```java
+SSLContext ctx = SSLContext.getInstance("DTLSv1.3", "wolfJSSE");
+SSLEngine engine = ctx.createSSLEngine();
+```
+
+DTLSコネクションID (CID) についての処理は、JNIレベルでラップされたwolfSSLのネイティブAPIからも実行できます。
+
+## Androidでの使い方
+
+### アプリケーションレベル
+
+以下のようにして、wolfJSSEをアプリケーション内で登録します。
+
+```java
+import com.wolfssl.provider.jsse.WolfSSLProvider;
+
+// Add as lowest priority
+Security.addProvider(new WolfSSLProvider());
+
+// Or insert as highest priority
+Security.insertProviderAt(new WolfSSLProvider(), 1);
+```
+
+Android環境では、キーストア`AndroidCAStore`を使用してシステムの証明書を読み込むことができます。
+
+### システムレベル (AOSP)
+
+wolfJSSEはシステムプロバイダーとしてもインストールできます。
+詳細はディレクトリ`platform/android_aosp`と、ドキュメント"Installing a JSSE Provider in Android OSP"をご参照ください。
diff --git a/wolfSSL-JNI/src-ja/chapter08.md b/wolfSSL-JNI/src-ja/chapter08.md
index 3fb12eea..ac2253b5 100644
--- a/wolfSSL-JNI/src-ja/chapter08.md
+++ b/wolfSSL-JNI/src-ja/chapter08.md
@@ -6,12 +6,19 @@
サンプルプログラムは、パッケージのルート ディレクトリから、提供されたラッパー スクリプトを使用して実行する必要があります。 ラッパー スクリプトは、wolfssljni パッケージに含まれる wolfjni jar で使用するための正しい環境変数を設定します。
+実装例をビルドして実行するには、以下を実行します。
-## デバッグとログに間する注意事項
+```
+$ ./java.sh
+$ ant
+$ ant examples
+```
-実行時に -Dwolfjsse.debug=true` を使用することで、wolfJSSE デバッグログ出力を有効にできます。
+## デバッグとログに関する注意事項
-ネイティブ wolfSSL が "--enable-debug" でコンパイルされている場合、実行時に "-Dwolfssl.debug=true" を使用して wolfSSL ネイティブ デバッグログ出力を有効にできます。
+実行時に `-Dwolfjsse.debug=true` を使用することで、wolfJSSE デバッグログ出力を有効にできます。
+
+ネイティブ wolfSSL が `--enable-debug` でコンパイルされている場合、実行時に `-Dwolfssl.debug=true` を使用して wolfSSL ネイティブ デバッグログ出力を有効にできます。
`-Djavax.net.debug=all` オプションを使用して、JDK デバッグログ出力を有効にできます。
@@ -34,11 +41,35 @@ $ ./examples/client.sh
```
サンプルプログラムの使用方法と使用可能なオプションを表示するには、"-?" を指定します:
-
```
$ ./examples/server.sh --help
```
+## SimpleThreadedClient.java and SimpleThreadedServer.java
+
+マルチスレッドのJNIサーバ/クライアントのサンプルプログラム。
+
+```
+$ ./examples/SimpleThreadedServer.sh
+$ ./examples/SimpleThreadedClient.sh
+```
+
+## X509v3CertificateGeneration.java
+
+wolfSSL JNI `WolfSSLCertificate` APIを使用してX.509v3証明書を作成するサンプルプログラム。
+
+```
+$ ./examples/X509v3CertificateGeneration.sh
+```
+
+## X509CertRequest.java
+
+wolfSSL JNI `WolfSSLCertRequest` APIを使用してX.509証明書発行要求(CSR)を作成するサンプルプログラム。
+
+```
+$ ./examples/X509CertRequest.sh
+```
+
# wolfJSSE Provider サンプルプログラム
`examples/provider` ディレクトリには、wolfSSL JSSE プロバイダー (wolfJSSE) のサンプルプログラムが含まれています。
@@ -52,14 +83,6 @@ $ ./examples/provider/ServerJSSE.sh
$ ./examples/provider/ClientJSSE.sh
```
-## デバッグとログ出力に間する注意事項
-
-wolfJSSE デバッグ ログは、実行時に -Dwolfjsse.debug=true` を使用して有効にできます。
-
-ネイティブ wolfSSL が `--enable-debug` でコンパイルされている場合、実行時に -Dwolfssl.debug=true` を使用して wolfSSL ネイティブ デバッグ ロギングを有効にできます。
-
-`-Djavax.net.debug=all` オプションを使用して、JDK デバッグ ロギングを有効にできます。
-
## wolfJSSE Example Client and Server
SSLSocket API とともに wolfJSSE を使用するクライアント/サーバー アプリケーションのサンプルプログラムです。
@@ -164,3 +187,44 @@ wolfJSSE が OS システム レベルでインストールされていない場
```
$ ./examples/provider/ThreadedSSLSocketClientServer.sh
```
+
+## DtlsClientEngine.java and DtlsServerEngine.java
+
+DTLS 1.3とSSLEngineを使用するクライアント/サーバアプリケーションのサンプルプログラム。
+
+**DtlsServerEngine.java** - SSLEngineを使用するDTLS 1.3サーバの実装例
+**DtlsClientEngine.java** - SSLEngineを使用するDTLS 1.3クライアントの実装例
+
+これらの実装例では、データグラムベースのセキュア通信をSSLEngine/DTLS 1.3を使用して示しています。
+TCPベースの実装と異なり、ここではUDPベースのデータ転送とDTLSの複雑さを吸収するため、DatagramSocketを使用しています。
+また、セッションチケットやハンドシェイクステート管理にも対応しています。
+
+Bashスクリプトによる実行例は次の通りです。
+
+```
+$ ./examples/provider/DtlsServerEngine.sh
+$ ./examples/provider/DtlsClientEngine.sh
+```
+
+クライアントはサーバに接続し、メッセージを送信、サーバから送り返されたメッセージを受信します。
+いずれの実装例においても、多数のコマンドライン引数をサポートしています。
+詳細は`-?`フラグをつけて実行することで確認できます。
+
+## Java Remote Method Invocation (RMI) の例
+
+クライアントとサーバ、Java Remote Method Invocationのためのリモートインタフェースアプリケーションのサンプルプログラム。
+
+**RmiServer.java** - サーバの実装例。`getMessage()`, `sendMessage()`, `getByteArray()`, `sendByteArray()`, `getRegistryPorts()`に対応した`RmiRemoteInterface`を実装。wolfJSSEを使用して、TLS/SSL上で1つ以上のRMIレジストリを作成。
+
+**RmiClient.java** - クライアントの実装例。リモートリポジトリからオブジェクトスタブを取得し、 `getMessage()`, `sendMessage()`, `getByteArray()`, `sendByteArray()`, `getRegistryPorts()`を実行。 複数のクライアントによる接続に対応。
+
+**RmiRemoteInterface.java** - サーバとクライアントの両者が使用するリモートインタフェースの定義
+
+**RmiTLSClientSocketFactory.java** / **RmiTLSServerSocketFactory.java** - RMIのためのカスタムTLSソケット。wolfJSSEをSSL/TLS接続のもとで動作させるために使用。
+
+サーバおよびクライアントを起動するには以下のようにします。
+
+```
+$ ./examples/provider/rmi/RmiServer.sh
+$ ./examples/provider/rmi/RmiClient.sh
+```