当前位置: 首页 > 知识库问答 >
问题:

使用java验证证书链,检查撤销和OCSP状态

盛建德
2023-03-14

我对PKI的世界是新的,一般的证书。我正在写一个服务,需要验证证书链。

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);

CertPathValidatorResult certPathValidatorResult = null;
try {

  CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
  List<X509Certificate> x509Certificates =
      (List<X509Certificate>) certificateFactory.generateCertificates(byteArrayInputStream);

  CertPath certPath = certificateFactory.generateCertPath(x509Certificates);
CertPathValidator certPathValidator = CertPathValidator.getInstance("PKIX");

PKIXParameters pkixParameters = new PKIXParameters(keystore);
//pkixParameters.setRevocationEnabled(false);

PKIXParameters certPathValidatorResult = certPathValidator.validate(certPath, pkixParameters);

感谢所有的指示和帮助提前。感激不尽。

致以最诚挚的问候

共有1个答案

章丰茂
2023-03-14
  1. 正确,您可以使用CertificateFactory加载证书链。
  2. 如果要验证证书链,则不需要密钥库。使用颁发证书的autority证书对证书进行验证。
    例如:
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(chain.getBytes());
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
List<X509Certificate> x509Certificates = (List<X509Certificate>) certificateFactory.generateCertificates(byteArrayInputStream);
x509Certificates.get(1).verify(x509Certificates.get(0).getPublicKey());
x509Certificates.get(1).getNotBefore()

x509Certificates.get(1).getNotAfter()
 类似资料:
  • 我目前正在使用SSL编写一个网络TCP服务器。在生产中,我们最终将要求客户机使用证书进行身份验证。 为了在紧急情况下撤销证书,我们还希望建立CRL。 编辑:删除过时的Dropbox链接

  • 问题内容: 我目前正在使用SSL编写网络TCP服务器。在生产中,我们最终将要求客户使用证书进行身份验证。 为了在紧急情况下吊销证书,我们还想建立一个CRL。 我的问题是:Java是否开箱即用地检查CRL(如果提供了证书),还是需要手动实施此类检查? 为了进行测试,我准备了带有CRL设置的证书,但是Java似乎没有尝试对其进行验证(我将其放入本地Web服务器中并且无法访问)。 我仅找到 _com.s

  • 我想使用OCSP检查证书,这是来自服务器在TLS握手。 我使用Bouncy Castle作为OCSP实现的提供者,而BC验证方法一般需要X509Certificate作为参数。

  • 我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?

  • 我正在尝试使用DSS框架根据X509证书的吊销状态验证它,您在哪里找到它? 我使用这段代码用CRL和OCSP验证证书。我想知道是否已被撤销。 类具有类似于、、的方法,但没有与撤销相关的方法。 我在其他论坛上找到了一个方法,但我没有。我确信我已经安装了所有的依赖项。 因此,我只需要一个简单的真/假。

  • 提前谢谢你