Java Networking

javax.net.ssl.SSLHandshakeException: Uzak Sunucu, El Sıkışma Sırasında Bağlantıyı Kapattı Hatasının Giderilmesi

Spread the love

Korkunç javax.net.ssl.SSLHandshakeException: remote host closed connection during handshake hatası, Java geliştiricileri için önemli bir engel olabilir. Bu istisna, kritik SSL/TLS el sıkışma işlemi sırasında bir başarısızlığı işaret eder ve Java uygulamanızın uzak bir sunucuyla güvenli bir bağlantı kurmasını engeller. Bu kapsamlı kılavuz, temel nedenleri araştırıyor ve bu sinir bozucu sorunu çözmek için pratik çözümler sunuyor.

İçindekiler

SSLHandshakeException’ı Anlamak

Güvenli bir bağlantı kurmaktan sorumlu olan SSL/TLS el sıkışması başarısız olduğunda SSLHandshakeException oluşur. “remote host closed connection during handshake” mesajı özellikle, sunucunun el sıkışma tamamlanmadan önce bağlantıyı erken sonlandırdığını gösterir. Bu, istemcide (Java uygulamanız) veya sunucuda çeşitli sorunlardan kaynaklanabilir.

Yaygın nedenler şunlardır:

  • Eski Java Sürümü: Eski Java sürümleri, sunucu tarafından kullanılan modern SSL/TLS protokollerini desteklemeyebilir ve bu da uyumsuzluğa neden olabilir.
  • Yanlış SSL/TLS Protokolü Yapılandırması: Java uygulamanız ve sunucu tarafından desteklenen protokoller arasında uyumsuzluk.
  • Geçersiz veya Eksik SSL Sertifikaları: Sunucunun SSL sertifikasında sorunlar (geçersiz, süresi dolmuş, uygun güven yapılandırması olmadan kendi kendine imzalanmış veya bozuk bir sertifika zinciri).
  • Ağ Bağlantısı Sorunları: El sıkışmayı bozan aralıklı ağ bağlantısı veya güven duvarı müdahalesi.
  • Sunucu Tarafı Sorunları: Kaynak tükenmesi veya yanlış yapılandırma gibi uzak sunucudaki sorunlar.

Çözüm 1: Java Sürümünüzü Güncellemek

Eski Java sürümleri, bu hatanın birincil kaynağıdır. Birçok sunucu, eski ve daha az güvenli protokollerden uzaklaşmıştır. En son Java Uzun Süreli Destek (LTS) sürümüne güncelleme yapmak genellikle en basit ve en etkili çözümdür. Oracle’ın web sitesinden en son LTS sürümünü indirin, yükleyin ve uygulamanızın güncellenmiş Java sürümünü kullandığından emin olun.

Çözüm 2: SSL/TLS Protokollerini Yapılandırmak

Java, uygulamanızın kullandığı SSL/TLS protokollerini belirtmenize olanak tanır. Sunucu, uygulamanızın varsayılan protokollerini desteklemiyorsa, ayarları ayarlamanız gerekir. Bu genellikle izin verilen protokolleri belirtmek için SSLSocketFactory veya SSLEngine kullanmayı içerir.


SSLContext sslContext = SSLContext.getInstance("TLSv1.3"); // Veya TLSv1.2, vb.
sslContext.init(null, null, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
Socket socket = sslSocketFactory.createSocket(hostname, port);
// ... kodunuzun geri kalanı ...

Uygulamanız ve sunucu tarafından desteklenen protokollerle "TLSv1.3"‘ü değiştirin. Uygun bir tane bulana kadar farklı protokollerle (TLSv1.3, TLSv1.2, TLSv1.1) deneyin. Desteklenen protokolleri için sunucunun belgelerine bakın.

Çözüm 3: SSL Sertifikalarını Doğrulamak

Yanlış yapılandırılmış veya geçersiz SSL sertifikaları, bir diğer sık nedendir. Sertifikaları programatik olarak veya manuel olarak doğrulayabilirsiniz. Programatik olarak, sunucunun sertifikasını, kendi kendine imzalanmışsa veya standart olmayan bir Sertifika Yetkilisinden ise Java güven deponuza eklemeniz gerekebilir. Manuel olarak, sertifika geçerliliğini ve zincirini doğrulamak için openssl gibi araçları kullanın. Sertifika geçersiz veya süresi dolmuşsa, sunucu yöneticisine başvurun.

Sorun Giderme ve Gelişmiş Teknikler

Önceki çözümler sorunu çözmezse, bu gelişmiş adımları göz önünde bulundurun:

  • Ağ Bağlantısını Kontrol Edin: Güven duvarı kuralları da dahil olmak üzere ağ bağlantısını doğrulayın. Ağ sorunlarını teşhis etmek için ping ve traceroute gibi araçları kullanın.
  • Sunucu Günlüklerini İnceleyin: Sorunu belirleyebilecek daha özel hata mesajları için sunucunun günlüklerini inceleyin.
  • Proxy Ayarları: Bir proxy’nin arkasındaysanız, Java uygulamanızın onu doğru şekilde kullanacak şekilde yapılandırıldığından emin olun.
  • SSL Hata Ayıklamasını Etkinleştirin: El sıkışma işlemi hakkında daha ayrıntılı bilgi edinmek için Java uygulamanızda SSL hata ayıklamasını etkinleştirin.
  • Sunucu Yöneticisiyle İletişime Geçin: Tüm bunlar işe yaramazsa, sorunu bildirmek için sunucu yöneticisiyle iletişime geçin. El sıkışma başarısızlığına neden olan sunucu tarafı sorunları olabilir.

Sıkça Sorulan Sorular (SSS)

S: Sertifikam kendi kendine imzalanmış. Bunu nasıl düzeltebilirim?

Y: keytool komut satırı yardımcı programını kullanarak kendi kendine imzalanmış sertifikayı Java anahtar deponuza (genellikle cacerts) içe aktarın.

S: Sunucu kapalı. Bu nasıl bu hataya neden olur?

Y: Kapalı bir sunucu, bağlantı girişimi başarısız olduğu için başarılı bir el sıkışmayı engeller.

S: Ya bu çözümlerden hiçbiri işe yaramazsa?

Y: Ağ bağlantınızı, güven duvarı kurallarınızı kontrol edin ve sunucu yöneticisiyle iletişime geçmeyi düşünün. Sunucu tarafı sorunları olabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir