【问题标题】:What's the Leaf Certificate and Sub Certificate used for and how to use them?叶证书和子证书的用途是什么以及如何使用它们?
【发布时间】:2017-09-22 04:15:58
【问题描述】:

我在与 AppleWallet 做生意时遇到问题。 他们给了我三个证书:

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

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

PS:文档中明确了PublicKey由Leaf Certificate提供。并且这三个证书是链式的。 Leaf Certificate由Sub Certificate签名,Sub Certificate由AppleRootCA-G3.cer签名。

我需要做两件事:

  1. 验证三个证书。
  2. 从叶证书中提取 RSA 公钥。

我不知道该怎么做。

【问题讨论】:

标签: java certificate x509certificate ca


【解决方案1】:

如果你没有把它作为一个链,你基本上要做的就是构建一个证书链。证书链基本上由位于第零位的最终实体证书(也称为叶证书,链中最重要的证书)和次要证书组成。 CA 证书是最不重要的。

这就是通常的 X.509 证书链的样子:

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());

您可以使用以下代码 sn-p 从证书中提取公钥:

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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多