토스페이먼츠 lg U+ http 환경 테스트 가능 여부 문의
토스페이먼츠 lg U+ 결제 사용 중입니다.
igdacom.conf 에서 test_url을 다음과 같이 설정했습니다.
test_url = https://xpay-gateway-sandbox.tosspayments.com/xpay/Gateway.do
http 환경에서 테스트 진행 시, javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 오류가 출력됩니다.
문의드릴 사항은, http 환경에서 test_url 을 사용한 결제 테스트는 불가능 한지 문의드립니다.
36 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
http 환겨에서는 가능한데 지금 에러로 보면 TLS 버전이 1.2 미만으로 보입니다.
TLS 버전을 1.2 이상으로 올려주세요.
tomcat 의 catalina.sh 에 아래처럼 추가 후 처리해도 동일한 오류가 뜹니다.
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dhttps.protocols=TLSv1.2"
사용하시는 JDK 버전확인 가능하실까요?
java version "17.0.12" 2024-07-16 LTS
Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)
입니다.
mall.conf 파일에 default_secure_protocols 값이 어떻게 되어 있는지도 확인부탁드립니다.
default_secure_protocols 값이 없습니다.
그럼 xpayclient.jar 파일 버전 확인 가능하실까요?
.jar 파일자체에 버전이 적혀있지 않고, MANIFEST.MF 에는 Manifest-Version: 1.0 만 적혀있습니다.
버전 확인에 도움이 될까 .jar 에 있는 class 파일 보여드립니다.

