【问题标题】:Export certificate chain from .cer certificate从 .cer 证书导出证书链
【发布时间】:2021-11-26 01:25:47
【问题描述】:

我有 .cer 证书。当我打开它时,它会显示我的证书链。

使用此代码,我将证书读取到 x509certificate 文件。

File certificateFile = new File("C:\\Users\\grish\\Desktop\\certificateForValidation.cer");
        InputStream inputStream = new FileInputStream(certificateFile);

        X509Certificate certificate = new X509CertImpl(inputStream);

我想从那个文件中获取证书链! (终端实体、CA、根) 我如何在 java 中以编程方式做到这一点。

使用 C#,这更容易

X509Chain ch = new X509Chain();
ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
ch.Build (certificate);

然后我可以从ch获得所有证书。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 从您的问题中不清楚 CA 和 ROOT 是否也包含在该 .cer 文件中(在您的代码示例中具有 .p7b 扩展名...... wtf?);如果是,@sebmal 的回答应该指明方向;如果不是...您是否尝试过使用 Java CertPathBuilder 类?
  • 哦,不,上帝。那一定是 .cer 文件,对不起!从 p7b 我可以读取所有证书
  • Certpathbuilder 需要颁发者证书,.cer 文件中不存在该证书

标签: java certificate x509certificate x509


【解决方案1】:

首先确保您使用的是java.security.cert 包;见JDK 17 API doc for java.security.cert

避免使用javax.security.cert。该软件包被标记为已弃用,并将在未来的版本中删除;见JDK 17 API doc for javax.security.cert

以下代码将返回java.security.cert.X509Certificate 对象的集合。在您的带有 medium.com 证书的示例中,该列表将包含三个项目;链中的每个证书一个。

import java.io.FileInputStream;
import java.io.InputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;

public static void main(String[] args) {
    try (InputStream inStream = new FileInputStream("C:\\Users\\grish\\Desktop\\Coding Space\\Certificates\\certificateForValidation.p7b")) {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        List<X509Certificate> certs = (List<X509Certificate>) cf.generateCertificates(inStream);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

我使用 PEM 格式的链对其进行了测试,但它也应该适用于 PCKS#7(.p7b 文件扩展名);参见generateCertificates(InputStream inStream) 方法的documentation

查找有关 x.509 编码和转换的更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2013-09-10
    • 2017-11-22
    • 2011-06-11
    • 2017-08-07
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多