wolfTips: 言語ラッパーを使いこなす — JAVA 編 —

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/junit­4.12.jar:/usr/share/java/hamcrest­core­1.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 までお知らせください。