我正在尝试在Java主机和androID客户端之间设置双向身份验证SSL连接.不知道为什么它没有连接.以下是Android客户端应用和Java服务器的代码.
客户代码:
private SSLContext createSSLContext(final Context cont){ SSLContext ssl_cont = null; try { Log.d(TAG, "TrustStore - Initializing"); KeyStore trustStore = KeyStore.getInstance("BKS"); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); inputStream trustStoreStream = cont.getResources().openRawResource(R.raw.myclIEnttruststore); trustStore.load(trustStoreStream, "clIEnt".tochararray()); trustManagerFactory.init(trustStore); Log.d(TAG, "TrustStore - Initialized"); // Setup keystore Log.d(TAG, "KeyStore - Initializing"); KeyStore keyStore = KeyStore.getInstance("BKS"); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); inputStream keyStoreStream = cont.getResources().openRawResource(R.raw.myclIEnt); keyStore.load(keyStoreStream, "clIEnt".tochararray()); keyManagerFactory.init(keyStore, "clIEnt".tochararray()); Log.d(TAG, "KeyStore - Initialized"); ssl_cont = SSLContext.getInstance("TLS"); ssl_cont.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); } catch (Exception e) { // Todo auto-generated catch block alertBox("SSLClIEnt", "ERROR: " + e.getMessage()); Log.d(TAG, "ERROR: " + e.getMessage()); } return ssl_cont;}OnClickListener onConnClick = new OnClickListener() { public voID onClick(VIEw arg0) { // Todo auto-generated method stub try { // Setup the SSL context to use the truststore and keystore Log.d(TAG, "Started.."); SSLContext ssl_context = createSSLContext(cont); Log.d(TAG,"here 1..."); SSLSocketFactory socketFactory = (SSLSocketFactory) ssl_context.getSocketFactory(); Log.d(TAG,"here 2..."); socket = (SSLSocket) socketFactory.createSocket(ipadd.getText().toString().trim(), Integer.parseInt(port.getText().toString().trim())); Log.d(TAG,"here 3..."); dataOut = new DataOutputStream(socket.getoutputStream()); dataIn = new DatainputStream(socket.getinputStream()); dataOut.writeUTF("Hello !!"); msgin.setText("Connected"); Log.d(TAG, "Completed.."); } catch (Exception e) { // Todo auto-generated catch block e.printstacktrace(); msgin.setText("Not connected"); alertBox("Main", "ERROR: " + e.getMessage()); Log.d(TAG, "ERROR: " + e.getMessage()); } }};
服务器代码:
try { mySSLServerFac = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); mySSLServerSocket = (SSLServerSocket) mySSLServerFac.createServerSocket(9999); System.out.println("Listening on 9999\n"); mySSLSocket = (SSLSocket) mySSLServerSocket.accept(); DatainputStream input = new DatainputStream(mySSLSocket.getinputStream()); DataOutputStream output = new DataOutputStream(mySSLSocket.getoutputStream()); do{ System.out.println("Remote IP Address : " + mySSLSocket.getInetAddress()); msg = input.readUTF().toString(); System.out.println(msg); java.util.Scanner sc = new java.util.Scanner(system.in); output.writeUTF(sc.nextline()); }while(msg != "exit"); System.out.println(msg); } catch (Exception e) { e.printstacktrace(); }
我在服务器上遇到“没有共同的密码套件”错误.由于我不在SSL连接设置中.如果您发现错误或主要问题,请允许我提供帮助.
这是我创建证书和信任库所遵循的link.我创建的Truststore和kestore是here
我正在使用AndroID 2.2和BKSProvIDer 1.46,请让我知道哪里出问题了.我必须尽快结束这个项目.
提前致谢.
解决方法:
从堆栈跟踪看来,您捕获的异常不包含消息.
Log.d(TAG, e.getMessage());
它与SSL无关.
总结以上是内存溢出为你收集整理的Java服务器和Android客户端之间的SSL连接失败全部内容,希望文章能够帮你解决Java服务器和Android客户端之间的SSL连接失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)