2011-05-09 1 views
5

SSL 클라이언트 인증서를 사용하여 내 서버에 대한 연결을 인증하고 보안하는 네트워크 사용 가능 안드로이드 응용 프로그램을 개발 중입니다.android SSL 클라이언트 인증서 인증과 함께 사용할 서버 인증서 및 방법

나는 두 가지 질문이있다 : (1) I는 자체 서명 된 서버 인증서 또는 상업 하나를 사용해야합니까? 그리고 (2) 사용자가 설치하는 apk 파일에 서버 인증서를 포함시켜야합니까? 아니면 서버 인증서를 네트워크를 통해 서버 인증서를 가져 오기 위해 서버에 연결해야합니까? (장치가 서버 인증서를 신뢰하도록하기 위해) 나는 내가 할 "해야"무엇을 물어 보면

, 나는 각 선택의 장점과 단점은 무엇인가 부탁 해요?

지금 당장 apk 파일에 포함 된 자체 서명 인증서를 사용하고 있습니다. 사용자가 앱을 처음 실행하면 포함 된 자체 서명 된 인증서를 신뢰 저장소로 읽어서 기기가 불만없이 서버에 연결되도록합니다. 나는 상업용 인증서를 사용하면 장치가 문제없이 서버의 인증서를 신뢰할 수 있기 때문에 내 질문 # 2가 문제가 될 수 있습니다.

더 많은 가능성이있는 관련 세부 정보 :이 응용 프로그램은 안드로이드 마켓을 통해 배포되지 않습니다. 사용자는 내 서버에서 응용 프로그램을 다운로드하므로 필요한 경우 각 사용자마다 다른 인증서를 포함하여 원하는 서버 인증서를 포함 할 수 있습니다.

나는 나의 두 가지 질문에 가능한 각 응답의 다양한 장점과 단점에 대한 내 자신의 아이디어를 가지고,하지만 난 어떤 다른 사람에 관심이 있어요 - 희망 보안이있는 마음 - 문제에 대해 말해야한다.

미리 감사드립니다.

+1

+1 나는 비슷한 문제에 직면하고 있습니다. 어떤 방향으로 나아 갔습니까? –

+0

다음과 같은 이유로 자체 서명 된 인증서를 선택했습니다. (1) 상업용 인증서의 이점은 브라우저 인식입니다. 내 안드로이드 응용 프로그램은 내 작품이므로 원하는 루트 인증서를 포함 할 수 있으므로 상업용 인증서를 사용하면 별다른 이점이 없습니다. 반면에, (2) 상업용 인증서는 위험을 초래합니다. 이제는 보안에 대한 공격에 취약 할뿐만 아니라 인증 기관의 공격에도 취약합니다. CA가 해킹 당하거나 개인 키를 분실하거나 도메인 이름을 사용하여 서버 인증서를 발급하면 속상해합니다. 슬림 한 기회,하지만 왜 그것을 받아? 마지막으로 중요한 것은 돈입니다 (3). –

답변

1

나는 자기 서명하지 않을 이유가 없습니다. 나는 그것을 한 단계 올렸을 것이고, 나 자신의 인증 기관을 만들었을 것이다. 이렇게하면 사용자 정의 CA에서 서명 한 인증서가있는 서버에만 연결할 수 있습니다. 서버에서 인증서의 간단한 지문 검사보다 훨씬 더 좋습니다 (즉, 실제 암호 보안).

여기에 루비의 OpenSSL이 바인딩을 사용하여 사용자 정의 CA를 만드는 방법의 예입니다. 절차는 대부분의 언어에서 동일합니다. https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

당신은 물론 또한 요청을 수락하는 서버에 대한 사용자 정의 CA에 의해 서명되어야하는 클라이언트 인증서를 사용할 수 있습니다. 침입자는 앱에서 비공개 키와 맞춤 CA 서명 된 인증서를 추출 할 수 있습니다. 앱이 서버에 요청을 보낼 수 있다면 누구나 할 수 있습니다 :)

+0

나는 내 자신의 서버 인증서에 서명 한 다음 정의에 따라 인증 기관의 역할을 수행합니다. 개인 키를 추출하는 데있어서, 사용자가 처음 실행하면 응용 프로그램 자체가 개인 키를 생성하기 때문에 설명하는 문제는 내 응용 프로그램에는 적용되지 않습니다. 앱과 함께 배포되는 유일한 것은 서버 인증서와 선택적으로 apk에 삽입 된 고유 한 토큰으로 사람들이 서로 앱을 공유하지 못하게합니다. –