[Java:在Spring Boot中连接到服务时出现SSLHandshake异常

问题描述 投票:1回答:1

我正在研究Apple Pay POC,并且在此过程中,我正在尝试使用Rest服务,但是很难通过Java代码连接到该服务器。

但是,使用下面的curl命令是正常的。

curl -v --cert publicCert.pem:srk --key privateKey.pem -H Content-type:application/json --request POST --data 
{
    "merchantIdentifier": "merchant.com.xxxx.srk-demos",
    "displayName": "poc",
    "initiative": "web",
    "initiativeContext": "srk-demos.xxxx.com"
}
https://apple-pay-gateway-cert.apple.com/paymentservices/startSession

[我所拥有的只是一个merchant.p12文件,我从中提取了pem格式的私钥和公共证书。私钥的密码与p12文件相同,在这种情况下为srk

我正在使用带有RestTemplate的Spring Boot来使用该服务。将mic.p12直接导入到jks。然后,将jks放入我的spring boot应用程序的resources文件夹中。

并按照Sasha Shpota for this relevant StackOverflow question的方法建议的方式通过代码加载了该jks,但对我而言这也不起作用。

对此有任何想法或建议,我们将不胜感激。我可以使用curl类调用上述工作的java.lang.Runtime命令,但是我认为这不是有效的Java方法。

我正在使用OpenJDK8

java spring-boot ssl-certificate applepay
1个回答
0
投票

我遵循了this post,它对我有用。

具有私钥+公共证书和包含服务器证书的信任存储的创建的身份存储。

我以前想念什么?尝试使用以下代码段加载p12文件

try(CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()){
}

不应与资源一起放在try中,而应像这样使用]]]

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()

RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
restTemplate.setRequestFactory(requestFactory);
© www.soinside.com 2019 - 2024. All rights reserved.