2010-02-08 23 views
1

Je développe une application mobile qui s'exécutera sur un PDA Windows Mobile. L'application est écrite en Java et pour l'exécuter, nous utilisons la JVM J9 d'IBM. L'application communique avec un serveur Apache Tomcat via HTTP et nous essayons de le configurer maintenant pour utiliser SSL.SSL HandShakeException: No_Certificate. Utilisation de J9 JVM et Apache Tomcat d'IBM

J'ai généré des clés publiques/privées pour le client et le serveur, j'ai exporté leurs certificats autosignés et je les ai importés dans les magasins de clés respectifs. Au début, j'ai essayé de le faire fonctionner en utilisant seulement l'authentification côté serveur et cela a réussi. Mais j'essaie maintenant d'obtenir une authentification mutuelle en définissant clientAuth = "true" dans le fichier server.xml du répertoire apache conf.

J'ai activé la journalisation SSL sur le serveur et lorsque le client se connecte le serveur signale une exception SSLProtocolException: handshake: no_certificate. Les journaux du client montrent aussi une exception:

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) 

Le keystore client et truststore est configuré en définissant les propriétés système suivantes:

javax.net.ssl.trustStore 
javax.net.ssl.trustStorePassword 
javax.net.ssl.keyStore 
javax.net.ssl.keyStorePassword 

Est-ce que quelqu'un a des idées comment je peux configurer l'authentification du client sur la J9 JVM?

Répondre

0

Donc, la réponse ultime je suis venu était de passer à une machine virtuelle Java différente . Très peu de support disponible auprès d'IBM et juste essayer d'obtenir que quelqu'un nous vende des licences pour leur JVM s'avérait très difficile. Je suppose qu'ils aiment seulement traiter avec d'énormes organisations.

Maintenant en utilisant CEE-J de Skelmir et jusqu'à présent, il est beaucoup plus prometteur.

-1

Fondamentalement, le client n'envoie pas le certificat. Le serveur ne peut pas authentifier le client: parfois il ne reçoit pas le certificat, ou n'est pas le même CA_ROOT, etc. et n'est pas en mesure de définir la réponse. Par le message 'no_certificate', il est facile d'imaginer que le client n'envoie rien. Vérifiez vos fichiers (vos chemins) ou vos tags: au lieu de « trustStore », vous devez utiliser truststoreFile, et au lieu de « trustStorePassword », utilisez truststorePass

+1

Les chemins sont bien. Le fichier de clés certifiées n'a rien à voir avec cela, il contient le certificat de serveur. Le keystore est plus susceptible d'être défectueux, mais je ne pense pas que le modifier en keystoreFile et keystorePass ait un sens. Les propriétés du système sont bien documentées en tant que keyStore et keyStorePassword. – DaveJohnston

+0

vous avez raison, ces paramètres vont dans les propriétés du serveur. avez-vous essayé d'utiliser un navigateur Web et d'installer le certificat, vérifiez si vous pouvez établir le canal ssl? Je suis sûr que le client ne fournit pas le bon certificat. Utilisez-vous PKCS12? – juanp