권방학
권방학4w ago

Xpay 설정 관련 변경 문의사항

유플러스 도메인 종료 및 TLS 1.2 미만 지원종료 관련 메일을 받았습니다. 내용중 conf/mall.conf 파일내의 설정에서 3-1) default_secure_protocols 값을 2048 로 변경 합니다. (다른 값 사용 불가) ASP.NET: default_secure_protocols 값을 3072 로 변경 합니다. (다른 값 사용 불가) 3-2) Java 환경 이실경우, SSL 인증서 운영중인 환경에 적용하시고 keystore_cacerts_dir 값에 인증서 위치를 명시 합니다. 이라고 나와 있는데 현재 자바 환경에서 사용중인데 기존 mall.conf에 default_secure_protocols , keystore_cacerts_dir 이 없는데 따로 작성을 해야 하는건가요?
24 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
박의원
박의원4w ago
혹시 가장 최근에 결제된 결제건 주문번호를 알수 있을까요? 그리고 사용중이신 JDK버전은 어떻게 되실까요?
권방학
권방학4w ago
jdk 버전은 1.8 사용중이고 주문번호는 179631728281599125 입니다
Kimoon Lee
Kimoon Lee4w ago
주문하신 시점이 언제이신가요?
권방학
권방학4w ago
15시 13분 입니다.
박의원
박의원4w ago
jdk 1.8이상이고, 현재 쓰고계신 xpayClient 버전이 1.1.5.5 로 확인됩니다. 이경우 default_secure_protocols , keystore_cacerts_dir 는 따로 설정하지 않아도 됩니다. lgdacom.conf 안에 설정된 url 정보가 어떻게 될까요?
박의원
박의원4w ago
네 이부분의 URL만 공지대로 수정부탁드립니다. url = https://xpay-gateway.tosspayments.com/xpay/Gateway.do 로 수정해주시고 aux_url 은 삭제하셔도 됩니다. 이 부분 수정후 결제테스트를 진행해보시고, 주문번호 회신주시면 정상적으로 올라오는지 확인해드리겠습니다.
권방학
권방학4w ago
넵 오늘 당장은 수정 하지 않을것 같아 추후에 수정후 다시 말씀드리겠습니다. 아 그리고 TLS 1.2 전환 쪽 관련 질문인데 JSP는 // 방법 1: catalina.sh 파일에 옵션 추가 -Dhttps.protocols=TLSv1.2 // 방법 2: 코드에서 프로그램적으로 설정 System.setProperty("https.protocols", "TLSv1.2"); <Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="path_to_keystore_file" keystorePass="password" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2" /> 이렇게 두가지 다 설정을 해줘야 하나요?
박의원
박의원4w ago
JDK 1.8 이면 default protocol 이 TLS1.2 라서, 따로 설정하실것은 없을겁니다. 1.7 일경우 TLS1.2 를 지원하지만 디폴트가 TLS 1.1 이기 때문에, 말씀하신 설정을 강제 적용하는것으로 알고 있습니다. JDK 1.7을 쓰는 타 가맹점에서 적용한 방법 확인해보니 대부분 System.setProperty("https.protocols", "TLSv1.2"); 만 설정해서 사용하시는것 같았습니다 (이건 가맹점 WAS 환경설정에 따라 좀 다를수 있습니다)
권방학
권방학4w ago
아 넵 감사합니다~
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
권방학
권방학4w ago
안녕하세요 말씀해주신대로 호출 url 쪽만 수정했는데 IO error; javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 오류가 나오는데 혹시 따로 더 설정해야 하는게 있을까요?? 아 그리고 mall.conf에 verify_cert, verify_host 0 으로 설정하니 또 결제가 잘되네요
Kimoon Lee
Kimoon Lee4w ago
네 이건 host 검증에 실패해서 인데요 keystore_cacerts_dir 여기에 인증서 path를 등록해 주셔야 합니다.
권방학
권방학4w ago
원래 mall.conf에 keystore_cacerts_dir 설정하는곳이 없었는데 추가를 해주면 된다는 말씀하신가요? 그리고 추가를 해야된다면 ssl 인증서 경로를 keystore_cacerts_dir = /usr/local/.. 이런식으로 설정해주면 되나요?
Kimoon Lee
Kimoon Lee4w ago
네 맞습니다.
권방학
권방학3w ago
안녕하세요~ mall.conf에 keystore_cacerts_dir 경로 설정 후에 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 오류가 나는데 원인이 뭘까요..? 혹시 더 추가해야 하는 설정이 있을까요?
김차장
김차장3w ago
keystore_cacerts_dir 의 path 가 접근가능한 경로인지 확인해보시구요 읽기권한이 있는지도 점검해주세요 GPT에게 물어보니 다음과 같이 답변주는데요 이 내용들도 참고해보셔요
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 오류는 Java 애플리케이션에서 SSL/TLS 연결이 실패했음을 나타내며, 이는 서버의 신원을 확인할 수 없기 때문에 발생합니다. 다음은 이 오류가 발생할 수 있는 몇 가지 이유입니다:

