안드로이드 HTTPS통신 SSL관련 질문이 있습니다.
조회수 1096회
현재 안드로이드와 서버가 PHP를 통해 통신중입니다.
보안을 위해 HTTPS통신중이며,
TrustManager를통해 Ca를 불러와 데이터를 암호화하여 통신을 합니다.
코드는 아래와 같습니다.
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = context.getResources().openRawResource(R.raw.certificate);
Certificate ca = null;
try {
ca = cf.generateCertificate(caInput);
System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
} catch (CertificateException e) {
e.printStackTrace();
} finally {
caInput.close();
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
if (ca == null) {
return null;
}
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext sslContext= SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
위 코드에서 문제는,
리소스에 certificate파일을 저장한다는건데,
누가 apk 압축을풀어 인증서를 빼다가
패킷캡쳐 툴에 인증서를 등록한다던가, 앱을 새로 만들고, 그 인증서를 쓰면 서버 패킷을 뽑아낼수 있지않을까에서 시작했거든요.
키값은 어떻게 관리하는게 좋을까요?
JNI로 뺀다한들, 마찬가지로 프로젝트를 생성해서 함수를 호출하면 데이터가 보일테고...
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력