Sky Archive

트러블슈팅 & 디버깅

[Java] KCB 본인인증 ssl.HandshakeException 해결방법

Lee Mass 2021. 8. 10. 01:27

실무에서 KCB 본인인증 모듈을 사용해서 휴대폰 본인인증을 하는데 SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

라는 SSL 통신 에러가 뜰 때가 있다.


[2021-07-08 15:59:28.173] ERROR OO.OOOO.OOKcbCertifiedController.kcbCertified 233 | [[[CODE:50]]]:getServerRSApubKey Error - javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1340)
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1315)
sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264)
kcb.module.v3.net.HttpClient.request(HttpClient.java:224)
kcb.module.v3.OkCert.callOkCert(OkCert.java:376)
kcb.module.v3.OkCert.callOkCert(OkCert.java:347)


위와 더불어 엄청나게 많은 양의 오류가 log파일에 찍히는데 구글링을 통해서 간신히 방법을 찾았다..

원인은 JAVA8 버전부터 TLS 프로토콜인 TLSv1, TLSv1.1 버전을 security 파일에서 disable인 상태로 설정되서 설치가 되기 때문이었다.

 

제 기준에서 실무에서 쓰는 Linux Ubuntu + Open JDK 1.8에 대한 해결방법을 알려드리자면

Open JDK 1.8이 설치되있는 폴더로 이동해서 security 폴더 내에 있는 java.security 파일을 들어가서 disable 된 부분을 새로 설정해주면 해결이 된다.

[root@oooo etc]# cd java-8-openjdk/security
[root@oooo java-8-openjdk]# vi java.security

 

tip. vi 및 vim 편집기에 유용한 단축키는

2021.08.04 - [Linux] vi/vim 편집기 단축키 유용한 정리(복사 및 이동, 검색)

에서 확인하면 된다.

 

 

security 폴더를 뒤지다보면

 

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
     DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
     include jdk.disabled.namedCurves

 

라고 되어있는 부분이있다.

여기서 TLSv1, TLSv1.1을 제거하고 사용 중인 WAS인 tomcat을 재시작하면 KCB 휴대폰 본인인증 모듈이 정상적으로

실행되는 것을 확인할 수 있다.