【问题标题】:x509certificate certpath validationx509certificate 证书路径验证
【发布时间】:2011-03-19 02:06:43
【问题描述】:

我们的用例需要在 PKIX 设置上通过 OCSP 验证证书吊销。我的出发点是这个相关问题的代码:OCSP Revocation on client certificate

我在应用程序级别手动执行此操作,因为 tomcat 不支持它。但是,我在构建 certPath 时遇到了一些麻烦,我认为我缺少一些基本的理解。

首先我尝试为传入的客户端 x509Certificate 创建 certPath。

KeyStore 存储已正确初始化,并且仅包含与客户端 x509Certificate 匹配的根证书。

编辑:添加中间证书后我也得到了相同的结果。

X509CertSelector certSelector = new X509CertSelector();
certSelector.setSubject(x509certificate.getSubjectX500Principal());
PKIXParameters params = new PKIXBuilderParameters(store,certSelector);
CertPathBuilder cpb = CertPathBuilder.getInstance(CertPathBuilder.getDefaultType());
CertPath certPath = cpb.build(params).getCertPath();

但是,我在运行时遇到错误:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

可能缺少什么?

【问题讨论】:

    标签: java security tomcat x509certificate pki


    【解决方案1】:

    正如您所拥有的,我不确定 CPB 将如何找到主题证书 (x509certificate) 来构建路径,除非它在您的密钥库中,但通常不会。仅提供主题名称不足以构建经过验证的路径;发现和验证算法需要完整的主题证书。看看如果你替换会发生什么

    certSelector.setSubject(x509certificate.getSubjectX500Principal());
    

    certSelector.setCertificate(x509certificate);
    

    【讨论】:

      【解决方案2】:

      您表明您添加了中间证书。由于您没有更新您的代码 sn-p 我想知道如何添加这些证书?您应该将这些证书添加为CertStore

      X509CertSelector certSelector = new X509CertSelector();
      certSelector.setSubject(x509certificate.getSubjectX500Principal());
      PKIXParameters params = new PKIXBuilderParameters(store,certSelector);
      CertStore cstore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(Arrays.asList(icert1, icert2 /*, other certs... */)));
      params.addCertStore(cstore);
      CertPathBuilder cpb = CertPathBuilder.getInstance(CertPathBuilder.getDefaultType());
      CertPath certPath = cpb.build(params).getCertPath();
      

      【讨论】:

      • 是的,我就是这样做的。但是,我找到了另一个解决我最初问题的方法,它不涉及这些 api 体操。
      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2016-06-12
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多