안드로이드 HTTPS통신 SSL관련 질문이 있습니다.

현재 안드로이드와 서버가 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로 뺀다한들, 마찬가지로 프로젝트를 생성해서 함수를 호출하면 데이터가 보일테고...

  • 이거 말하자면 PC 웹브라우저가 어딘가에 저장해놓는 인증서를 누가 어떻게 빼내서 어떻게 하면 어떡하느냐는 질문이랑 근본적으로 같은 "문제상황"에 관한 질문 같은데... 맞나요? 엽토군 2018.11.7 12:18
  • 거의 근본적으로는 맞다고 볼수있을것같아요. 김주환 2018.11.7 13:24

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.