gpt4 book ai didi

java - Java SSL TrustManager 上的部分链验证

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

我有一个要求,可以提供一个中间 CA 来信任,但不能提供签署它的 CA。并将其用作信任库,我希望能够信任具有由该中间 CA 签名的证书的 SSL 服务器。默认实现是期望构建整个链,直到找到受信任的自签名根 CA。我相信这就是整个 X509 平台的基础。但由于某些原因,我只能提供中间CA。

代码是通常的 SSLContext 创建:

    // keystore part is pseudocode to make a point
KeyStore keyStore = someWayToGenerateKeyStore;
keyStore.add(intermediateCa);
//keyStore.add(rootCaThatSignedTheIntermediateCaAbove); it will work if I add this. But I don't want to for reasons.

TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(new KeyManager[], tmf.getTrustManagers(), new SecureRandom());
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setSslContext(ctx);
client = new WebSocketClient(sslContextFactory);

OpenSSL 有一个似乎有效的参数。所以我想这不是一个完全非正统的方法。

openssl verify -CApath /dev/null -partial_chain -trusted g1 g0

要求在信任库中只包含中间 CA 的原因有两个。

  • 它可以更轻松地在当前依赖于单个自签名 CA 证书的系统中传递一个受信任的证书。目前,许多组件的通信和设置都需要一个证书,而更改证书需要进行重大重构。
  • 我们要确保我们只信任由给定的中间 CA 证书签名的证书。如果我们将链中的其他 CA 证书添加到信任库中,则 SSL 实现将信任我们也希望避免的其他 CA 签名的任何证书。可能还有其他方法可以做到这一点,比如检查 issuer_dn,但我想探索不同的方法。

最佳答案

The default implementation is to expect to build the whole chain until a trusted self-signed root CA is found

不,不是。它会验证整个链,直到在您的信任库中找到受信任的签名证书。 “自签名”与它无关,“受信任的...根 CA”仅表示它存在于您的信任库中。

所以您需要做的就是将该证书添加到您的信任库中。您根本不需要编写任何代码。

但是为什么要信任中间签名者而不信任根签名者是个谜。

关于java - Java SSL TrustManager 上的部分链验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50388142/

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