SORU
30 EYLÜL 2011, Cuma


SSL el sıkışması uyarı: Java 1.7.0 için yükseltme beri hata unrecognized_name

Java 1.7 bugün için Java 1.6 yükseltti. O zamandan beri bir hata SSL üzerinden benim web sunucusu için bağlantı kurmaya çalıştığımda oluşur:

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)

İşte kod:

        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);  
        }

Sadece bir test projesi ve güvenilmeyen sertifikalar ben izin kullanmak neden kodu bu.

        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 {

        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {

        Logger.getLogger(DownloadManager.class.getName()).log(Level.SEVERE, null, e);
    } 

Ben başarıyla https://google.combağlanmak için çalıştı. hatam nerede?

Teşekkürler.

CEVAP
14 ŞUBAT 2013, PERŞEMBE


Java 7 varsayılan olarak etkin SNİ destek sundu. Bazı yanlış sunucular "Tanınmayan bir İsim" çoğu hasta tarafından göz ardı edilir bir SSL el sıkışması... Java dışında bir uyarı. bir gönderme olduğunu öğrendim @Bob Kerns belirtildiği gibi, Oracle mühendisleri "" bu hata/özellik. düzeltmek için reddediyorum

Geçici çözüm olarak, jsse.enableSNIExtension özelliği ayarlamak için öneririm. Programlarınızı yeniden derleme olmadan çalışmasına izin vermek için, uygulama olarak çalıştırın:

java -Djsse.enableSNIExtension=false yourClass

Özelliği de Java kodu ayarlanabilir, ama ayarlanmalıdırherhangi bir SSL eylemleri önce. SSL kütüphane yüklendikten sonra, özelliğini değiştirebilirsiniz, ama 20**. Çalışma zamanı (söz konusu sınırlamalar ile) SNİ devre dışı bırakmak için kullanın:

System.setProperty("jsse.enableSNIExtension", "false");

Bu bayrak ayarı dezavantajı SNİ her yerde uygulama devre dışı bırakılır. SNİ kullanmak ve hala yanlış sunucular destek için:

  1. Bağlanmak istediğiniz SSLSocket ana adı oluşturun. Hadi adı bu sslsock.
  2. sslsock.startHandshake() çalıştırmayı deneyin. Bu tamamlanana kadar bloke edecek veya hata istisna. Bir hata startHandshake(), Her özel durum oluştu mesajı alıyorum. Eğer handshake alert: unrecognized_name, sonra da eşitse yanlış yapılandırılmış bir sunucu bulduk.
  3. unrecognized_name uyarı () Java ölümcül alındığında, ** 17, ama bir ana bilgisayar olmadan bu sefer bir adım açarak yeniden deneyin. Bu etkili SNİ (tüm sonra, SNİ uzantısı ClientHello mesaj için bir ana bilgisayar adı ekleme hakkında) devre dışı bırakır.

Webscarab SSL proxy için this commit uygular-geri çekilin Kur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • Murray Winiata

    Murray Winia

    2 ŞUBAT 2009