【发布时间】:2017-03-07 08:59:12
【问题描述】:
我制作了一个应用程序,它使用 WebView 和 YouTube iframe 来观看 YouTube 视频。我使用WebViewClient 存储所有网址,并且我想强制使用我生成的私钥,以便我可以解密 Wireshark 流量(我使用 Android 命令行和tcpdump 命令在应用程序中捕获该流量)。
我的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 永远不会被调用!我什至没有打印出来。
- 所有其他方法都按预期工作(即
onLoadResource工作) - 我正在使用
SSL/HTTPS,这可以在wireshark 捕获的流量中看到 wireshark traffic - 我使用方法
onReceivedSslError(view, handler, error)以防出错 - 我正在使用自行生成的证书(至少我认为它不是由 CA 签名的)
- 证书和私钥都保存在手机上
问题可能是 Android 版本(目前是 5.1)?
【问题讨论】:
标签: java android ssl webview webviewclient