我正在尝试使用 POST 请求和 Spring Rest 模板访问第三个服务。当我使用 Curl 命令进行尝试时,我得到了完美的响应。
curl -k --data @body.json -v --cert tomcat -X POST -H 'Content-Type:application/json' https://220.227.71.46:9444/eko/initiateIMPSFundTransfer
这里的tomcat是我服务器证书的昵称。 当我尝试用 Java 做同样的事情时,我的问题就出现了。 首先,我试图忽略 SSL 身份验证。如果有人需要,我将跳过将发布的代码。但是当我调用 POST 请求时,我收到远程主机连接已关闭的错误响应。当我尝试注册我的 keystore 并使用以下代码设置 SSL 上下文时。我得到了错误。 org.springframework.web.client.ResourceAccessException:“https://220.227.71.46:9444/eko/initiateIMPSFundTransfer”的 POST 请求中的 I/O 错误:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径;嵌套异常是 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
InputStream keyStoreInputStream = this.getClass().getClassLoader()
.getResourceAsStream("test.webservices.eko.co.in.jks");
log.info("keyStoreInputStream " + keyStoreInputStream);
if (keyStoreInputStream == null) {
try {
throw new FileNotFoundException(
"Could not find file named 'test.webservices.eko.co.in.jks' in the CLASSPATH");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
KeyStore trustStore = null;
try {
trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
trustStore.load(keyStoreInputStream, "changeit".toCharArray());
} catch (NoSuchAlgorithmException | CertificateException |
IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
keyStoreInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我怀疑我正在注册我的服务器的 keystore ,我的 java keystore 也有这个 .jks,我正在运行这个应用程序。取而代之的是,我需要注册我正在访问的服务器的证书。上述错误是什么意思,我该如何解决。
我是 SSL 验证的新手,所以请在这里帮助我。
最佳答案
您需要将远程服务器的 SSL 证书添加到您的 Java 代码在尝试建立连接时使用的 keystore 。
关于java - 通过Rest Template访问第三方服务器时双向身份验证如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575473/