2014-10-18 1 views
0

REST API를 실행하는 서블릿과 HTTPS 연결을 구현했습니다. 장치가 HTTPS를 사용하여 서버에 연결할 수 있습니다. 장치가 서버의 인증서를 수락하고 HTTPS를 설정하고 있습니다.안드로이드 앱이 실제 서버에 액세스하는 방법

장치가 특정 인증서 만 수락하는 방법을 확인하려면 어떻게합니까? 누군가가 자체 서명 된 인증서를 사용하여 올바른 서버로 자신을 식별하는 가짜 서버를 설정해서는 안됩니다.

브라우저 환경에서 사용자는 URL에 Chrome의 횡령 된 https가 표시되고 인증서가 확인되지 않았 음을 알 수 있습니다. 앱에서이를 확인하는 방법.

답변

1

이 절차는 인증서 유효성 검사라고하며 꽤 표준입니다. 일부 클래스 및 구성 요소는 사용자를 위해 유효성 검사를 수행하고 다른 일부는 수동 구현 및 제어를 위해 유효성 검사를 수행합니다.

유효성 검사를 통해 합법적 인 서버 (즉, 제시된 인증서의 호스트 이름과 이름이 일치하는 서버)에 연결하는 것이 이상적입니다. 이를 위해서는 서버가 필요한 호스트 이름에 대한 유효한 CA 서명 (보안 및 유연성 부족으로 자체 서명 된 변형을 생략 함) 인증서를 취득해야합니다. 여태까지는 그런대로 잘됐다.

이제 사전 구현 된 인증서 유효성 검사를 사용하거나 직접 구현하거나 사전 구현 된 유효성 검사 절차에 자체 검사를 추가 할 수 있습니다. 자신의 유효성 검사를 구현하는 것은 작업에 너무 부담 스럽기 때문에 사용하는 클라이언트 코드가 이미 일부 유효성 검사를 수행하고 있다고 가정 해 봅시다. 연결에 사용하는 코드가 정확히 무엇인지 지정하지 않았으므로이 코드에 대해 언급 할 수 없습니다. 일부 국가에서는 에 의존 할 수 있지만 주 정부 기관은 트래픽을 과밀화합니다.이 때문에 정부는 허위로 인증 절차를 수행하면 가짜 성격의 인증서를 취득 (또는 경우에 따라 즉석에서 생성) 할 수 있습니다. .

따라서 서버와 클라이언트를 모두 제어 할 수 있고 추가 유효성 검사 (클라이언트 구성 요소 또는 클래스에서이 작업을 수행 할 수 있음)를 구현할 수있는 경우 인증서의 발급자 (또는 인증서 전체)를 비교할 수 있습니다 체인)을 유효한 발행인에게 보냅니다. 이는 덜 유연하고 PKI 규칙을 어느 정도 위반합니다. 그러나이 방법을 사용하면 위조 된 인증서가 생성되어 유효한 것으로 받아 들여지는 기회가 크게 줄어 듭니다. 어떤 인증서를 사용하고 어떤 CA를 사용했는지 (그리고 나중에 사용할지)를 알고 있으므로이 정보를 클라이언트에 저장하고 유효성 검사 중에 비교할 수 있습니다.

여기에서 "인증서 유효성 검사"에 대한 간단한 검색을 통해 인증서 유효성 검사에 대한 자세한 내용을 읽을 수 있습니다. 이는 매우 인기있는 주제입니다.

+0

감사합니다. SO에서이 참조를 얻었다 : http://stackoverflow.com/questions/4065379/how-to-create-a-bks-bouncycastle-format-java-keystore-that-contains-a-client-c#. 이것에 대해 좀 더 실험해볼 것입니다. – Teddy

관련 문제