JAVA言語用インターフェースを提供するwolfSSL JNI を使用する
wolfSSL をJAVA環境でも使用したいという方は、wolfSSL JNIを利用することが出来ます。wolfSSL JNI はSSL/TLS組み込みライブラリである wolfSSL とJAVA言語間のインターフェースを提供します。今回は、wolfSSL JNI の使用方法について紹介します。
wolfSSL JNI は下記URL、もしくはGithubからダウンロード可能です。
[Github URL]
まずwolfSSL でJNIオプションを指定しビルドを行います。オプションは下記を指定します。
$./configure –enable-jni
$make $sudo make install |
次にJAVAのコンパイルを行いますが、事前に下記パッケージのインストールが必要になります。
- Java SDK
- Oracle JDK, Open JDK や Android を含むいずれかの JDK
- JUnit (junit.org よりダウンロード可能)
- junit-4.12.jar
- hamcrest-core-1.3.jar
junit-4.12.jar 及び hamcrest-core-1.3.jarのダウンロード後にCLASSPATH環境変数を設定します。Linux 環境では例えば下記のように設定します。
$export CLASSPATH=$CLASSPATH:/usr/share/java/junit4.12.jar:/usr/share/java/hamcrestcore1.3.jar |
次にJUNIT_HOME環境変数もセットします。
$export JUNIT_HOME=/usr/share/java |
wolfSSL JNI のコンパイルを行います。ダウンロードサイトまたはGithub より取得したwolfSSL JNIソースコードのトップフォルダに移動後、次のコマンドを実行します。
$./java.sh
$ant |
ant により、Unitテストも同時に実行されます。ビルドが成功している場合、下記のようなログが出力されます。
Buildfile: /home/foo/tmp/wolfssl-jni-1.4.0/build.xml
clean: [delete] Deleting directory /home/ foo /tmp/wolfssl-jni-1.4.0/build/test [delete] Deleting directory /home/ foo /tmp/wolfssl-jni-1.4.0/build [delete] Deleting directory /home/ foo /tmp/wolfssl-jni-1.4.0/examples/build
default-javac-flags:
init: [mkdir] Created dir: /home/ foo /tmp/wolfssl-jni-1.4.0/build [mkdir] Created dir: /home/ foo /tmp/wolfssl-jni-1.4.0/examples/build [mkdir] Created dir: /home/ foo /tmp/wolfssl-jni-1.4.0/build/test [mkdir] Created dir: /home/ foo /tmp/wolfssl-jni-1.4.0/build/reports …… [junit] usePskIdentityHint() … passed [junit] getPskIdentityHint() … passed [junit] getPskIdentity() … passed [junit] freeSSL() … passed [junit] Testing use after free … passed [junit] RSA Class [junit] RSA() … passed [junit] ECC Class [junit] ECC() … passed [junit] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.904 sec
build:
BUILD SUCCESSFUL Total time: 8 seconds |
wolfSSL JNI パッケージには、サンプルのクライアントとサーバーが含まれています。使用方法は、ソースコードのルートフォルダでサーバーを起動します。
$./example/server.sh |
次にクライアントを起動します。
$./example/client.sh |
TLS通信が成功している場合、以下のログが表示されます。
$ ./examples/server.sh
Started server at ubuntu/127.0.1.1, port 11111
waiting for client connection… client connection received from 127.0.0.1 at port 11111
issuer : /C=US/ST=Montana/L=Bozeman/O=wolfSSL_2048/OU=Programming-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com subject : /C=US/ST=Montana/L=Bozeman/O=wolfSSL_2048/OU=Programming-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com SSL version is TLSv1.2 SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 client says: hello from jni |
$ ./examples/client.sh
Connected to 127.0.0.1 on port 11111
issuer : /C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/ CN=www.wolfssl.com/emailAddress=info@wolfssl.com subject : /C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=Support/ CN=www.wolfssl.com/emailAddress=info@wolfssl.com SSL version is TLSv1.2 SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 got back: I hear you fa shizzle, from Java! |
サンプルのクライアントとサーバーには wolfSSL に含まれるサンプルのクライアントとサーバー同様、さまざまなオプションが存在しますので “-h” オプションで確認してみてください。
今回は wolfSSL を JAVA言語より利用するためのパッケージwolfSSL JNI を紹介しました。wolfSSL JNIは wolfSSL API のうちよく使われる主要なものだけを JNI として提供するものです。その他にも必要な API がある場合は追加サービスも提供しますのでお気軽にご相談ください。
またwolfSSL では wolfSSL JNI 以外にも、JavaでSSL/TLSプロトコルのフレームワークである JSSE をサポートする wolfJSSE の提供を予定しています。今回紹介しました、wolfSSL JNI の使い方や、新機能 wolfJSSE に興味がある方はお気軽に support@wolfssl.com までお知らせください。