자체 서명된 인증서: 서버가 자체 서명된 인증서를 사용하고 있으며, 클라이언트가 기본적으로 이를 신뢰하지 않을 수 있습니다.

신뢰 저장소에 인증서 누락: 클라이언트의 신뢰 저장소에 서버의 인증서 또는 유효성 검증에 필요한 인증서 체인이 포함되어 있지 않을 수 있습니다.

잘못된 인증서: 서버의 인증서가 만료되었거나, 철회되었거나, 접근 중인 호스트 이름에 대해 유효하지 않을 수 있습니다.

네트워크 문제: 방화벽이나 네트워크 구성 때문에 SSL 핸드셰이크가 방해받을 수 있습니다.

호스트 이름 검증 실패: URL의 호스트 이름이 서버 인증서의 공통 이름(CN) 또는 주체 대안 이름(SAN)과 일치하지 않을 수 있습니다.
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 오류는 Java 애플리케이션에서 SSL/TLS 연결이 실패했음을 나타내며, 이는 서버의 신원을 확인할 수 없기 때문에 발생합니다. 다음은 이 오류가 발생할 수 있는 몇 가지 이유입니다:

자체 서명된 인증서: 서버가 자체 서명된 인증서를 사용하고 있으며, 클라이언트가 기본적으로 이를 신뢰하지 않을 수 있습니다.

신뢰 저장소에 인증서 누락: 클라이언트의 신뢰 저장소에 서버의 인증서 또는 유효성 검증에 필요한 인증서 체인이 포함되어 있지 않을 수 있습니다.

잘못된 인증서: 서버의 인증서가 만료되었거나, 철회되었거나, 접근 중인 호스트 이름에 대해 유효하지 않을 수 있습니다.

네트워크 문제: 방화벽이나 네트워크 구성 때문에 SSL 핸드셰이크가 방해받을 수 있습니다.

호스트 이름 검증 실패: URL의 호스트 이름이 서버 인증서의 공통 이름(CN) 또는 주체 대안 이름(SAN)과 일치하지 않을 수 있습니다.
권방학
권방학3w ago
아 저희가 테스트서버는 현재 사설인증서로 사용중이라..그게 원인이 될수도 있겠군요. 답변 감사합니다. 안녕하세요! 패스 경로까지 설정했는데 동일한 오류가 나는데..혹시 해당 오류가 저희가 연결된 db서버가 tls1.2로 업데이트가 안된상태인데 이게 원인이 될수도 있을까요? DB는 mssql2008을 사용중입니다. 그리고 루트인증서키 읽기권한은 확인했고..공지해주신 방화벽도 오픈한 상태입니다.
Kimoon Lee
Kimoon Lee3w ago
아직 TLS 1.1 이하가 차단되지 않았기 때문에 지금 발생하는 에러는 설정하신 인증서가 저희 서버를 유효하지 않다고 판단해서 발생하는 에러입니다. 루트인증서를 확인ㄴ해 주셔야 할것 같습니다.
권방학
권방학3w ago
keystore_cacerts_dir =/usr/lib/jdk1.8.0_281/jre/lib/security/cacerts 현재 루트인증서 패스 설정입니다. 말씀하신 확인이 경로말고 혹시 뭐를 더 확인해봐야 하는걸까요..?
Kimoon Lee
Kimoon Lee3w ago
여기에 등록된 루트 인증서가 저희 서버를 유효하지 않다고 판단할수도 있을것 같습니다.
권방학
권방학3w ago
한국전자인증 기술지원 결과 저희 루트인증서에 토스측 서버 루트,체인 인증서가 다 등록되어 있는건 확인했습니다. 그리고 현재 저희가 위 답변에서 jdk1.8이면 was 쪽 sslProtocol="TLS" sslEnabledProtocols="TLSv1.2" 설정은 따로 안해도 될것같다고 하셔서 따로 설정없이 tls1.3으로 운영중인데..이 설정을 해줘야 하나요?
Kimoon Lee
Kimoon Lee3w ago
TLS 버전 이슈는 아닙니다. javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 에러라면 인증서 문제에요.