java.io.IOException:HTTPS主机名错误:应为<;xxx.xx.x.xx>;::一旦得到解决,这种情况就会一再发生

java.io.IOException:HTTPS主机名错误:应为<;xxx.xx.x.xx>;::一旦得到解决,这种情况就会一再发生,java,tomcat,network-security,Java,Tomcat,Network Security,我正在我的服务器上运行一个java web应用程序,它在内部调用一个URL: https://xxx.xx.x.xx:9443/services/spm/spm 此URL使用自签名证书,其中CN是localhost.localdomain 所以,我对忽略证书验证的代码做了如下更改 而且工作正常 HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostN

我正在我的服务器上运行一个java web应用程序,它在内部调用一个URL:

https://xxx.xx.x.xx:9443/services/spm/spm
此URL使用自签名证书,其中
CN是localhost.localdomain

所以,我对忽略证书验证的代码做了如下更改 而且工作正常

 HostnameVerifier hv = new HostnameVerifier() {
                public boolean verify(String urlHostName, SSLSession session) {
                    log.info("Host Name Warning:" + urlHostName);
                    return true;
                }
            };


            try {

                trustAllHttpsCertificates();
            } catch (Exception ex) {
                log.error(ex.getMessage());
            }

HttpsURLConnection.setDefaultHostnameVerifier(hv);

----
----

private static void trustAllHttpsCertificates() throws Exception {

        //  Create a trust manager that does not validate certificate chains:

        TrustManager[] trustAllCerts = new TrustManager[1];

        TrustManager tm = new miTM();

        trustAllCerts[0] = tm;

        SSLContext sc = SSLContext.getInstance("SSL");

        sc.init(null, trustAllCerts, null);

        HttpsURLConnection.setDefaultSSLSocketFactory(
                sc.getSocketFactory());

    }

public static class miTM implements TrustManager,
            X509TrustManager {

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(
                X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(
                X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(
                X509Certificate[] certs, String authType)
                throws CertificateException {
        }

        public void checkClientTrusted(
                X509Certificate[] certs, String authType)
                throws CertificateException {
        }
    }
但是,我的问题是,它会随机运行一段时间(1到5天,比这个时间长一些),然后它会抛出异常:

java.io.IOException: HTTPS hostname wrong:  should be <xxx.xx.x.xx>
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
    at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getOutputStream(Unknown Source)
    at Info.YatraPayIVRDetails.processRequest(YatraPayIVRDetails.java:173)
    at Info.YatraPayIVRDetails.doGet(YatraPayIVRDetails.java:405)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
java.io.IOException:HTTPS主机名错误:应为
位于sun.net.www.protocol.https.HttpsClient.checkurlsophing(未知来源)
位于sun.net.www.protocol.https.HttpsClient.afterConnect(未知来源)
位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.getOutputStream(未知源)
位于com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getOutputStream(未知源)
位于Info.YatraPayIVRDetails.processRequest(YatraPayIVRDetails.java:173)
位于Info.YatraPayIVRDetails.doGet(YatraPayIVRDetails.java:405)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
位于org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
位于org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
位于java.lang.Thread.run(未知源)
向此URL提供服务的服务器端是否有任何更改? 若我从webapps中删除我的.war文件并重新启动ApacheTomcat,那个么异常将消失,应用程序将再次正常工作

 HostnameVerifier hv = new HostnameVerifier() {
                public boolean verify(String urlHostName, SSLSession session) {
                    log.info("Host Name Warning:" + urlHostName);
                    return true;
                }
            };


            try {

                trustAllHttpsCertificates();
            } catch (Exception ex) {
                log.error(ex.getMessage());
            }

HttpsURLConnection.setDefaultHostnameVerifier(hv);

----
----

private static void trustAllHttpsCertificates() throws Exception {

        //  Create a trust manager that does not validate certificate chains:

        TrustManager[] trustAllCerts = new TrustManager[1];

        TrustManager tm = new miTM();

        trustAllCerts[0] = tm;

        SSLContext sc = SSLContext.getInstance("SSL");

        sc.init(null, trustAllCerts, null);

        HttpsURLConnection.setDefaultSSLSocketFactory(
                sc.getSocketFactory());

    }

public static class miTM implements TrustManager,
            X509TrustManager {

        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(
                X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(
                X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(
                X509Certificate[] certs, String authType)
                throws CertificateException {
        }

        public void checkClientTrusted(
                X509Certificate[] certs, String authType)
                throws CertificateException {
        }
    }
这种情况一次又一次地发生,为什么会发生这种情况


有人能帮我吗,提前谢谢。

这是DHCP问题吗?如果是这样,请使用静态IPAddress@user2310289此IP不在我的控制范围内,由客户提供。所以我不能改变它。我必须只使用这个IP,并且异常应该只从我这边处理,所以请您提供帮助。您如何解决它?我只是从webapps中删除我的.war文件,然后重新启动Apache Tomcat并再次通过。这个问题解决了好几天,然后又出现了。删除war文件有什么帮助?