로컬에서는 정상적으로 동작을 하는데 서버에서는 아래와 같이 익셉션이 발생한다..
로컬은 오라클jdk를 사용하고 서버는 openjdk를 사용하고 있었다.
오라클에서 받은 jdk가 아닌 openjdk를 사용하고 계신분이 아래에 애러가 발생하신다면 jdk변경없이 아래와 같이 해결할 수 있다.
환경
CentOS release 6.5 (Final)
jave 1.7 (java-1.7.0_99-openjdk)
기본 코드
import java.net.HttpURLConnection; import java.net.URL;public class Bla{ public static void main(String[] args) throws Exception { System.out.print("Hello\n"); String url=https://xxx.com/www?xxx=sss&aaa=ccc; try{ HttpClient client = new HttpClient(httpClientConst.connMgr); PostMethod method = new PostMethod(url); int returnCode = client.executeMethod(method); if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) { return result; } ByteArrayOutputStream outputStream = new ByteArrayOutputStream() ; byte[] byteArray = new byte[1024]; int count = 0 ; while((count = method.getResponseBodyAsStream().read(byteArray, 0, byteArray.length)) > 0){ outputStream.write(byteArray, 0, count) ; } String responseStr = new String(outputStream.toByteArray(), "utf-8"); } catch (Exception e){ e.printStackTrace(); System.out.print("Error\n"); } System.out.print("About to loop\n"); while(true){Thread.currentThread().sleep(1000);} //Crudest debug ever } } |
애러메세지
javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1916) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1874) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1857) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1783) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:127) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:825) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager $HttpConnectionAdapter.flushRequestOutputStream(MultiThreadedHttpConnectionManager.java:1543) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1975) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:393) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:168) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) at com.GifTing.gw.media.business.BuyHistStatusBusiness.getGalaxiaPinInfo(BuyHistStatusBusiness.java:904) at com.GifTing.gw.media.business.BuyHistStatusBusiness.OutPinStatus(BuyHistStatusBusiness.java:384) at com.GifTing.gw.media.action.OutPinAction.pinStatus(OutPinAction.java:192) 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.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269) at com.dki.asf.action.DispatchAction.execute(DispatchAction.java:42) at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58) at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 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 com.GifTing.common.filter.ForbidFilter.doFilter(ForbidFilter.java:64) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at com.dki.asf.web.filter.EncodingFilter.doFilter(EncodingFilter.java:44) 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:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: java.security.ProviderException: java.security.KeyException at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:146) at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:704) at sun.security.ssl.ECDHCrypt.<init>(ECDHCrypt.java:78) at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:717) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:278) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:913) at sun.security.ssl.Handshaker.process_record(Handshaker.java:849) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1035) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:721) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) ... 54 more Caused by: java.security.KeyException at sun.security.ec.ECKeyPairGenerator.generateECKeyPair(Native Method) at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:126) |
해결
openjdk 1.7에서만 문제가 발행하였다.
1.8로 업데이트를 하면 문제가 발생하지 않는다.
하지만 해당서버에서 다른 서비스도 돌아가기떄문에 버젼업을 하기 애매하여
라이브러리를 추가하는 작업을 하였다.
[root@WAS-SERVER-01 bin]# yum provides /usr/lib64/libssl3.so
[root@WAS-SERVER-01 lib64]# sudo yum upgrade nss
'Programming > JAVA' 카테고리의 다른 글
[JAVA] 람다식 기본 예제 2 (sorted) (0) | 2018.02.14 |
---|---|
[JAVA] 람다식 기본 예제 1 (map, filter, reduce, collect) (2) | 2018.01.19 |
[JAVA] 람다식(lambda expression) 이란? (0) | 2018.01.19 |
[JAVA] 문자 관련 stringUtil 모음 (0) | 2017.12.24 |
[JAVA] 날짜 관련 dateutil 모음 (0) | 2017.12.24 |