- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在 WebView 中使用客户端证书身份验证开发 Android 应用程序。证书 (cert.pfx) 和密码嵌入在应用程序中。
在 WebView 中使用 ajax 调用执行客户端证书身份验证请求时,将调用以下函数:
@Override
public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {}
据我所知,我需要调用:
request.proceed(PrivateKey privateKey, X509Certificate[] chain)
知道如何从嵌入式证书创建 PrivateKey 和 X509Certificate 对象以便继续处理请求。顺便说一句,这是在 Android 应用程序上实现客户端证书身份验证的正确方法吗?如果没有,请指教。
最佳答案
使用 KeyStore 获取 PrivateKey 和 X509Certificate 对象解决:
private X509Certificate[] mCertificates;
private PrivateKey mPrivateKey;
private void loadCertificateAndPrivateKey() {
try {
InputStream certificateFileStream = getClass().getResourceAsStream("/assets/cert.pfx");
KeyStore keyStore = KeyStore.getInstance("PKCS12");
String password = "password";
keyStore.load(certificateFileStream, password != null ? password.toCharArray() : null);
Enumeration<String> aliases = keyStore.aliases();
String alias = aliases.nextElement();
Key key = keyStore.getKey(alias, password.toCharArray());
if (key instanceof PrivateKey) {
mPrivateKey = (PrivateKey)key;
Certificate cert = keyStore.getCertificate(alias);
mCertificates = new X509Certificate[1];
mCertificates[0] = (X509Certificate)cert;
}
certificateFileStream.close();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
private WebViewClient mWebViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {
if (mCertificates == null || mPrivateKey == null) {
loadCertificateAndPrivateKey();
}
request.proceed(mPrivateKey, mCertificates);
}
};
关于Android WebView 处理 onReceivedClientCertRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135225/
我制作了一个应用程序,它使用 WebView 和 YouTube iframe 来观看 YouTube 视频。我使用 WebViewClient 来存储所有 url,我想强制使用我生成的私钥,这样我就
我正在 WebView 中使用客户端证书身份验证开发 Android 应用程序。证书 (cert.pfx) 和密码嵌入在应用程序中。 在 WebView 中使用 ajax 调用执行客户端证书身份验证请
既然都要办理证书,那不就一样了吗?有哪些不同的场景? 最佳答案 onReceivedSslError 当服务器的 SSL 证书有错误时调用。例如,它可能是一个自签名证书,它可能用于错误的域,它可能已经
我需要为 Webview 做公钥/证书固定。我看到 API21 中引入了一个 api根据 Android 文档, http://developer.android.com/reference/andr
我是一名优秀的程序员,十分优秀!