java - 由于 keystore 文件导致 ssl 握手异常

标签 java soap sslexception

我有一个请求,需要将数据库上的内容从服务器 A 中运行的应用程序写入到另一个实例服务器 B 中运行的同一应用程序。

数据库读写是通过 SOAP API 进行的

两台服务器都有自己的 client.truststore 文件。

从使用服务器 A 的 client.trustsrore 的独立服务器 C,我能够对服务器 A 的数据库进行读写操作 并且使用服务器 B 的客户端信任库我能够读取写入服务器 B 的数据库。

由于要求是从服务器 A 读取并写入服务器 B。我在两台服务器中引入了一个新的 keystore 文件,并正确设置了 system.properties( keystore 位置和密码)。并且此 keystore 已正确复制到具有权限的两台服务器中。

我使用私钥创建了证书,然后使用 keytool 命令创建了 keystore 文件。

由于将 keystore 文件保存在 2 个服务器中不起作用。它总是提示unknown_certificate。 我尝试将证书导入到/$JAVA_HOME/lib/security/下的 cacerts 中。但即使这样也会给出带有握手异常的未知证书。

还有什么我想做却错过的事情吗?

问候
迪拉吉·乔希

最佳答案

应用程序服务器的证书必须与该服务器的主机名匹配。这可能是这里的问题,因为您有两个具有两个不同主机名的不同服务器。

在证书生成过程中,当系统要求您提供名字和姓氏时,您应该输入有效的主机名:

What is your first and last name?
[Unknown]:  myserver.domain.com

但在这种情况下,我不太确定你可以做什么来完成你的任务。也许您应该为您的服务器拥有两个具有不同相应主机名的不同证书。但这些证书应由数据库信任的一个父证书进行签名。类似这样的事情。

关于java - 由于 keystore 文件导致 ssl 握手异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633439/

相关文章:

java - 类型参数名称 P 和 R 的含义是什么?它们如何使用?

java - 在另一个实例变量中使用 Autowiring 参数

java - 从模式生成接口(interface)

java - 如何将入站和出站 SOAP 处理程序相互关联

java - 创建新的 AVD 后无法运行 Android 应用程序

java - 错误: multiply(long) is not public in BigInteger; cannot be accessed from outside package

javascript - 使用 Javascript 与 SOAP API 对话

java-7 - javax.net.ssl.SSLException : Received fatal alert: unexpected_message in Java7 异常

Java 1.8 和 tomcat 6.0.53 由 : java. io.EOFException 引起:SSL 对等点错误关闭

ssl - 无法记录使用 SSL 证书的 https 网站