2012-11-07 4 views
0

에 의심 나는 다음 코드를 사용하여 HTTPS 서버 연락을 시도했다.안드로이드 HTTPS 요청, 올바른 사용

BasicHttpParams clientparams = new BasicHttpParams(); 
[... clientparams initializazion...] 

SchemeRegistry schemeRegistry = new SchemeRegistry(); 
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 

SSLSocketFactory sf = SSLSocketFactory.getSocketFactory(); 
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); 
schemeRegistry.register(new Scheme("https", sf, 443)); 

ClientConnectionManager cm = new ThreadSafeClientConnManager(clientparams, schemeRegistry); 
HttpClient myClient = new DefaultHttpClient(cm, clientparams); 
HttpResponse response = myClient.execute(new HttpGet("https://www.google.com")); 

를이 너무 완벽하게 작동합니다 :

나는 또한 하나를 다음과 같은 서버에 접속했습니다. 나는 다른 서버와도 시도하고 항상 작동합니다.

그런 다음 누군가가 SchemeRegistry를 사용하여 http 클라이언트를 초기화해야 할 때 설명 할 수 있습니까? 또, 커스텀 KeyStore를 사용해 SSLSocketFactory를 초기화 할 필요가있는 경우도 있습니다.

답변

0

저는 SSL 연결에서 서버가 사용하는 인증서가 내려진다 고 생각합니다. 그것이 루트 CA로 인해 안드로이드가 인식하는 것이라면 (보통 이들은 예를 들어 Verisign과 같은 더 일반적인 소스의 인증서가 될 것입니다) 여기에있는 것처럼 작동해야합니다.

한편 사용자 정의 인증서 또는 자체 서명 된 것이 있거나 소스에서 작거나 일반적으로 안전하다고 받아 들여지지 않은 소스가있는 경우 수동으로 처리 할 사용자 정의 키 저장소를 만들어야합니다 그 증명서와.

Google은 이전 코드를 사용하기 때문에 코드가 이미 작동합니다.

또한, 나는 당신이 당신의 코드에

schemeRegistry.register(new Scheme("http", sf, 80)); 

를 추가 할 수 있다고 생각하고 당신의 응용 프로그램에 어떤 피해를 유발하지 않고뿐만 아니라 HTTP 연결을 다룰 것입니다.