java.io.IOException: HTTPS неверное имя хоста: должно быть <xxx.xx.x.xx>:: это происходит снова и снова после устранения
На моем сервере запущено одно веб-приложение Java, которое внутренне вызывает один URL:
https://xxx.xx.x.xx:9443/services/spm/spm
Этот URL использует самозаверяющий сертификат, в котором CN is 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)
Есть ли какие-либо изменения, сделанные на стороне сервера, который предоставляет услуги по этому URL? Если я удаляю мой.war-файл из веб-приложений и перезапускаю Apache Tomcat и снова прошёл, Exception исчезает, и приложение снова начинает работать нормально.
Это происходит снова и снова, Почему это происходит?
Кто-нибудь может мне помочь, заранее спасибо.