[英]Java: SSLHandshake Exception while connecting to a service in Spring Boot
我正在研究 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 放入我的 Spring Boot 應用程序的resources
文件夾中。
並按照Sasha Shpota 針對此相關 StackOverflow 問題的方法中的建議,通過代碼加載此 jks,但在我的情況下它也不起作用。
對此的任何想法或指示表示贊賞。 我可以使用java.lang.Runtime
類調用上述工作curl
命令,但這不是我相信的高效 java 方式。
我正在使用 OpenJDK8
我已經關注了這篇文章,它對我有用。
創建已獲得私鑰 + 公共證書的身份存儲和包含服務器證書的信任存儲。
我之前錯過了什么? 嘗試使用以下代碼片段加載 p12 文件
try(CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()){
}
不應包含在 try with resources 中,而應像這樣使用
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(yourLoadSSLFunction()).build()
RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
restTemplate.setRequestFactory(requestFactory);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.