• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

android - 无法从 Android 链中获取根 CA 证书

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:53:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想做的事情非常简单——我想在从 iOS 和 Android 应用程序连接到服务器时获得完整的证书链。

在 iOS 中,我正在使用 NSURLSession 并重写 URLSession:didReceiveChallenge: 方法,在这种情况下我可以获得证书链,在这种情况下看起来像预期的那样:

[叶证书] - [中间证书] - [根证书]

可爱。

现在我正尝试在 Android 设备上使用 HttpsURLConnection 做同样的事情。连接到服务器后,我使用 getServerCertificates() 方法获取证书链(或者至少我希望这是它的方法)。这将返回我的 Certificate[] 对象,我在其中获得如下所示的链:

【叶证书】-【中级证书】

因此,Android 设备上没有根证书。

你知道Android中如何从链上获取根证书吗?

提前谢谢你。



Best Answer-推荐答案


你的问题看起来很简单。我正在查看 TLS 规范中的服务器证书部分。看这个post

服务器必须发送排序者证书链,以服务器证书和中间件开始但 CA 根是可选的,因为标准要求根证书独立分发.服务器不包含 CA 根是很常见的

客户端验证在信任库中寻找根 CA 的链。验证由 X509TrustManager 执行返回找到的根证书是可取的,但是,如您所见,负责验证的方法静默完成

 public void checkServerTrusted(X509Certificate[] chain, String authType)

已编辑 - 如何从 HTTPS 连接获取可信根

您可以使用可用的受信任证书列表来验证中间证书,以检查其中哪一个是颁发者。 (从 herehere 中提取的代码

TrustManagerFactory tmf = TrustManagerFactory.getInstance(
        TrustManagerFactory.getDefaultAlgorithm());
// Initialise the TMF as you normally would, for example:
tmf.init((KeyStore)null); 

//get default X509TrustManager
TrustManager[] trustManagers = tmf.getTrustManagers();
final X509TrustManager x509Tm = (X509TrustManager)trustManagers[0];

//trusted certificate issuers
X509Certificate issuers[] = x509Tm.getAcceptedIssuers();

//Perform connection...
HttpsURLConnection conn =....

//get the last intermediate certificate from server certificates. 
//Fixme: if the server returns alsothe root certificate...
Certificate cert[] = conn.getServerCertificates();
X509Certificate intermediate = (X509Certificate)cert[cert.length-1];

for (int i = 0; i < issuers.length;i++){
    try{
        intermediate.verify(issuers[i].getPublicKey());
            //Verification ok. issuers[i] is the issuer
            return issuers[i];
        } catch (Exception e){}
    }
}

关于android - 无法从 Android 链中获取根 CA 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161851/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap