I have problems on establishing SSL connection between server and android
using Apache Mina (both on server and client);

First of all I generated self signed keys. Bouncy Castle for Android and JKS
for server:

SERVER:

keytool -genkey -dname "cn=sslkey, o=test, c=RU" -alias serverkey -keyalg
RSA -keypass pass -storepass pass -keystore serverkey.jks -validity 1000

keytool -export -alias serverkey -storepass pass -file server.cer -keystore
serverkey.jks

keytool -import -alias serverkey -file server.cer -keypass pass -keystore
trustclient.bks -storetype BKS -storepass pass -providerClass
org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
bcprov-jdk15on-148.jar

CLIENT:

keytool -genkey -dname "cn=sslkey, o=test, c=RU" -alias clientkey -keyalg
RSA -keypass pass -storepass pass -keystore clientkey.jks -validity 1000

keytool -export -alias clientkey -storepass pass -file client.cer -keystore
clientkey.jks

keytool -import -alias clientkey -file client.cer -keypass pass -keystore
clientkey.bks -storetype BKS -storepass pass -providerClass
org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath
/Users/tabtrader/Workspace/tools/bcprov-jdk15on-148.jar

keytool -import -v -trustcacerts -alias clientkey -file client.cer -keystore
trustserver.jks -keypass pass -storepass pass


Then modified SSLContext:

SERVER:

KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream in = null;
try {
        in = FileUtil.open(SSLContextFactory.class, "res/serverkey.jks");
        keyStore.load(in, keyStorePassword);
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, "pass".toCharArray());


KeyStore trustStore = KeyStore.getInstance("JKS");
InputStream in = null;
try {
        in = FileUtil.open(SSLContextFactory.class, "res/trustserver.jks");
        trustStore.load(in, keyStorePassword);
}

TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(trustStore);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, new SecureRandom());

SSLFilter sslFilter = new SSLFilter(sslContext);
sslFilter.setUseClientMode(false);
sslFilter.setNeedClientAuth(false);


CLIENT:


KeyStore keyStore = KeyStore.getInstance("BKS");
InputStream in = null;
try {
        in = getResources().openRawResource(R.raw.clientkey);  // clientkey.bks
        keyStore.load(in, keyStorePassword);
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(keyStore, "pass".toCharArray());


KeyStore trustStore = KeyStore.getInstance("BKS");
in = null;
try {
        in = getResources().openRawResource(R.raw.trustclient);  // 
trustclient.bks
        trustStore.load(in, keyStorePassword);
}

TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, new SecureRandom());

SSLFilter sslFilter = new SSLFilter(sslContext);
sslFilter.setUseClientMode(true);
sslFilter.setNeedClientAuth(false);


Using this code SLL Handshake finished without errors:

DEBUG mina.acceptor.AcceptorIoHandler handshakeStatus=FINISHED
DEBUG mina.acceptor.AcceptorIoHandler sslSession CipherSuite used
SSL_RSA_WITH_RC4_128_MD5

And get established Mina Session. But then nothing happened. Next messages
from client are ignored without any logs. It is very strange.

If set sslFilter.setNeedClientAuth(true) for server I got exception:
SSLHandshakeException: null cert chain

Haw can I create this SSL connection? Where is the problem?



--
View this message in context: 
http://apache-mina.10907.n7.nabble.com/SSL-connection-Android-Server-using-Apache-Mina-tp37009.html
Sent from the Apache MINA Developer Forum mailing list archive at Nabble.com.

Reply via email to