2011-04-19 6 views
0

HTTPS가 깨진 서버에 연결될 때 안드로이드의 기본 동작은 SSLException을 먼저 던지기 때문에 문제가 발생할 수 있습니다.Android 보안 경고 대화 상자

WebView와 같은 잘못된 인증서에 대해 조치를 취하라는 사용자에게 표준 보안 프롬프트 대화 상자가 있는지 궁금합니다 ('계속', '인증서보기'및 '취소'옵션 포함)?

예를 들어 BlackBerry는 이러한 대화 상자를 자동으로 표시하고 오류가 발생하기 전에 사용자를 대신하여 작업을 기다립니다. Android에서도 똑같은 작업을 수행 할 수 있습니까?

답변

0

브라우저에 맞춤 대화 상자를 사용하고 타사 앱에 공개하지 않는 것이 좋습니다. 적어도 원하는 동작을 언급 할 수는 없습니다. BTW, iOS는 Android와 똑같이 작동합니다.

0

표준 대화 상자가 없기 때문에 실제로 HttpClient의 기본 동작은 안드로이드 신뢰할 수있는 인증서 저장소의 일부인 인증서 만 받아들이는 것입니다.

자신의 HttpClient 인스턴스와 연결할 트러스트 관리자를 직접 구축하여이 작업을 수행 할 수 있습니다. 이것은 다음과 같이 보일 것입니다 :

public class PromptUserTrustManager implements X509TrustManager 
{ 
    private AcceptUserSelectedCertsTrustManager(ValidateCertificateCallback callback) throws NoSuchAlgorithmException, KeyStoreException 
    { 
     KeyStore keyStore = null; 
     TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
     factory.init(keyStore); 
     TrustManager [] trustmanagers = factory.getTrustManagers(); 
     m_standardTrustManager = (X509TrustManager) trustmanagers[0]; 
    } 

    @Override 
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException 
    { 
    } 

    // This is where you check the server cert and make the determination 
    @Override 
    public void checkServerTrusted(X509Certificate[] certChain, String authType)throws CertificateException 
    { 
     try 
     { 
      m_standardTrustManager.checkServerTrusted(certChain,authType); 
     } 
     catch(CertificateException e) 
     { 
      // Cert isn't trusted - popup the error here. You'll need to 
      // make sure you switch to the UI thread since here you're on a network thread 
      if(!userAcceptsCert(certChain)) 
      { 
       throw e; 
      } 
     } 
    } 
} 

그래서 기본적으로 당신이 무엇을 당신이이 인증서를 신뢰 여부 플랫폼을 물어 checkServerTrusted의 콜백입니다. 그렇지 않은 경우, 트러스트 매니저를 호출하면 (자) 예외가 슬로우됩니다. 그런 다음 사용자에게 수행 할 작업을 묻는 메시지를 표시 할 수 있습니다.

onReceivedSslError()를 사용하여 WebView에서 동일한 작업을 수행 할 수 있습니다. 사용자는 원하는 경우 계속 진행할 수있는 동일한 경고를 표시 할 수 있습니다.