Windows Mobile PDA で実行するモバイル アプリケーションを開発しています。アプリケーションは Java で書かれており、それを実行するために IBM の J9 JVM を使用しています。アプリケーションは HTTP 経由で Apache Tomcat サーバーと通信し、SSL を使用するようにセットアップしようとしています。
クライアントとサーバーの両方の公開/秘密鍵を生成し、自己署名証明書をエクスポートして、それぞれのキーストアにインポートしました。最初は、サーバー側の認証のみを使用して機能させようとしましたが、成功しました。しかし、apache conf ディレクトリの server.xml ファイルで clientAuth="true" を設定して、相互認証を取得しようとしています。
サーバーで SSL ロギングを有効にしましたが、クライアントが接続すると、サーバーが SSLProtocolException: handshake alert: no_certificate を報告します。クライアント ログにも例外が表示されます。
javax.net.ssl.SSLHandshakeException: unexpected_message
at com.ibm.j9.jsse.SSLSocketImpl.completeHandshake(Unknown Source)
at com.ibm.j9.jsse.SSLSocketImpl.startHandshake(Unknown Source)
at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.openSocket(Unknown Source)
at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.connect(Unknown Source)
at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.sendRequest(Unknown Source)
at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.doRequest(Unknown Source)
at com.ibm.oti.net.www.protocol.https.HttpsURLConnection.getInputStream(Unknown Source)
クライアントのキーストアとトラストストアは、次のシステム プロパティを設定することによって構成されます。
javax.net.ssl.trustStore
javax.net.ssl.trustStorePassword
javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
J9 JVM でクライアント認証を設定する方法を知っている人はいますか?