我正在研究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
我遵循了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);