我有一个Android应用程序,我使用webView
来查看html页面,一切正常,但我有一个SSL
的链接,证书是自签名的。没有安装证书webview
没有显示任何内容,但当我在设置>下手动安装证书时安全>从手机存储安装,webview
显示网站,我也可以在用户选项卡下看到安装在可信凭据中的证书。
现在我的要求是 APK应该自动安装证书 e。
我已尝试在Internet上找到多个代码,其中一个代码在下面。
public static void setCustomCertificateAuthority(InputStream inputStream) {
try {
// Load CAs from an InputStream
// (could be from a resource or ByteArrayInputStream or ...)
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = new BufferedInputStream(inputStream);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
Log.e("ca=" + ((X509Certificate) ca).getSubjectDN(),"ssss");
} finally {
caInput.close();
}
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore and system CA
UnifiedTrustManager trustManager = new UnifiedTrustManager(keyStore);
// Create an SSLContext that uses our TrustManager
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[]{trustManager}, null);
// Tell the URLConnection to use a SocketFactory from our SSLContext
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
我使用
在 Main.java 的onCreate
事件中调用上述方法
try {
InputStream caInput=getAssets().open("mycert.cer");
setCustomCertificateAuthority(caInput);
} catch (IOException e) {
e.printStackTrace();
}
“守则”工作正常,但我进入设置>安全>可信凭证>用户标签,我找不到证书。 webview
也没有显示任何内容。