Android以编程方式安装Cer文件

时间:2016-12-20 14:38:59

标签: android certificate

我有一个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也没有显示任何内容。

0 个答案:

没有答案