Я занимаюсь разработкой мобильного приложения, которое будет работать на КПК под управлением Windows Mobile. Приложение написано на Java, и для его запуска мы используем J9M J9 от IBM. Приложение связывается с сервером Apache Tomcat по протоколу HTTP, и мы пытаемся настроить его сейчас на использование SSL.
Я сгенерировал открытые / закрытые ключи для клиента и сервера, экспортировал их самозаверяющие сертификаты и импортировал их в соответствующие хранилища ключей. Сначала я пытался заставить его работать, используя только аутентификацию на стороне сервера, и это было успешно. Но сейчас я пытаюсь получить взаимную аутентификацию, установив clientAuth = "true" в файле server.xml в каталоге apache conf.
Я включил протоколирование 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
У кого-нибудь есть идеи, как настроить аутентификацию клиента на JVM J9?