解决 Java 中 the Public Keys in Reply and Keystore Don't Match 错误
本篇文章讨论 keytool error: java.lang.Exception: Public keys in reply and keystore don't match 错误。 它还强调了导致此错误的可能原因。
此外,我们将了解可用于修复此错误的不同解决方案。
keytool error: java.lang.Exception: Public keys in reply and keystore don't match 的错误描述、原因及可能的解决方案
我们将尝试访问托管在端口 443 的 Web 服务。服务提供商共享三个证书:ABCD.cer、CCA_Certificate.cer 和 CA_Certificate.cer。
我们需要通过创建 SSL 通信的表单链将它们全部添加到 KeyStore 中。 下面按顺序给出了我们在本文中遵循的步骤。
- keytool -keystore npci_keystore.jks -genkey -alias npci_client
- keytool -import -keystore npci_keystore.jks -file CA_Certificate.cer -alias CARoot
- keytool -import -keystore npci_keystore.jks -file CCA_Certificate.cer -alias CCARoot
- keytool -import -keystore npci_keystore.jks -file ABCD.cer -alias npci_client
此时,我们收到错误消息,提示 keytool error: java.lang.Exception: Public keys in reply and keystore don't match。 这个错误到底是怎么回事? 为什么我们会遇到这个问题?
我们遇到此问题的原因有多种,如下所示:
- 当我们尝试使用不同的密钥对生成证书时,我们会收到此错误。
- 如果我们在导入证书和创建 JKS 存储时使用相同的别名,则会出现此错误。
- 有时,以错误的顺序安装证书也会导致此错误。
- 如果链中缺少根 CA 的证书,我们也会解决此问题。
现在的重点是如何消灭它。 让我们在下一节中看看。
解决 Public Keys in Reply and Keystore Don't Match 错误
在我们的场景中,我们使用的链接指导我们如何为服务器创建 SSL KeyStore,这不是我们想要实现的目标。 我们所做的是从创建新的密钥对开始。
接下来,我们向 KeyStore 添加一个受信任的证书,向 KeyStore 添加另一个受信任的证书,然后尝试为我们的密钥对导入服务器的 SSL 证书。
此时,我们失败了,因为生成的 SSL 证书适用于完全不同的密钥对。 我们拥有的三项证书包括:
- Web 服务的 SSL 证书
- 签署 SSL 证书的 CA 证书
- 签署 CA 的根证书
现在,我们必须将信任锚添加到我们的 TrustStore 中。 默认情况下,它是 ${JAVA_HOME}/jre/lib/security/cacerts
,结果是我们的客户端接受 Web 服务的 SSL 证书。
请记住,在 SSL 握手期间,SSL 服务器将整个链(不包括根证书)发送到客户端。 因此,我们必须将根证书添加到我们的信任库中,如下所示。
keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias CCARoot
如果 Web 服务需要 SSL 客户端身份验证,则一些附加步骤是必不可少的。 如果我们从未提到过客户端身份验证,那么这是不必要的。
这就是在我们的例子中修复错误的方法,但是如果我们处于不同的情况,我们可以尝试其他解决方案。
- 我们需要使用相同的实际密钥对再次生成证书以消除此错误。
- 在某些情况下,错误是由于在创建 JKS 存储和导入证书时使用相同的别名而导致的。 然后,我们需要更改别名来解决错误。
- 确保链中不缺少根 CA 的证书。
相关文章
解决 Java 中 java.util.zip.ZipException: Error in the Opening Zip File
发布时间:2023/07/10 浏览次数:58 分类:Java
-
本篇文章讨论了 java.util.zip.ZipException: error in opening zip file 消息背后的原因,并提供了该问题的可能解决方案。 让我们从理解错误开始。java.util.zip.ZipException:error in opening zip file
Java 错误 java.util.InputMismatchException
发布时间:2023/07/10 浏览次数:126 分类:Java
-
本文将讨论Java编程语言主线程中的 java.util.InputMismatchException。Java 中的 java.util.InputMismatchException 每当 JVM 收到一种数据作为输入但需要另一种类型的值(这表明数据不匹配)时,它就会抛出 j
修复 Minecraft 错误 Error Occurred During Initialization of VM
发布时间:2023/07/10 浏览次数:139 分类:Java
-
今天,我们将了解为什么在 Minecraft 中初始化 VM 时出现错误,以及如何解决该错误。 因此,让我们首先了解错误和可能的原因。描述错误及其原因
修复 Java 异常 Java.IO.NotSerializableException
发布时间:2023/07/10 浏览次数:84 分类:Java
-
今天,我们将在用Java编写程序时重现 java.io.NotSerializedException。 我们还将了解该错误的含义、导致其原因和解决方案。在Java中重现java.io.NotSerializedException
Minecraft 上 An Existing Connection Was Forcibly Closed by the Remote Host 错误
发布时间:2023/07/10 浏览次数:103 分类:Java
-
本篇文章介绍了使用 Minecraft 时出现远程主机错误强制关闭现有连接的原因和解决方案。Minecraft 上 Java.IO.IOException: An Existing Connection Was Forcibly Closed by the Remote Host 原因
在 Java 中处理整数上溢和下溢
发布时间:2023/07/10 浏览次数:102 分类:Java
-
本文介绍整数数据类型的上溢和下溢以及该问题的处理。Java 中整数上溢和下溢概述 如果您使用整数值,则可能会遇到上溢或下溢错误。
理解 Java 中的 java.lang.reflect.InvocationTargetException 错误
发布时间:2023/07/10 浏览次数:197 分类:Java
-
在本文中,我们将了解 Java 中的 java.lang.reflect.InitationTargetException。Java 中的 java.lang.reflect.InitationTargetException 错误 当开发人员使用 Java Reflection API 时,java.lang.reflect.InitationTargetException 是一个非
Java 中 ExceptionInInitializer 错误
发布时间:2023/07/10 浏览次数:121 分类:Java
-
在这篇文章中,我们将了解Java中的 ExceptionInInitializerError。Java中 ExceptionInInitializerError 简介 ExceptionInInitializerError 是 Java 中的未经检查的异常,它是 Error 类的子类。 它属于运行时异常的类别。
Java 中 GC Overhead Limit Exceeded 错误
发布时间:2023/07/10 浏览次数:127 分类:Java
-
本文将讨论 Java 中的 GC 开销超出限制错误。Java中GC Overhead Limit Exceeded错误简介 在Java中,当程序不再使用对象时,JVM(Java虚拟机)会释放内存。