动物园管理员法定人数。 PKIX 路径构建失败。找不到到所请求目标的有效证书路径

Posted

技术标签:

【中文标题】动物园管理员法定人数。 PKIX 路径构建失败。找不到到所请求目标的有效证书路径【英文标题】:Zookeeper quorum. PKIX path building failed. Unable to find valid certification path to requested target 【发布时间】:2021-11-27 05:32:21 【问题描述】:

Zookeeper 充当服务器并配置了具有服务器证书的密钥库。我的密钥库中的证书链如下所示:

MyIntermediateCert (signed by MyRootCertificate)
     MyZookeeperCertificate (signed by MyIntermediateCert)

定义的另一个参数是truststore,其中我只有root CA MyRootCertificate。

当 zk 启动时,我在日志中看到外部连接配置了 TLS 一切都很好,但是当 zk 的节点尝试建立仲裁并尝试相互通信时 - 我在客户端和服务器之间进行 TLS 握手时收到经典 TLS 异常.

Exception caught
io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)

ssl.quorum.hostnameVerification 为假,我不需要节点之间的主机名验证。

我的期望是客户端向服务器发送请求(从一个节点到另一个节点的调用),它接收到证书链,其中包括服务器证书和中间证书(由 CA 签名),并且该链在我的信任存储之前得到验证包括 CA。

顺便说一下,这个CA是自己生成的。

我错过了什么?

【问题讨论】:

【参考方案1】:

我想我找到了问题。

问题是我的中间证书在它的 AKI 扩展中不包含密钥标识符值,它应该指向根 CA。应该是这样的:

【讨论】:

以上是关于动物园管理员法定人数。 PKIX 路径构建失败。找不到到所请求目标的有效证书路径的主要内容,如果未能解决你的问题,请参考以下文章

Centos 7 中的 PKIX 路径构建失败

PKIX 路径构建失败:

PKIX 路径构建失败:我将证书添加到 carcert 仍然失败

PKIX 路径构建失败:wso2 oauth

SSLHandshakeException:PKIX 路径构建失败

PKIX 路径构建失败:无法找到请求目标的有效证书路径