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



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

  1. 字符串格式的叶子证书;
  2. 字符串格式的子证书;
  3. 苹果根CA -G3 CERT文件,以" .cer"结尾

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

ps:该文件明确指出,叶子证书提供了公共关键。三个证书在链中。叶证书由子证书签名,Sub证书由Applerootca-g3.cer签署。

我需要做两件事:

  1. 验证三个证书。
  2. 从叶子证书中提取RSA publicKey。

我不知道该怎么做。

如果您没有将其作为链条,您基本上要做的就是构建证书链。证书链基本上由Zeroth位置的最终实体证书(也是叶证书,链中最重要的证书(组成,然后是较小的重要证书。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证书中的索引数组(。

您可以通过查看 objectdn ISSUERDN 来找到由谁签名的证书。主题杰出的名称是最终实体,发行人杰出的名称是签署您证书的实体的名称。

如果您需要验证是否以编程方式签署证书,则可以执行此操作:

usercert.verify(cacert.getPublicKey(((;

您可以使用此代码段从证书中提取公共密钥:

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

相关内容

  • 没有找到相关文章

最新更新