gpt4 book ai didi

java - 如何建立对中介颁发的 X.509 证书的信任?

转载 作者:行者123 更新时间:2023-11-30 05:58:07 30 4
gpt4 key购买 nike

我有一个经过数字签名的 XML 文档。我使用 XML 数字签名 API 来验证签名。但本文档是一个 SAML 2.0 断言,将用于单点登录到我们的 Web 应用程序。因此,我需要建立对用于签署 XML 文档的 X.509 证书的信任。

我用来尝试建立这种信任的代码是:

String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
FileInputStream is = new FileInputStream(filename);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "changeit";
keystore.load(is, password.toCharArray());

PKIXParameters params = new PKIXParameters(keystore);
params.setRevocationEnabled(false);

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
CertPath certPath = certFactory.generateCertPath(Arrays.asList(signatureCertificate));

CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
CertPathValidatorResult result = certPathValidator.validate(certPath, params);

PKIXCertPathValidatorResult pkixResult = (PKIXCertPathValidatorResult) result;
TrustAnchor ta = pkixResult.getTrustAnchor();
X509Certificate cert = ta.getTrustedCert();

运行时调用certPathValidator.validate()抛出 CertPathValidatorException消息 Path does not chain with any of the trust anchors .

检查证书,它说它是由 OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign,OU=VeriSign International Server CA - Class 3,OU=VeriSign\, Inc.,O=VeriSign Trust Network 颁发的。这不是 JDK cacerts key 存储中的信任 anchor 之一。

但是,使用 IE 检查类似证书的信任链,我看到 www.verisign.com/CPS Incorp.的发布者VeriSign Class 3 Public Primary CA ,它似乎确实是 JDK cacerts key 存储中的信任 anchor 之一。

我的问题:如何让 Java 验证此证书?

最佳答案

将颁发 CA 的公共(public)证书插入 cacert keystore 。

编辑:您可以使用 keytool 或其他工具之一。文章介绍了 keytool 的使用:keytool-Key and Certificate Management Tool

关于java - 如何建立对中介颁发的 X.509 证书的信任?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696141/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com