2012-03-12 5 views
1

Android 용 2.2 SDK 용 응용 프로그램을 만들고 현재 응용 프로그램의 한 인스턴스에서 Java 소켓을 통해 (다른 모바일 장치 인) wifi를 통해 데이터를 보내고 있습니다. 정상적으로 작동합니다. 데이터를 평문으로 보내지 않도록 암호화를 추가하고 싶습니다. Android 및 SSL 인증서 로딩

나는 서버에 연결 다른 점에 1 점

SocketAddress sockAddress = new InetSocketAddress(address.getIP(), address.getPort()); 
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
connectionSocket = (SSLSocket) factory.createSocket(); 
connectionSocket.connect(sockAddress, 6000); 

상의 SSLServer를 만들려면

SSLServerSocketFactory factory = (SSLServerSocketFactory) 
SSLServerSocketFactory.getDefault(); 
server = (SSLServerSocket) factory.createServerSocket(incomingConnectionPort); 
while(!Thread.interrupted()) { 
    SSLSocket incoming = (SSLSocket) server.accept(); 
    ....... 
} 

을 사용했다. 은 일부 검색 후 나는 또한

keytool -keystore mykeystore -storepass mypass -genkey -keyalg RSA -alias mycert 

처럼 뭔가 자체 서명 된 인증서를 생성하고 내 코드

System.setProperty("javax.net.ssl.keyStore", "mykeystore"); 
System.setProperty("javax.net.ssl.keyStorePassword","mypass"); 
//add cert as trusted 
System.setProperty("javax.net.ssl.trustStore","mykeystore"); 
System.setProperty("javax.net.ssl.trustStorePassword","mypass"); 

이 추가하지만 분명히 내가 여기 읽어 이유로 안드로이드에서 작동하지 않습니다 http://groups.google.com/group/android-developers/browse_thread/thread/16c7eb8e65451d27/26edb971d390e2a3?pli=1.

나는 (? 용액) 코드를 확인 여기 https://github.com/k9mail/k-9/blob/master/src/com/fsck/k9/mail/store/TrustManagerFactory.java을하지만 인증서를 가져 오려면 어떻게 정확히 알아낼 수 없습니다.

제대로 인증서를 키 저장소로 가져 오는 방법에 대한 지침을 제공 할 수 있습니까?

(내가 만들고있어 응용 프로그램뿐만 아니라 비 모바일 장치에 연결하기 때문에 안드로이드 안됨) 나는 또한 안전하게 자바 TCP 소켓을 통해 데이터를 전송하는 아마 다른 방법을 부탁드립니다.

나는 실수를 저질 렀습니다. 나는 아직도 배우고있다. :)

답변

2

SSL은 클라이언트 - 클라이언트 연결에 적합하지 않습니다. SSL은 서버가이 시나리오에서는 그렇지 않은 정적 DNS (또는 IP) 이름을 가져야합니다.

일반 소켓 연결을 사용하고 암호화 된 프로토콜을 개발해야합니다. 세부 정보는 전송하려는 데이터와 이것이 의미하는 보안 요구 사항에 따라 다릅니다.