猿问

SSL握手警报:自升级到Java1.7.0以来未识别的_name错误

SSL握手警报:自升级到Java1.7.0以来未识别的_name错误

我今天从Java1.6升级到Java1.7。从那时起,当我试图通过SSL建立到我的Web服务器的连接时会发生错误:

javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name
    at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1288)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1904)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1027)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1262)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1289)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1273)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at java.net.URL.openStream(URL.java:1035)

以下是代码:

SAXBuilder builder = new SAXBuilder();Document document = null;try {
    url = new URL(https://some url);
    document = (Document) builder.build(url.openStream());} catch (NoSuchAlgorithmException ex) {
    Logger.getLogger(DownloadLoadiciousComputer.class.getName()).log(Level.SEVERE, null, ex);  }

这只是一个测试项目,这就是为什么我允许和使用不受信任的证书与代码一起使用的原因:

TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }
    }};try {

我成功地试图连接到https://google.com..我的错在哪里?

谢谢。


阿波罗的战车
浏览 1069回答 3
3回答

胡说叔叔

可以禁用具有系统属性jsse.enableSNIExtenence=false的发送SNI记录。如果您可以更改代码,它将有助于使用。SSLCocketFactory#createSocket()(没有主机参数或连接的套接字)。在这种情况下,它不会发送server_name指示。
随时随地看视频慕课网APP

相关分类

Java
我要回答