我正在研究Apple Pay POC,在这个过程中,我试图使用一个休息服务,但很难通过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放入我的弹簧启动应用程序的resources
文件夹中。
并按照 Sasha Shpota 针对这个相关 StackOverflow 问题的方法中的建议通过代码加载这个 jks,但它在我的情况下也不起作用。
对此的任何想法或指示不胜感激。我可以使用java.lang.Runtime
类调用上述工作curl
命令,但我相信这不是有效的 java 方法。
我正在使用 OpenJDK8
我关注了这篇文章,它对我有用。
创建了已获取私钥 + 公共证书的身份存储和包含服务器证书的信任存储。
我以前错过了什么? 尝试使用以下代码片段加载 p12 文件
try(CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()){
}
不应该包含在尝试资源中,而应该像这样使用
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()
RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
restTemplate.setRequestFactory(requestFactory);