2016-10-10 2 views
4

このコードをJavaのメインメソッドで実行すると、ステータス= 200が得られます。SSLExceptionを取得する:致命的なアラートを受け取った:Tomcat 7で動作していてもJava 7のメインメソッドで正常に動作するinternal_error

try { 
    String url = "https://www.celltowerleaseexperts.com/"; 
    int status = HttpResponseUtil.getResponseCode(url); 
    logger.warn("Status = " + status); 
} catch (Exception e) { 
    logger.warn(e.getMessage(), e); 
} 

これはHttpResponseUtilのコードです:

import java.io.IOException; 
import java.security.KeyManagementException; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 

import javax.net.ssl.SSLContext; 

import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.conn.ssl.NoopHostnameVerifier; 
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; 
import org.apache.http.conn.ssl.TrustSelfSignedStrategy; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.ssl.SSLContexts; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class HttpResponseUtil { 

private static final Logger logger = LoggerFactory.getLogger(HttpResponseUtil.class); 

private final static String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"; 

public static int getResponseCode(String url) throws IOException { 

    SSLConnectionSocketFactory sslsf = null; 
    try { 
    SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new TrustSelfSignedStrategy()).build(); 
    sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); 
    } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { 
    logger.warn("Using SSLContexts.createSystemDefault()"); 
    SSLContext sslContext = SSLContexts.createSystemDefault(); 
    sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); 
    } 

    CloseableHttpClient httpClient = HttpClients.custom() 
    .setUserAgent(USER_AGENT) 
    .disableAutomaticRetries() 
    .disableCookieManagement() 
    .setSSLSocketFactory(sslsf).build(); 

    try { 
    HttpGet httpGet = new HttpGet(url); 
    CloseableHttpResponse response = httpClient.execute(httpGet); 
    return response.getStatusLine().getStatusCode(); 
    } finally { 
    httpClient.close(); 
    } 
} 

しかし、私はTomcatでそれを実行しようとすると、私はこのエラーを得た:

Received fatal alert: internal_error 
javax.net.ssl.SSLException: Received fatal alert: internal_error 
    at sun.security.ssl.Alerts.getSSLException(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.Alerts.getSSLException(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.SSLSocketImpl.recvAlert(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) ~[na:1.8.0_91] 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) ~[na:1.8.0_91] 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) ~[httpclient-4.5.jar:4.5] 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) ~[httpclient-4.5.jar:4.5] 
    at com.ardor.util.HttpResponseUtil.getResponseCode(HttpResponseUtil.java:45) ~[HttpResponseUtil.class:na] 
    at com.ardor.controller.jsf.WebsiteCrawlerJsfController.doCrawl(WebsiteCrawlerJsfController.java:80) ~[WebsiteCrawlerJsfController.class:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91] 
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91] 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) [jasper-el.jar:7.0.59] 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273) [jasper-el.jar:7.0.59] 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:650) [javax.faces-2.2.8-16.jar:2.2.8-16] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.59] 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.59] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.59] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.59] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.59] 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [catalina.jar:7.0.59] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.59] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) [catalina.jar:7.0.59] 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) [tomcat-coyote.jar:7.0.59] 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) [tomcat-coyote.jar:7.0.59] 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.59] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_91] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_91] 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.59] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_91] 

私は、Java 7を使用していますし、 Apache Tomcat 7.0.59

***** EDIT **:Sangram Jadhavが提案したとおり、jvax.sslログ出力を有効にしました。ここでは、次のとおりです。(ここでは含めて長すぎる私はちょうどオンラインメモ帳でそれを貼り付けて)

https://shrib.com/see/8kk9lXzMDl3vRZaTOt0v1oJi2ADaToRRP1R0OGCRs6DAVdTkNK?v=nc

+0

javax.sslログの出力を有効にし、その出力をここに投稿してみます。 [SSLログを有効にする](https://communities.ca.com/docs/DOC-231152632) –

+0

tomcatを使用しない場合は、SSLログを追加してください。 – kenor

+0

Javaセキュリティポリシーに問題がある可能性がありますか? TomcatサーバーにJREのJava Cryptography Extension(JCE)Unlimited Strength Jurisdictionポリシーファイルをインストールしましたか?ちょうど推測。 –

答えて

3

これは、あなたのJDK/JREへの更新しよう

JDK8 Issueに問題が原因であるかもしれません最新のJDK/JREログからは、JDK/JRE 1.8.0_91を使用していることは明らかです。

編集:JDKリリースを確認しながら

、この問題はまだ(8u122の構築)にリリースされていないようです。あなたが試みることができる早いアクセスbuildが利用可能です。

その他の解決策は、前述のようにカスタムHostName検証者を設定することを控えることです。コードでホスト名検証を設定した場所を確認します。下記の方法の参考資料を探してください

javax.net.ssl.HttpsURLConnection.setHostnameVerifier 

このコードを削除してください。

関連する問題