신재호
신재호2mo ago

운영 환경에서 SSL 오류 확인 부탁 드립니다.

결제 모듈 이후에 서버에서 결제승인 처리 하는데 아래와 같은 오류 만 stacktrace에 남아있습니다. 원인이 뭘까요? javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
27 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
박의원
박의원2mo ago
xpay인가요? 토스 api 방식인가요? 상점 MID 정보도 같이 회신부탁드립니다.
신재호
신재호OP2mo ago
mid : assistotli API 개별 연동 키 << 여기에 있는 정보로 쓰고 있습니다. curl로 쐈을때는 응답을 받는데, 운영서버에서 만 위와 같은 오류가 나고 있어요
박의원
박의원2mo ago
네 TLS 1.2 문제 같기도 한데요 . 개발언어는 JAVA이시죠? 서버 OS 가 어떻게 되시나요?
신재호
신재호OP2mo ago
서버 쪽은 JAVA, 서버OS 아마존 기본 EKS OS인데 확인 해봐야 할거같아요
박의원
박의원2mo ago
네 JDK버전은 어떻게 될까요?
신재호
신재호OP2mo ago
17버전 쓰고있어요
박의원
박의원2mo ago
네 혹시 개발쪽에서는 잘 됬고..운영에서만 에러가 나는건가요?
신재호
신재호OP2mo ago
네 맞습니다
박의원
박의원2mo ago
결제요청은 https://api.tossayments.com 으로 하시는거죠? 개발쪽은 윈도우 로컬환경에서 JDK17 환경에서 하신건가요?
신재호
신재호OP2mo ago
https://api.tosspayments.com/v1/payments/confirm << 여기로 승인 날리다가 생긴 오류입니다. 개발쪽은 맥북에 JDK17입니다. 개발 서버에서도 잘 되었습니다. toss키는 테스트 키로 진행했구요
박의원
박의원2mo ago
네 알겠습니다. 일단 JDK17은 TLS1.2 가 지원되기는 하는데 기본지원은 아닐겁니다. WAS 기동 옵션 내 JAVA HOME 디렉토리 설정이나, -D 옵션이 설정된 위치에 다음과 같은 명령어를 추가해보시겠어요? -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2
신재호
신재호OP2mo ago
그러면. 개발 환경이나 테스트 키에서는 잘 되는 이유가, 환경이 다른걸까요?
Kimoon Lee
Kimoon Lee2mo ago
네 그런것으로 보입니다. JDK 버전이 다르시거나 한게 아닐까 싶어요.
박의원
박의원2mo ago
JDK 1.8 이상은 저 옵션을 안넣어도 기본 설정인데, 1.7 은 WAS 설정에 따라 기본이 아닐수 있습니다
신재호
신재호OP2mo ago
1.8, 1.7이 아니고 17버전 이에용
Kimoon Lee
Kimoon Lee2mo ago
실제로 운영 서버에서 tomcat 을 동작시키는 JDK 버전을 확인해 보실수 있을까요?
박의원
박의원2mo ago
말씀하신대로 17이면..TLS 1.2 기본인데요..냥과장님 말씀대로 운영/테스트 에서 각각 java - version 을 실행한 결과를 공유해줄수 있을까요?
신재호
신재호OP2mo ago
네 확인 해보겠습니다~ 자바는 17버전이 맞고, -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2 << 넣어서 확인 해보겠습니다.
박의원
박의원2mo ago
넵 테스트 결과 회신부탁드립니다.
신재호
신재호OP2mo ago
동일하게 발생하는것 같습니다.
유부장
유부장2mo ago
이건 운영하는 "서버" 와 "클라이언트" 쪽의 버전 차이도 보셔야 할것 같은데요. 현재 운영하는 환경을 기준으로 구글링을 좀 해보셔야 할것 같습니다
박의원
박의원2mo ago
System.setProperty("https.protocols", "TLSv1.2"); 이것도 한번 적용해보시겠어요?
신재호
신재호OP2mo ago
Djavax.net.debug=ssl 요 옵션을 추가하면 ssl 핸드쉐이크 오류를 볼 수있다고 해서 추가후 확인 했습니다. No X.509 cert selected for RSA 이런 오류가 떨어지고 있는거같아요
김차장
김차장2mo ago
인증서 적용된 내용을 빼고 통신해보셔요
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpWithoutCertificate {
public static void main(String[] args) {
String urlString = "https://api.tosspayments.com/v1/payments/confirm";
String jsonInputString = """
{
"paymentKey": "5EnNZRJGvaBX7zk2yd8ydw26XvwXkLrx9POLqKQjmAw4b0e1",
"orderId": "a4CWyWY5m89PNh7xJwhk1",
"amount": 1000
}
""";
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// Set HTTP method to POST
connection.setRequestMethod("POST");

// Set headers
connection.setRequestProperty("Authorization", "Basic dGVzdF9za19YTGtLRXlwTkFyVzRsNWJlRGRqOGxtZWF4WUc1Og==");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);

// Send request body
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}

// Print response
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpWithoutCertificate {
public static void main(String[] args) {
String urlString = "https://api.tosspayments.com/v1/payments/confirm";
String jsonInputString = """
{
"paymentKey": "5EnNZRJGvaBX7zk2yd8ydw26XvwXkLrx9POLqKQjmAw4b0e1",
"orderId": "a4CWyWY5m89PNh7xJwhk1",
"amount": 1000
}
""";
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// Set HTTP method to POST
connection.setRequestMethod("POST");

// Set headers
connection.setRequestProperty("Authorization", "Basic dGVzdF9za19YTGtLRXlwTkFyVzRsNWJlRGRqOGxtZWF4WUc1Og==");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);

// Send request body
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}

// Print response
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
신재호
신재호OP2mo ago
돌고돌아 방화벽이 막혀있었던 것이 원인이었습니다. 적극적인 대응 감사했습니다 🙂

Did you find this page helpful?