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文件夹中有它。我应该每次从某个地方下载证书吗?不更新应用的用户因旧证书而无法使用该应用
答案 0 :(得分:1)
目前,您只需将一些代码放入问题中,而无需解释其用途。我的猜测是,您使用它来处理客户提供给您的特定自签名证书。这意味着如果证书在服务器端发生更改,则客户端(即应用程序或应用程序使用的至少cert.pem文件)需要更新。
处理证书更新的常用方法是首先不使用自签名证书。而是应该使用由公共CA颁发的证书,因为应用程序将接受内置信任库中任何CA颁发的任何证书,前提是该证书是为预期站点颁发的。这样即使频繁的证书更新也没有问题,并且不需要更新应用程序以接受新证书。
我建议您与客户联系,以便从自签名证书转移到使用公共证书的既定方法。这些并不昂贵,即CA就像免费提供这些服务一样。