티스토리 뷰
[JAVA] javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure (2)
jckim 2021. 7. 8. 22:43[관련 시리즈]
발단
이전에 앞서 작성하였던 루트 인증서 관련 SSLHandshakeException을 조치하였음에도 불구하고 관리하는 API 기관 중 어떤 기관은 앞선 작업으로 인하여 정상적으로 호출하는 것을 확인하였고
일부 기관은 앞선 작업을 하였지만 이전과 다른 새로운 에러 로그*가 나타나는 것을 확인하였음.
하지만 서버에서 curl 및 wget 명령어로 API URL을 호출할 때는 정상적인 값을 가져오는 것을 확인.
따라서 WAS단에서 문제가 있는 것으로 판단.
원인
아래는 *새로운 에러 로그
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at com.jc.pj.HomeController.testPost(HomeController.java:114)
at com.jc.pj.HomeController$$FastClassByCGLIB$$57a84547.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618)
at com.jc.pj.HomeController$$EnhancerByCGLIB$$f98447e3.testPost(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
|
cs |
해당 로그 중 눈에 새롭게 들어오는 부분은 sun.security.ssl~부분이다 관련 에러 로그로 확인을 좀 더 확인해 보니
JAVA 보안 메커니즘의 문제로 확인이 되었다.
ssl handshake 중 상대기관에서 보내온 응답에 대한 암호화 방식에 대하여
운영 중인 현재 서버의 java 암호화 방식이 지원되지 않는 것으로 판단.
각 기관의 jdk 버전 확인
상대기관 jdk 1.8
운영서버 jdk 1.7.0_45
TLS1.2v 사용한다면 보다 강력한 암호화 방식으로 256비트 키를 이용하여 암호화하여 보안 소켓 통신.
하지만 현재 상황에 경우 경우 운영서버의 jdk1.7의 보안 패키지인 Java Cryptography Extension(JCE)의 경우 기본적으로 128비트 키를 이용하여 암호화를 지원을 하기 때문에 무제한 강도의 JCE 정책지원 버전으로 교체가 필요.
조치
oracle 홈페이지에서 jdk7전용 무제한 강도의 JCE 패키지 다운로드
https://www.oracle.com/java/technologies/javase-jce7-downloads.html
운영서버의 JCE 패키지 교체
(보안상 윈도우즈 PC 기준으로 경로 작성)
아래 경로에 jar파일 2개를 다운로드한 jar 파일로 교체
C:\Program Files\Java\jdk1.7.0_45\jre\lib\security
US_export_policy.jar
local_policy.jar
비교해보면 교체 전과 후의 파일 사이즈도 다른 것 확인 가능.
교체 전 | 교체 후 |
'JAVA' 카테고리의 다른 글
vscode Execution failed for task ':compileJava' 해결 (0) | 2023.02.27 |
---|---|
jstl 부등호 ge(GreaterThanOrEquals)는 mybatis에서 사용 할 수 없는가 (0) | 2022.03.28 |
[java] javax.net.ssl.SSLHandshakeException : Received fatal alert : handshake_failure (0) | 2021.06.08 |
[java] API 호출 안되는 현상 해결 (301 응답코드) (1) | 2020.12.07 |
[java] SSLException: Received fatal alert: protocol_version 에러 해결 (0) | 2020.08.15 |
- Total
- Today
- Yesterday
- web
- SSL
- JPA
- JSON
- Linux
- IMAGE
- Oracle
- 날짜
- parse
- jaxen
- btye
- 이벤트발생
- jQuery
- html
- React
- gradle
- Git
- WAS
- spring
- docker
- 컨테이너
- vscode
- mybatis
- Eclipse
- 깨짐
- Java
- SpringBoot
- SQL
- TLS
- Windows
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |