在打开页面以从存储中建立的选择所需的SSL证书(自签名)时,我找不到如何强制组件的方法。
在创建活动期间:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form1);
//настраиваем браузер
mbrowser = (WebView) findViewById(R.id.webview);
mbrowser.getSettings().setJavaScriptEnabled(true);
mbrowser.getSettings().setJavaScriptEnabled(true);
mbrowser.getSettings().setAppCacheEnabled(true);
mbrowser.getSettings().setDatabaseEnabled(true);
mbrowser.getSettings().setDomStorageEnabled(true);
mbrowser.getSettings().setSupportZoom(true);
mbrowser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mbrowser.getSettings().setBuiltInZoomControls(true);
CookieManager.getInstance().setAcceptCookie(true);
//web resource on self-signed certificate
mbrowser.loadUrl("https://blabla.com");
mbrowser.setWebViewClient(new NocWebViewClient());
}
private class NocWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return true;
}
@Override
public void onPageFinished(WebView view, String url){
}
}
据我所知,onReceivedSslError或OnReceivedClientCertRequest需要添加更改证书,就像在普通浏览器中一样:
浏览器中的图片如下所示
这里只是为了制作它?
答案 0 :(得分:1)
private class NocWebViewClient extends WebViewClient {
@Override
public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {
KeyChain.choosePrivateKeyAlias(Form1.this, new KeyChainAliasCallback(){
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void alias(String alias) {
try {
PrivateKey changPrivateKey = KeyChain.getPrivateKey(Form1.this, alias);
X509Certificate[] certificates = KeyChain.getCertificateChain(Form1.this, alias);
request.proceed(changPrivateKey, certificates);
} catch (KeyChainException e) {
} catch (InterruptedException e) {
}
}
},new String[]{"RSA"}, null, null, -1, null);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
}