16년도면 너무 예전 버전이네요.
여기있는 라이브러리와 설정 파일들로 적용부탁드립니다.
라이브러리 및 jsp 파일도 추가되어야 하는걸까요 ??
아니요 라이브러리만 교체하시면 됩니다.
라이브러리 교체하시고
mall.conf 에 아래 내용을 추가해주시면 TLS 1.2 로 통신됩니다.
default_secure_protocols = 2048
라이브러리 교체하고 mall.conf 내용 추가하여 테스트 중인데, java.lang.NoClassDefFoundError: lgdacom/XPayClient/XPayClient 가 떠서 현재 확인중에 있습니다.
따로 연동 관련 오류가 날 시 재 문의 하겠습니다.
혹시 1개월내 발생한 가장 최신 거래의 주문번호나 (취소도 관계없음) mid 정보를 알수 있을까요?
저희쪽 서버로그를 보고, 기존의 xpayClient 버전이 어떤것이었는지 확인키위합니다.
1개월 내 결제 내역이 없습니다.
네 알겠습니다.
서버 환경 확인해보니, tomcat 에 사용하는 자바 버전이 1.7 인 것으로 확인되었습니다.
현재 올려주신 라이브러리에는 자바 1.8 버전 에서 컴파일 되어서 오류가 나고 있습니다.
죄송하지만, 자바 버전 1.7에서 컴파일한 XpayClient.jar 파일도 있을까요 ?
감사합니다. 해당 파일로 테스트 해보겠습니다.
이 파일을 받아서 이름변경후 올려주세요
그리고..jdk 1.7 이면 상황이 좀 많이 다른데..사실 1.8 이상이면 저 설정을 할 필요도 없고 라이브러리 교체도 필요가 없습니다.
일단 서버가 TLS 1.2 가 지원되는지를 봐야 할것 같은데요
import javax.net.ssl.;
import java.net.;
import java.io.*;
public class Tls12Probe {
public static void main(String[] args) throws Exception {
String host = args.length > 0 ? args[0] : "example.com";
int port = args.length > 1 ? Integer.parseInt(args[1]) : 443;
// TLSv1.2만 사용하도록 SSLContext와 소켓 구성
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(null, null, null);
SSLSocketFactory sf = ctx.getSocketFactory();
try (SSLSocket s = (SSLSocket) sf.createSocket(host, port)) {
s.setEnabledProtocols(new String[] { "TLSv1.2" });
s.startHandshake();
SSLSession sess = s.getSession();
System.out.println("Protocol : " + sess.getProtocol());
System.out.println("CipherSuite: " + sess.getCipherSuite());
}
}
}
이거를 컴파일 후 실행해보시고, 결과가 어떻게 나오는지도 체크 부탁드립니다
Protocol 이 TLS 1.2 가 안나오면.. xpayClient.jar를 교체해도 통신이 안될겁니다.
java
import javax.net.ssl.;
import java.net.;
import java.io.*;
public class Tls12Probe {
public static void main(String[] args) throws Exception {
String host = args.length > 0 ? args[0] : "example.com";
int port = args.length > 1 ? Integer.parseInt(args[1]) : 443;
// TLSv1.2만 사용하도록 SSLContext와 소켓 구성
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
ctx.init(null, null, null);
SSLSocketFactory sf = ctx.getSocketFactory();
try (SSLSocket s = (SSLSocket) sf.createSocket(host, port)) {
s.setEnabledProtocols(new String[] { "TLSv1.2" });
s.startHandshake();
SSLSession sess = s.getSession();
System.out.println("Protocol : " + sess.getProtocol());
System.out.println("CipherSuite: " + sess.getCipherSuite());
}
}
}
```
넵 먼저 테스트 진행해보겠습니다. .jar 파일도 올려주신걸로 수정해보겠습니다. 감사합니다.
테스트 진행 시, Received fatal alert: handshake_failure 오류가 납니다. 소스 코드 상단에
System.setProperty("https.protocols", "TLSv1.2"); 를 추가해도 똑같은 오류가 나네요.
이 경우, 현재 테스트 자바를 1.8 버전으로 올리는 방법이 최선이겠네요.
우선, 자바 1.7 버전 중, TLSv1.2 가 지원되는 버전으로 변경을 먼저 해보겠습니다.
jdk 1.7u95 (오라클 제공 마지막 1.7 버전) 이 아니면 TLS 1.2가 안될겁니다. 그리고 이걸 설치해도 JVM 및 웹서버 (톰캣 및 WebToB)에 환경설정을 변경해야 합니다.
가급적 jdk 1.8 이상으로 올리시는 것을 권장드립니다.
TLS 1.2 이상이 되더라도, cipher suite 가 보안취약 알고리즘으로 들어오면 여기도 차단될수 있습니다.
jdk 1.7.0_80 버전으로 톰캣 catalina.sh 에 설정 추가와 결제 응답 부분에
System.setProperty("https.protocols", "TLSv1.2");
System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
추가하여 정상 처리 되었습니다.
테스트 성공한 mid 는 다음과 같습니다.
tusjg202510220945084ocp9
감사합니다.
네 저희쪽에도 TLS 1.2 로 정상적으로 들어왔습니다
다만, cipher suite 가 좀 보안이 취약한데요..
ECDHE-RSA-AES128-CBC-SHA
로 들어왔습니다.
아래 링크 참고해보시고
https://docs.tosspayments.com/reference/using-api/security#보안에-취약한-cipher-suite-는-지원되지-않습니다
보안 | 토스페이먼츠 개발자센터
토스페이먼츠 API의 보안 정책과 방화벽 설정하는 방법을 안내합니다.
위에 공유드린 노션링크 내 문서 참고하시어 이것도 함께 대응해주시면 추후 좋을것 같습니다.
아 해당 테스트는 실제 운영하는 사이트가 아닌, 운영 업로드 전 개발서버에서 테스트 하는 용도이며, 다른 사람이 접근 못하게 되어있습니다.
실제 운영하는 사이트는 자바가 1.7.0_191 버전이며, test_url 이 아닌 url 을 사용합니다.
감사합니다.
네 추후 저희 보안정책이 강화되면, 지금 정상적인 테스트서버가 추후 cipher suite 로 인해 동일하게 연결이 안될 가능성이 있어 대비차원으로 말씀드렸습니다.
앗, 그럼 급한건 부터 처리 후 올려주신 cipher suite 처리 진행 하도록 하겠습니다.
알려주셔서 감사합니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.