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
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:
- Bağlanmak istediğiniz
SSLSocket
ana adı oluşturun. Hadi adı busslsock
. sslsock.startHandshake()
çalıştırmayı deneyin. Bu tamamlanana kadar bloke edecek veya hata istisna. Bir hatastartHandshake()
, Her özel durum oluştu mesajı alıyorum. Eğerhandshake alert: unrecognized_name
, sonra da eşitse yanlış yapılandırılmış bir sunucu bulduk.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.
Eclipse hata: '' Java Sanal M...
JVM uzaktan hata ayıklama işlemi için ...
Java eklentisi döndürür bir WordPress ...
"encoding" için unmappable ka...
Java yakalamak için zaman.lang.Hata mı...