gpt4 book ai didi

java - CertPath 问题 - HTTPS 服务器不显示 CA 证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:43 25 4
gpt4 key购买 nike

以下代码实现了我认为的预期效果 - 将具有整个证书层次结构的私钥放入 keystore (然后在本地保存为 .jks 文件)。我用 KeyStore Explorer 仔细检查了它,它看起来不错。

但是,当我实际使用该条目创建 HTTPS 服务器实例时,我只能看到已签名的证书,因此连接不受信任。当我使用 KSE 生成、创建 CSR 和 CA 回复并导入签名证书时,不会发生同样的事情。

我做错了什么?我必须做什么才能让服务器显示 CA 的证书,以便浏览器显示“可信连接”?

X509Certificate caCert = (new X509CertImpl(caKeyStore.getCertificate(rootDN).getEncoded()));

X509Certificate signed = CertificateMisc.bouncyCastle_Sign(csr,
(PrivateKey) caKeyStore.getKey(rootDN, caKeyPairPassword),
caCert.getSubjectDN().getName(),
CA.algorithm, Misc.generateRandomBigInteger(), notBefore, notAfter,
keyUsage, emailAddress);

KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);

keyStore.setKeyEntry(dn, keyPair.getPrivate(), keyPairPassword,
new X509Certificate[]{signed, caCert});

这是 CA 的 KeyUsage 和已签名的证书。

KeyUsage.dataEncipherment | KeyUsage.keyEncipherment | KeyUsage.keyCertSign
| KeyUsage.digitalSignature | KeyUsage.keyAgreement | KeyUsage.keyCertSign
| KeyUsage.nonRepudiation | KeyUsage.cRLSign

最佳答案

What must I do to make the Server to show the CA's Certificate so that the Browser will show "Trusted Connection"?

您无需在服务器上为 CA 做任何事情。由客户端信任您正在使用的 CA。如果客户端不信任您正在使用的 CA,那么您将无能为力(除非要求用户信任您正在使用的 CA)。

您有责任发送服务器证书,以及构建从服务器证书到 CA 证书的路径所需的任何中间证书。这避免了“哪个目录”问题,这是 PKI 中众所周知的问题。从本质上讲,“哪个目录”问题意味着客户端不知道 不知道去哪里获取丢失的中间证书。为避免此问题,您可以在握手期间发送它们。


What am I doing wrong?

只是猜测,但正在发生以下两种情况之一(没有明显的事情,例如过期的证书或不正确的 key 使用)。

首先,客户端不信任服务器正在使用的 CA。要修复它,请让用户信任您的 CA;或使用客户端软件信任的不同 CA。

其次,发送构建从服务器证书到 CA 证书的路径所需的缺少的中间证书。

关于java - CertPath 问题 - HTTPS 服务器不显示 CA 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218980/

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