2017-03-07 3 views
2

WebView 및 YouTube iframe을 사용하여 YouTube 동영상을 시청하는 앱을 만들었습니다. 모든 URL을 저장하려면 WebViewClient을 사용하고 Wireshark 트래픽을 해독 할 수 있도록 생성 된 개인 키를 강제로 사용하고 싶습니다 (Android 명령 줄 및 tcpdump 명령을 사용하여 앱에서 해당 트래픽을 캡처합니다).onReceivedClientCertRequest가 호출되지 않았습니다.

WebViewClient 클래스는 이것이다 :

private class MyWebviewClient extends WebViewClient { 

    @Override 
    public void onReceivedError(WebView view, int errorCode, 
           String description, String failingUrl) { 
     // TODO Auto-generated method stub 
     super.onReceivedError(view, errorCode, description, failingUrl); 
     Log.d(TAG, "onReceivedError : description = " + description); 

    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // TODO Auto-generated method stub 
     System.out.println("********************************************"); 
     Log.d(TAG, "shouldOverrideUrlLoading : url = " + url); 
     return true; 
    } 

    @Override 
    public void onLoadResource(WebView view, String url) { 
     webAppInterface.logResourceURL(url); 
     System.out.println("************************************ " + url + " ************************************"); 
    } 

    @Override 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
     handler.proceed(); 
    } 

    //forcing my private key 
    @Override 
    public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) { 
     System.out.println("test test test"); 

     X509Certificate cert = CertificateKey.getCertificate(); 
     X509Certificate[] mCertificates = new X509Certificate[1]; 
     mCertificates[0] = (X509Certificate)cert; 

     request.proceed(CertificateKey.getKey(), mCertificates); 
    } 
} 

문제는 호출되지 않습니다 그 방법 onReceivedClientCertRequest입니다! 나는 지문조차 얻지 못한다. 내가 실수

  • I의 경우에는 방법 onReceivedSslError(view, handler, error)을 사용하고 wireshark traffic
  • Wireshark를 캡처 한 트래픽에서 볼 수 있듯이 내가 SSL/HTTPS을 사용하고
  • (즉 onLoadResource 작품을) 의도 한대로

    • 다른 모든 방법이 작동 자체 생성 된 인증서를 사용 중입니다. (적어도 CA가 서명하지 않았습니다.)
    • 인증서와 개인 키가 모두 전화 번호
    • 에 저장됩니다.

    문제가 Android 버전 (현재 5.1) 일 수 있습니까?

  • 답변

    0

    서버 쪽 때마다 onReceivedClientCertRequest 메서드가 호출되며 클라이언트 인증이 필요합니다. 이것은 웹 서버에 대한 일반적인 서비스가 아닙니다 (물론 Youtube는 클라이언트 인증을 전혀 필요로하지 않습니다).이 때문에 아무 것도 강제로 실행할 수 없습니다. 또한 onReceivedClientCertRequest 메소드는 리스너이므로 기본적으로 외부 입력에 따라 달라집니다. 웹 서버는 브라우저 에이전트 (예 : WebView)에 클라이언트 인증서를 요청하지 않으므로 코드가 실행되지 않습니다.

    자세한 내용은 Android guide to Client Certificatehow SSL works in 2-way handshake

    관련 문제