나는 안드로이드에서 상대적인 초보자이며 자바 서버에서 작동하는 간단한 SSL 연결을 얻는 데 문제가 있습니다.Android to JAVA SSL
서버와 Java 클라이언트와 동일한 키 저장소를 사용하여 Java 서버를 테스트 한 결과 Java 서버가 작동한다는 것을 알고 있습니다.
안드로이드 클라이언트는 자바 서버가 연결을 허용하고 readline 변수에 null 값을 표시하고 오류 메시지를 표시하지 않기 때문에 무언가를 보냅니다.
나는 bks 형식의 키 스토어 및 트러스트 스토어를 가지고 있으며 res/raw 폴더에 추가되었습니다.
안드로이드 클라이언트 :
SSLContext sslContext = SSLContext.getDefault();
KeyStore trustSt = KeyStore.getInstance("BKS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore);
trustSt.load(trustStoreStream, "password".toCharArray());
trustManagerFactory.init(trustSt);
KeyStore keyStore = KeyStore.getInstance("BKS");
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore);
keyStore.load(keyStoreStream, "password".toCharArray());
keyManagerFactory.init(keyStore, "password".toCharArray());
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
}
catch (NoSuchAlgorithmException nsae){Log.d("SSL", nsae.getMessage());}
catch (KeyStoreException kse){Log.d("SSL", kse.getMessage());}
catch (IOException ioe){Log.d("SSL", ioe.getMessage());}
catch (CertificateException ce){Log.d("SSL", ce.getMessage());}
catch (KeyManagementException kme){Log.d("SSL", kme.getMessage());}
catch(AccessControlException ace){Log.d("SSL", ace.getMessage());}
catch(UnrecoverableKeyException uke){Log.d("SSL", uke.getMessage());}
try{
//error catch
String error = "test";
sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
s = (SSLSocket) sslsocketfactory.createSocket("192.168.2.101", port);
outStream = s.getOutputStream();
outStreamWriter = new OutputStreamWriter(outStream);
bufferedWriter = new BufferedWriter(outStreamWriter);
bufferedWriter.write(error + "\n");
bufferedWriter.flush();
} //end try
catch (UnknownHostException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
finally{
if (s != null){
try {s.close();}
catch (IOException e) {e.printStackTrace();}
}
}//end finally
}
나는 신뢰를 지정하지만 어떻게 소켓의 신뢰를 초기화하지 않습니다.
도움을 주시면 감사하겠습니다.
'passowrd'는 오타가 적습니까? – Nick
내가 붙여 넣을 때 암호를 변경합니다 ... 오타가 – Alan