#. 참고 글
#. 에러 상황
WebLogic 측에서 외부 서버를 호출 시 호출 대상 서버에 SSL 인증서가 설치되어 있을 경우,
hostname verification 과정에서 신뢰할 수 없는 hostname 으로 인식되어 에러가 발생하는 경우가 있다.
WebLogic 11g (10.3.6) : JSSE SSL Enable 옵션 활성화
WebLogic 12c 이상 : 호스트 이름 확인 비활성화 / -DUseSunHttpHandler=true
Ignoring the trusted CA certificate 에러 + Connection closed, EOF detected 에러
WebLogic 로그에 아래와 같은 내용이 기록되고, 업무 페이지 출력이 안 되는 상황
Error 로그는 아니지만, 업무 페이지 출력이 되지 않는다.
<Notice> <Security> <BEA-090898> <Ignoring the trusted CA certificate "CN=***** (see current address at *****". The loading of the trusted certificate list raised a certificate parsing exception PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11.>
WEB 서버(OHS 12.2.1.3)에 SSL 인증서가 적용되어 있는 상황.
WEB 서버와 WAS 서버 간에 SSL 통신이 정상적으로 되지 못하고 있는 것으로 추측하였다.
구글에 Ignoring the trusted CA certificate 키워드로 검색해보았음.
#. 조치 방법
WebLogic Admin Console 접속
JSSE SSL Enable 옵션 활성화
해당 옵션은
SSL 및 TLS 프로토콜을 구현할 프로그램을
JSSE(Java Secure Socket Extension) 로 변경하는 옵션.
WebLogic 10.3.6 기준, Default 세팅에서는 Certicom 이라는 프로그램을 사용한다.
상위 버전인 12cR1 부터 Default로 JSSE를 사용하도록 변경되었다.
JSSE SSL 사용 여부 선택 옵션 자체가 사라져있음.
#. 문제 발생 원인
Certicom 프로그램은 출시된지 오래되었다고 한다. (정확한 release 날짜는 확인 못하였음)
이로 인해 12cR1 버전에서부터 Certicom을 사용하지 않도록 변경되었을 것으로 추측.
Certicom 프로그램이 최신 SSL 인증서를 정상적으로 인식하지 못하여
위와 같은 현상이 발생하는 것으로 확인된다.
#. 2023_06_22 추가 - JSSE Enabled 이후에 발생하는 다른 에러 상황
JSSE Enabled 이후에 다른 에러가 발생하는 경우가 있다.
java.io.IOException: Connection closed, EOF detected
at weblogic.socket.JSSEFilterImpl.handleUnwrapResults(JSSEFilterImpl.java:545)
at weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:462)
at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:82)
at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:66)
at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:61)
at weblogic.socket.JSSEFilterImpl.write(JSSEFilterImpl.java:396)
at weblogic.socket.JSSESocket$JSSEOutputStream.write(JSSESocket.java:89)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:191)
at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:411)
at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
at jsp_servlet._total_search.__search_cic.searchUserList2(__search_cic.java:207)
at jsp_servlet._total_search.__search_cic._jspService(__search_cic.java:608)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3750)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1493)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
아래의 조치사항들을 시도해본다
1) TLS 호환성 문제로 인한 SSL handshake 에러인 경우
Oracle 문서 확인 (Doc ID 2310954.1)
weblogic 에서 사용할 TLS 버전명 지정
-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.2
2) weblogic 자체 http handler가 아닌, java 자체 http handler를 사용해야 하는 경우
https://stackoverflow.com/questions/39408507/connection-closed-eof-detected
-DUseSunHttpHandler=true
-Dssl.SocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl
-Dssl.ServerSocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl
(2024_12_04 - WebLogic12.2.1.4 환경에서 해당 옵션 설정하여 에러 해결하였음)
3) weblogic 설정에서 "호스트 이름 확인" 비활성화
1. 서버 인스턴스 목록 화면 이동
2. 설정 변경 대상 인스턴스 이름 클릭
3. SSL 탭으로 이동
4. 화면 하단의 “고급” 클릭
5. 호스트 이름 확인 -> “없음” 으로 수정
자바 옵션으로도 가능하다 -Dweblogic.security.SSL.ignoreHostnameVerification=true
https://recordsoflife.tistory.com/299
'WAS - WebLogic > 각종 설정, 에러 조치' 카테고리의 다른 글
[WebLogic] Admin Console 특정 IP만 접속 가능하도록 제한 (0) | 2022.07.21 |
---|---|
[WebLogic] server log 및 access log 경로 변경 가이드 (0) | 2022.04.20 |
[WebLogic] 운영체제 별 WebLogic 점검 방법 정리 (0) | 2022.03.14 |
[weblogic] HTTPS로 호출했는데 HTTP로 리다이렉트 되는 현상 (0) | 2021.11.08 |
[weblogic] IBM JAVA - Large Object Area 사이즈 튜닝 (0) | 2021.10.15 |