2011-03-04 2 views
1

SSL 및 보안 전반에 관해서는 완전히 초보자입니다. 나는 (BTW,이 아파치 HttpClient를를 사용하는) 사용자 정의 SSL 인증서를 신뢰위한 키 스토어를로드하는 방법에 대한 다음과 같은 예를 발견내 키 스토어의 비밀번호를 앱에서 하드 코드해도 괜찮습니까?

private SSLSocketFactory newSslSocketFactory() { 
    try { 
    KeyStore trusted = KeyStore.getInstance("BKS"); 
    InputStream in = context.getResources().openRawResource(R.raw.mystore); 
    try { 
     trusted.load(in, "ez24get".toCharArray()); 
    } finally { 
     in.close(); 
    } 
    return new SSLSocketFactory(trusted); 
    } catch (Exception e) { 
    throw new AssertionError(e); 
    } 
} 

난 당신이 키 스토어를 수정하기 위해 장치에 액세스해야하는 것 같아요, 하지만 여전히 ... 키 저장소 비밀번호 ("ez24get")가 코드에서 쉽게 사용할 수 있다는 사실에 문제가 있습니까? 이 코드가 포함 된 응용 프로그램을 손상시키는 데는 무엇이 필요합니까?

+0

나는 그것이 냄새라고 말하고 싶지만 나는 안드로이드 개발자가 아니다. 어떤 다른 선택 사항을 저장해야합니까? 해시 될 수 있습니까? – alex

+0

나는 몰라. 나는 어딘가에 그것을 저장하지 않고 응용 프로그램에 암호를 얻을 수있는 방법을 생각하려고 노력하고있어. 암호화 된 패키지를 제공하면 코드에 열쇠가 있어야하므로 같은 문제가 발생합니다. Android에는 BlackBerry처럼 하드웨어 기반 암호화가 내장되어 있지 않습니다. 앱이 처음 시작될 때 다운로드하면 앱이 실제로 다른 앱이 아닌 비밀번호를 요청한다는 것을 확인할 수있는 방법이 필요합니다. 일반적으로 이런 종류의 작업은 SSL로 수행되며 키 스토어에 액세스 할 수 없다면 사용할 수 없습니다. :-P 남자, 나는 어떻게 이런 일들을 알아 내는지 모르겠다. –

답변

1

위험 할 경우 취할 의향이 있습니다.

코드를 디 컴파일하는 데 충분한 의사가있는 사람이면 누구나 얻을 수 있습니다. 코드를 난독 화한다고해도 문자열을 찾는 것만으로도 위험을 감수해야합니다.

+0

오른쪽. 그런 다음 한 번 해보면 사용자의 장치에 대한 루트 액세스 권한 (물리적 액세스가 필요할 수도 있음)을 확보하고 자체 가짜 인증서를 키 저장소에 삽입하고 장치를 알지 못하는 채 사용자에게 반환해야하며, 마지막으로 앱을 사용하는 동안 연결을 차단합니다. 그것은 꽤 큰 PITA가 될 것이므로 대부분의 목적을 위해 충분히 안전합니다. 그러나 여전히 완전히 안전하지는 않습니다. 또는 나는 무엇인가 놓치고 있냐? –

+0

또한 키 스토어 파일의 MD5를 저장할 수 있고 앱이 시작될 때마다 그 파일을 아무도 확인하지 못하게 할 수 있습니다. 그런 다음 앱을 손상 시키려면 클래스 파일을 수정해야합니다. –

관련 문제