2016-07-21 9 views
0

Wildfeed 9で、configurationを使用して自己署名入りの証明書を使用してhttpsを使用してRESTサービスを実行しています。Java 6でhttpsを使用してサービスに接続するジャージエラー

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(); 
} 

私は(一部のアプリケーションは、JBoss 4で実行されている)は、Java 6との互換性を保つためにジャージー2.6を使用しています:私はこのコードを使用していたSSL検証をバイパスする

21/07/2016 16:38:36 org.glassfish.jersey.client.ClientRequest writeEntity 
SEVERE: Error while committing the request output stream. 
javax.net.ssl.SSLException: Received fatal alert: unexpected_message 
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) 
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1682) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:932) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:904) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230) 
    at org.glassfish.jersey.client.HttpUrlConnector$3.getOutputStream(HttpUrlConnector.java:312) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:262) 
    at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.java:812) 
    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:543) 
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315) 
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:225) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:423) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:423) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.java:311) 
    at com.oki.casi.client.TesteLogin.testeLoginHttps(TesteLogin.java:79) 
    at com.oki.casi.client.TesteLogin.main(TesteLogin.java:58) 
Exception in thread "main" javax.ws.rs.WebApplicationException: HTTP 500 Internal Server Error 
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.writeTo(MOXyJsonProvider.java:810) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:263) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154) 
    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:500) 
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315) 
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:225) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:423) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:423) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.java:311) 
    at com.oki.casi.client.TesteLogin.testeLoginHttps(TesteLogin.java:79) 
    at com.oki.casi.client.TesteLogin.main(TesteLogin.java:58) 
Caused by: javax.xml.bind.MarshalException 

編集:私は2台のサーバーにアクセスするクライアントをテストし、この問題を解決しようとしているは、JBoss 7.1

<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> 

すべてが、私はこのエラーを受け取るのJava 6を使用したJava 8と7を使用して正常に動作します.1とWildfly 9.0.2。 JBossの7では

、私は、HTTPSはSSLにTLSv1のからプロトコルを変更することで、クライアントの作業を行うことができます。

<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> 

私はWildflyにこの設定を変更する方法はありますか

+0

* Java 8と7を使用するとすべて正常に動作します。* ** _待機!_なぜJava 6を2016で使用していますか?** [Java 6の公開アップデートは2013年2月に終了しました。 Java 7の公開アップデートは2015年4月に終了しました](http://www.oracle.com/technetwork/java/eol-135779.html#lts)。 –

+0

@CássioMazzochiMolinJboss 4では1つのアプリケーションが動作しています。 –

+1

* Wildflyでこの設定を変更するにはどうすればよいですか?* [こちらをご覧ください](https://docs.jboss.org/author/pages/viewpage.action?pageId = 66322705)と[ここ](http://reallifejava.com/configuring-ssl-in-wildfly-8/)です。 –

答えて

1

私が正しく理解していれば、クライアントアプリケーションでJava 6で動作するSSLExceptionが得られます。このクライアントでは、Java 7以降を使用しているWildfly 9でホストされているサービスにアクセスしようとしています。これは、サーバーが別のセキュリティー・メカニズムを使用していることを意味します。 I stumbled upon the same earlierあなたが見ることができるように、そのポストにも結論はありません。

これを考えると、開発者が古いセキュリティで保護されていないセキュリティメカニズムを使用しているサービスを作成できるのはなぜですか?

最終的に私たちはJDKアップデートを行うことにしました。 JDK7の下でJBoss 4をホストすることもできます。たとえば、hereというトピックについて興味深い記事があります。

関連する問題