首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是叶子证书和子证书,以及如何使用它们?

什么是叶子证书和子证书,以及如何使用它们?
EN

Stack Overflow用户
提问于 2017-04-25 08:45:49
回答 1查看 14.6K关注 0票数 5

我和AppleWallet做生意有问题。他们给我三张证书:

  1. 字符串格式的叶证书;
  2. 字符串格式的子证书;
  3. G3证书文件,以".cer“结尾

我的问题是:如何使用RSA算法对数据进行验证和编码?

PS:文档清楚地表明,PublicKey是由叶子证书提供的。这三张证书是连锁的。叶证书由子证书签名,子证书由AppleRootCA-G3.cer签名。

我需要做两件事:

  1. 验证这三个证书。
  2. 从Leaf证书中提取RSA PublicKey。

我不知道该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 15:16:10

如果您没有将证书链作为一个链,那么您所要做的就是构造一个证书链。证书链主要由第零位置的终端实体证书(也就是叶子证书,链中最重要的证书)组成,其次是次要的证书。CA证书最不重要。

因此,通常的X.509证书链是这样的:

代码语言:javascript
复制
3. CA Certificate (self-signed)
    |
    |__ 2. Sub CA Certificate (signed by the above CA)
            |
            |__ 1. Sub-sub CA Certificate (if any) (signed by the above Sub CA)
                    |
                    |__ 0. End Entity Certificate (your certificate, signed by the above cert)

当您自己从每个证书构建证书链时,您必须查看哪个证书是由谁签名的,然后以上述方式构造该链(树中的数字表示java的证书数组中的索引)。

通过查看SubjectDNIssuerDN,可以找到由谁签名的证书。主题可分辨名称是最终实体,而颁发者可分辨名称是签署您证书的实体的名称。

如果需要验证某个证书是否以编程方式由另一个证书签名,则可以这样做:

userCert.verify(caCert.getPublicKey());

可以使用以下代码片段从证书中提取公钥:

代码语言:javascript
复制
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
// Provided the certificate doesn't have certificate headers (---begin cert--- and ---end cert---)
Certificate cert = certificateFactory.generateCertificate(new FileInputStream(new File("CERTIFICATE_PATH")));

System.out.println(cert.getPublicKey());
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43605755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档