如何处理最终明文连接的https url

its*_*aja 13 java https

我尝试获取https网址的页面内容,该网址内容在获取输入流时会引发异常.

String httpsURL = "https://careers.virtusa.com/";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream();
Run Code Online (Sandbox Code Playgroud)

例外情况如下,

Exception in thread "main" javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)    
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)    
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)    
    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.getInputStream(HttpURLConnection.java:1172)    
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)      
    at url.JavaHttpsExample.main(JavaHttpsExample.java:18)    
Run Code Online (Sandbox Code Playgroud)

无论HttpURLConnectionHttpsURLConnection失败.我试过org.apache.http.impl.client.CloseableHttpClient但得到了同样的例外.在浏览器中它工作正常.

Tim*_*sen 3

我不明白plaintext connection你得到的错误。我还验证了您尝试梳理的站点实际上已配置为 HTTPS。这是我得到的异常:

java.security.cert.CertificateException:找不到与 sub.website.com 匹配的主题备用 DNS 名称。

解决此问题的一种方法是安装信任所有主机(包括sun.website.com)的主机验证程序。尝试使用以下代码片段将目标页面输出到 Java 控制台:

HostnameVerifier allHostsValid = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

String httpsURL = "https://sub.website.com/";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
while ((input = br.readLine()) != null) {
    System.out.println(input);
}
br.close();
Run Code Online (Sandbox Code Playgroud)

笔记:

当OP使用不同的网站时,我给出了这个答案。答案对于给定的条件是有效的,尽管从那时起OP可能已经改变。