i'm running rest service on wildfly 9 using https self signed certificate using configuration.
to bypass ssl verification i'm using code:
public static client createignoresslclient() { clientconfig clientconfig = new clientconfig(); clientconfig.connectorprovider(new httpurlconnectorprovider()); sslcontext sslcontext; try { sslcontext = sslcontext.getinstance("ssl"); sslcontext.init(null, new trustmanager[]{new x509trustmanager() { public void checkclienttrusted(x509certificate[] arg0, string arg1) throws certificateexception {} public void checkservertrusted(x509certificate[] arg0, string arg1) throws certificateexception {} public x509certificate[] getacceptedissuers() { return new x509certificate[0]; } }}, new java.security.securerandom()); } catch (exception e) { throw new runtimeexception(e); } return clientbuilder.newbuilder() .sslcontext(sslcontext) .hostnameverifier(createdummyhostnameverifier()) .withconfig(clientconfig) .build(); }
i'm using jersey 2.6 keep compatibility java 6 (some applications running in jboss 4).
<dependency> <groupid>org.glassfish.jersey.core</groupid> <artifactid>jersey-client</artifactid> <version>2.6</version> </dependency> <dependency> <groupid>org.glassfish.jersey.media</groupid> <artifactid>jersey-media-moxy</artifactid> <version>2.6</version> </dependency>
everything works fine using java 8 , 7. using java 6 receive error:
21/07/2016 16:38:36 org.glassfish.jersey.client.clientrequest writeentity severe: error while committing request output stream. javax.net.ssl.sslexception: received fatal alert: unexpected_message @ com.sun.net.ssl.internal.ssl.alerts.getsslexception(alerts.java:190) @ com.sun.net.ssl.internal.ssl.alerts.getsslexception(alerts.java:136) @ com.sun.net.ssl.internal.ssl.sslsocketimpl.recvalert(sslsocketimpl.java:1682) @ com.sun.net.ssl.internal.ssl.sslsocketimpl.readrecord(sslsocketimpl.java:932) @ com.sun.net.ssl.internal.ssl.sslsocketimpl.performinitialhandshake(sslsocketimpl.java:1112) @ com.sun.net.ssl.internal.ssl.sslsocketimpl.starthandshake(sslsocketimpl.java:1139) @ com.sun.net.ssl.internal.ssl.sslsocketimpl.starthandshake(sslsocketimpl.java:1123) @ sun.net.www.protocol.https.httpsclient.afterconnect(httpsclient.java:434) @ sun.net.www.protocol.https.abstractdelegatehttpsurlconnection.connect(abstractdelegatehttpsurlconnection.java:166) @ sun.net.www.protocol.http.httpurlconnection.getoutputstream(httpurlconnection.java:904) @ sun.net.www.protocol.https.httpsurlconnectionimpl.getoutputstream(httpsurlconnectionimpl.java:230) @ org.glassfish.jersey.client.httpurlconnector$3.getoutputstream(httpurlconnector.java:312) @ org.glassfish.jersey.message.internal.committingoutputstream.commitstream(committingoutputstream.java:200) @ org.glassfish.jersey.message.internal.committingoutputstream.commitstream(committingoutputstream.java:194) @ org.glassfish.jersey.message.internal.committingoutputstream.commit(committingoutputstream.java:262) @ org.glassfish.jersey.message.internal.outboundmessagecontext.commitstream(outboundmessagecontext.java:812) @ org.glassfish.jersey.client.clientrequest.writeentity(clientrequest.java:543) @ org.glassfish.jersey.client.httpurlconnector._apply(httpurlconnector.java:315) @ org.glassfish.jersey.client.httpurlconnector.apply(httpurlconnector.java:227) @ org.glassfish.jersey.client.clientruntime.invoke(clientruntime.java:225) @ org.glassfish.jersey.client.jerseyinvocation$2.call(jerseyinvocation.java:671) @ org.glassfish.jersey.internal.errors.process(errors.java:315) @ org.glassfish.jersey.internal.errors.process(errors.java:297) @ org.glassfish.jersey.internal.errors.process(errors.java:228) @ org.glassfish.jersey.process.internal.requestscope.runinscope(requestscope.java:423) @ org.glassfish.jersey.client.jerseyinvocation.invoke(jerseyinvocation.java:667) @ org.glassfish.jersey.client.jerseyinvocation$builder.method(jerseyinvocation.java:423) @ org.glassfish.jersey.client.jerseyinvocation$builder.put(jerseyinvocation.java:311) @ com.oki.casi.client.testelogin.testeloginhttps(testelogin.java:79) @ com.oki.casi.client.testelogin.main(testelogin.java:58) exception in thread "main" javax.ws.rs.webapplicationexception: http 500 internal server error @ org.eclipse.persistence.jaxb.rs.moxyjsonprovider.writeto(moxyjsonprovider.java:810) @ org.glassfish.jersey.message.internal.writerinterceptorexecutor$terminalwriterinterceptor.invokewriteto(writerinterceptorexecutor.java:263) @ org.glassfish.jersey.message.internal.writerinterceptorexecutor$terminalwriterinterceptor.aroundwriteto(writerinterceptorexecutor.java:250) @ org.glassfish.jersey.message.internal.writerinterceptorexecutor.proceed(writerinterceptorexecutor.java:162) @ org.glassfish.jersey.message.internal.messagebodyfactory.writeto(messagebodyfactory.java:1154) @ org.glassfish.jersey.client.clientrequest.writeentity(clientrequest.java:500) @ org.glassfish.jersey.client.httpurlconnector._apply(httpurlconnector.java:315) @ org.glassfish.jersey.client.httpurlconnector.apply(httpurlconnector.java:227) @ org.glassfish.jersey.client.clientruntime.invoke(clientruntime.java:225) @ org.glassfish.jersey.client.jerseyinvocation$2.call(jerseyinvocation.java:671) @ org.glassfish.jersey.internal.errors.process(errors.java:315) @ org.glassfish.jersey.internal.errors.process(errors.java:297) @ org.glassfish.jersey.internal.errors.process(errors.java:228) @ org.glassfish.jersey.process.internal.requestscope.runinscope(requestscope.java:423) @ org.glassfish.jersey.client.jerseyinvocation.invoke(jerseyinvocation.java:667) @ org.glassfish.jersey.client.jerseyinvocation$builder.method(jerseyinvocation.java:423) @ org.glassfish.jersey.client.jerseyinvocation$builder.put(jerseyinvocation.java:311) @ com.oki.casi.client.testelogin.testeloginhttps(testelogin.java:79) @ com.oki.casi.client.testelogin.main(testelogin.java:58) caused by: javax.xml.bind.marshalexception
edit: i'm trying solve issue testing client accessing 2 servers, jboss 7.1.1 , wildfly 9.0.2.
in jboss 7, can make client work https changing protocol tlsv1 ssl:
<connector name="https" protocol="http/1.1" scheme="https" socket-binding="https" secure="true"> <ssl name="ciac-ssl" key-alias="ciac-cert" password="123456" certificate-key-file="../standalone/configuration/ciac-cert.keystore" protocol="ssl"/> </connector>
how can change configuration in wildfly?
if understand correctly, sslexception
in client application runs under java 6. in client trying access service hosted on wildfly 9, using java 7 or higher. means server using different security mechanism. i stumbled upon same earlier , can see there no conclusion post either.
and makes sense if think it, why make possible developer create services using outdated , unsafe security mechanisms?
eventually decided go jdk update. attempt host jboss 4 under jdk7. example here find interesting writings on topic.
Comments
Post a Comment