栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

我正在回答这个问题,以便根据android开发人员站点给出有关方案和解决方案的想法,以使他人受益。我已经使用自定义信任管理器解决了这个问题。

问题出在服务器证书上,它缺少中间证书颁发机构。但是,第一个流证书路径以某种方式完成,结果是成功进行了证书路径验证。

android开发人员网站中对此有解决方案。建议使用信任此服务器证书的自定义信任管理器,或者建议服务器在服务器链中包括中间CA。

自定义信任管理器。来源:https : //developer.android.com/training/articles/security-
ssl.html#UnknownCa

// Load CAs from an InputStream// (could be from a resource or ByteArrayInputStream or ...)CertificateFactory cf = CertificateFactory.getInstance("X.509");// From https://www.washington.edu/itconnect/security/ca/load-der.crtInputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));Certificate ca;try {    ca = cf.generateCertificate(caInput);    System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());} finally {    caInput.close();}// Create a KeyStore containing our trusted CAsString 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 KeyStoreString tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);tmf.init(keyStore);// Create an SSLContext that uses our TrustManagerSSLContext context = SSLContext.getInstance("TLS");context.init(null, tmf.getTrustManagers(), null);// Tell the okhttp to use a SocketFactory from our SSLContextOkHttpClient okHttpClient client = new OkHttpClient.Builder().sslSocketFactory(context.getSocketFactory()).build();

更新:
从服务器端将中间证书颁发机构添加到证书链后,我的问题得到解决。这是最好的解决方案,将证书与应用程序捆绑在一起需要在证书到期或与证书管理相关的任何其他问题时更新应用程序。

更新:03/09/2017 加载证书文件的最简单方法是使用原始资源。

InputStream caInput = new BufferedInputStream(context     .getResources().openRawResource(R.raw.certfilename));

其中certfilename是放置在resources /
raw文件夹中的证书文件。还不

sslSocketFactory(SSLSocketFactorysslSocketFactory)
建议使用okhttp ,建议使用okhttp api文档中的建议方法。

另外,从服务器获取证书时,最好使用openssl。

openssl s_client -connect {server-address}:{port} -showcerts

因为我以前是从firefox那里抢来的,并且遇到了病毒防护人员更改了它的情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号