簡體   English   中英

Java:連接到 Spring Boot 中的服務時出現 SSLHandshake 異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM