URL.getInputStream()导致java.security.cert.CertificateException:无主题替代DNS名称

URL.getInputStream()导致java.security.cert.CertificateException:无主题替代DNS名称,java,https,inputstream,Java,Https,Inputstream,我有一些代码可以发送电子邮件并从模板文件中读取内容 在我使用HTTPS之前,一切正常。在这种情况下,将引发异常: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching lonlinux01 found. at sun.security.ssl.Alerts.getSSLException(Alerts.java:

我有一些代码可以发送电子邮件并从模板文件中读取内容

在我使用HTTPS之前,一切正常。在这种情况下,将引发异常:

javax.net.ssl.SSLHandshakeException: 
java.security.cert.CertificateException: No subject alternative DNS name matching lonlinux01 found.
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) [jsse.jar:1.7.0_40]
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) [jsse.jar:1.7.0_40]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) [jsse.jar:1.7.0_40]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) [jsse.jar:1.7.0_40]
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) [jsse.jar:1.7.0_40]
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) [jsse.jar:1.7.0_40]
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) [jsse.jar:1.7.0_40]
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) [jsse.jar:1.7.0_40]
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) [jsse.jar:1.7.0_40]
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) [jsse.jar:1.7.0_40]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) [jsse.jar:1.7.0_40]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) [jsse.jar:1.7.0_40]
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) [rt.jar:1.7.0_40]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) [rt.jar:1.7.0_40]
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300) [rt.jar:1.7.0_40]
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) [rt.jar:1.7.0_40]
    at com.cerillion.wsc.workers.EmailWorker.getEmailTemplateFile(EmailWorker.java:99) [classes:]
    ...
代码

url = new URL(templateurl);
urlConnection = url.openConnection();

urlConnection.setConnectTimeout(connectionTimeout);
urlConnection.setReadTimeout(connectionTimeout);
BufferedReader breader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
在URL连接上失败。getInputStream()


应用程序的其余部分似乎可以在HTTPS上正常工作。

TLS客户端无法在证书中找到(完全限定的)服务器名称

看起来您正在连接到服务器
lonlinux01
,但给定的服务器证书既没有通用名
lonlinux01
,也没有使用者替代名


因此,请使用完全限定的服务器名称调整连接字符串(与证书中的名称相匹配),或要求服务器管理员调整其证书(与完全限定的服务器名称相匹配)

templateurl“lonlinux01”的主机部分是否为非完全限定名称?如果是这样,请尝试使用完全限定名(包括域部分)。如果是这样,为什么我可以访问应用程序?@algiogia我不知道您如何访问应用程序。。。我不知道您使用的是哪个服务器名称,哪个是哪个服务器上模板的名称。。。简单地说:我的水晶球坏了……我通过https//lonlinux01/appName访问应用程序。模板文件位于WebContent文件夹中,因此我可以通过