我在与AppleWallet做生意时有问题。他们给我三个证书:
- 字符串格式的叶子证书;
- 字符串格式的子证书;
- 苹果根CA -G3 CERT文件,以" .cer"结尾
我的问题:如何使用RSA算法验证和编码数据?
ps:该文件明确指出,叶子证书提供了公共关键。三个证书在链中。叶证书由子证书签名,Sub证书由Applerootca-g3.cer签署。
我需要做两件事:
- 验证三个证书。
- 从叶子证书中提取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());