在Android应用程序中强制更新证书.pem

时间:2017-08-06 07:16:49

标签: android ssl

referencenumber

所以我正在使用该功能,当我调用以下函数时它正在工作

 public static SSLContext getSSL() {
        try {
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            AssetManager assetManager = App.getAppContext()
                    .getAssets();
            InputStream caInput = assetManager.open("cert.pem");
            java.security.cert.X509Certificate ca = null;
            try {
                ca = (java.security.cert.X509Certificate) cf
                        .generateCertificate(caInput);
            } catch (Exception er) {

            } finally {
                caInput.close();
            }
            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca",
                    ca);
            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory
                    .getInstance(tmfAlgorithm);
            tmf.init(keyStore);
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, tmf.getTrustManagers(), null);
            return context;
        } catch (Exception e1) {
            return null;
        }
    }

然而,当我的客户告诉我新证书时,问题就出现了,而且我需要使用新证书来更新我的应用程序。我的问题是,这是怎么回事?为什么我每次都需要在应用程序中更新证书?我在asssets文件夹中有它。我应该每次从某个地方下载证书吗?不更新应用的用户因旧证书而无法使用该应用

1 个答案:

答案 0 :(得分:1)

目前,您只需将一些代码放入问题中,而无需解释其用途。我的猜测是,您使用它来处理客户提供给您的特定自签名证书。这意味着如果证书在服务器端发生更改,则客户端(即应用程序或应用程序使用的至少cert.pem文件)需要更新。

处理证书更新的常用方法是首先不使用自签名证书。而是应该使用由公共CA颁发的证书,因为应用程序将接受内置信任库中任何CA颁发的任何证书,前提是该证书是为预期站点颁发的。这样即使频繁的证书更新也没有问题,并且不需要更新应用程序以接受新证书。

我建议您与客户联系,以便从自签名证书转移到使用公共证书的既定方法。这些并不昂贵,即CA就像免费提供这些服务一样。