ERR_SSL_VERSION_OR_CIPHER_MISMATCH: Nedenleri ve Çözümleri
ERR_SSL_VERSION_OR_CIPHER_MISMATCH, tarayıcının ve sunucunun desteklenen protokol sürümlerini ve şifreleri karşılaştıracak kadar TLS el sıkışmasının yeterince kısmını tamamladığı, ve hiç örtüşme bulunamadığı anlamına gelir. Genel bir el sıkışma başarısızlığından daha spesifik bir durumdur: her iki taraf da konuştu, sadece bağlantıyı nasıl şifreleyeceklerine karar veremediler.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH ne anlama gelir
Bir TLS el sıkışması sırasında, istemcinin ClientHello'su, kullanmaya istekli olduğu her TLS sürümünü ve şifre paketini listeler, ve sunucu o listeden kendisinin de desteklediği birini seçer. Bu hata, sunucunun listesi ve istemcinin listesi hiçbir şey paylaşmadığında görünür, çoğunlukla sunucu sadece güncel tarayıcıların güvenlik nedenleriyle müzakere etmeyi reddettiği eski, kullanımdan kaldırılmış seçenekleri (TLS 1.0, TLS 1.1, veya RC4 ya da 3DES gibi şifreler) sunduğu için. Modern tarayıcılar yıllardır bu eski seçeneklere desteği kaldırıyor, bu yüzden TLS yapılandırmasını hiç güncellemeyen bir sunucu, sıradan, güncel ziyaretçilere karşı giderek daha fazla bu şekilde başarısız oluyor.
Hata nasıl görünür
Chrome ve Edge, "This page isn't working - example.com sent an invalid response" veya daha spesifik olarak "ERR_SSL_VERSION_OR_CIPHER_MISMATCH" gösterir. Firefox tipik olarak, sorunu doğrudan adlandıran SSL_ERROR_NO_CYPHER_OVERLAP koduyla "Secure Connection Failed" gösterir.
Belirli bir TLS sürümünü zorlayan openssl s_client, sunucunun tam olarak hangi sürümleri kabul ettiğini ve reddettiğini gösterir:
openssl s_client -connect example.com:443 -tls1_2
CONNECTED(00000003)
...
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Verify return code: 0 (ok)
openssl s_client -connect example.com:443 -tls1
CONNECTED(00000003)
140... error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Bir sürümde "protocol version" veya "handshake failure" uyarısı ve başka bir sürümde temiz bir bağlantı, sunucunun tam olarak hangi sürümleri desteklediğini belirler. nmap'in SSL betiği daha da ileri gider ve sunucunun sunduğu her şifreyi bir kerede listeler:
nmap --script ssl-enum-ciphers -p 443 example.com
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_RC4_128_SHA - C
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - A
ERR_SSL_VERSION_OR_CIPHER_MISMATCH'e ne sebep olur
- Sunucu sadece TLS 1.0 veya 1.1 sunuyor. Büyük tarayıcılar her iki sürüm için varsayılan desteği yıllar önce kaldırdı; yapılandırmasını hiç güncellemeyen bir sunucu artık güncel bir tarayıcıyla hiçbir ortak protokol sürümü paylaşmıyor.
- Sunucu sadece zayıf veya kullanımdan kaldırılmış şifreler sunuyor, RC4 veya 3DES gibi, ki tarayıcılar bunları hangi TLS sürümü sunulursa sunulsun müzakere etmeyi reddeder.
- Paylaşılan barındırmada bir sertifika veya SNI uyuşmazlığı. Birkaç site bir IP adresini paylaştığında ve sunucu istenen ana bilgisayar adını (Server Name Indication) doğru sertifika ve şifre yapılandırmasıyla eşleştiremediğinde, doğru şekilde geri dönmek yerine el sıkışmayı başarısız kılabilir.
- Cloudflare'in "no SSL certificate for this hostname yet" durumu, bir alan adı Cloudflare'e eklendiğinde ve sertifika verilmesi tamamlanmadan önce DNS oraya işaret ettiğinde görünür; kenarın o ana bilgisayar adı için henüz müzakere edecek geçerli hiçbir şeyi yoktur.
- Kendisi sadece eski TLS sürümlerini veya şifreleri destekleyen eski bir işletim sistemi veya tarayıcı, onları (doğru şekilde) devre dışı bırakmış modern bir sunucuya çarpması.
Kimin hatası olduğunu nasıl anlarsınız
Önce farklı bir cihaz veya farklı bir ağdan test edin; site orada yükleniyorsa, ziyaretçinin kendi işletim sistemi veya tarayıcısı güncelliğini yitirmiştir. Güncel, tamamen güncellenmiş bir tarayıcıdan dahil her yerde başarısız oluyorsa, sunucunun TLS yapılandırması nedendir. Birden fazla konumdan çalıştırılan bir SSL kontrolü, her bakış açısından sunucunun sunduğu tam protokol sürümlerini ve şifreleri tek bir geçişte bildirir, ki bu openssl komutlarını farklı ağlardan manuel olarak tekrarlamaktan daha hızlıdır.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH nasıl düzeltilir
Bir ziyaretçiyseniz
- Tarayıcınızı en son sürüme güncelleyin; bu, uyuşmazlığın istemci tarafı varyantını hemen çözer.
- İşletim sisteminizi güncelleyin, özellikle Windows 7 veya daha eskisinde, ya da çok eski Android ve iOS sürümlerinde, sistemin kendi TLS kütüphanesi tarayıcıdan bağımsız olarak güncelliğini yitirmiş olabilir.
- Sorunun sizinle mi yoksa sitede mi kaldığını doğrulamak için farklı bir cihaz veya ağ deneyin.
- Test ettiğiniz her yerde başarısızlık tutarlıysa site sahibiyle iletişime geçin; güncelliğini yitirmiş bir sunucu yapılandırmasının o tarafta düzeltilmesi gerekir, tarayıcıdan dolaşılarak değil.
Siteyi çalıştırıyorsanız
- Açık modern protokol sürümleri ve şifreler ayarlayın. nginx'te:
TLS 1.0, TLS 1.1, ve herhangi bir RC4 veya 3DES şifre girişini sadece önceliğini düşürmek yerine tamamen kaldırın.ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_cipher off; - Eski bir istemcinin gerçekten hâlâ TLS 1.0 veya 1.1'e ihtiyacı varsa (bazı eski ödeme terminalleri veya gömülü cihazlar var), her ziyaretçi için ana sitenin yapılandırmasını zayıflatmak yerine, onu kendi kabul edilmiş riskiyle ayrı bir ana bilgisayar adından veya dinleyiciden sunun.
- Birden fazla sertifikayı işleyen paylaşımlı barındırmada veya bir ters proxy'de SNI yapılandırmasını kontrol edin, her
server_namebloğunun doğru sertifikaya eşlendiğini ve proxy'nin farklı, uyumsuz bir şifre kümesi sunan varsayılan bir sertifikaya geri dönmediğini doğrulayarak. - Cloudflare kullanıyorsanız ve bu alan adını ekledikten hemen sonra başladıysa, kontrol panelinde SSL/TLS > Edge Certificates'ı sertifika verilme durumu için kontrol edin; "no SSL certificate for this hostname yet" durumu, verilme tamamlandığında kendiliğinden çözülür, genellikle dakikalar içinde birkaç saat içinde.
- Herhangi bir değişiklikten sonra yeniden yükleyin, ve yeniden doğrulayın:
nginx -t && systemctl reload nginx, sonra eski sürümlerin ve şifrelerin sadece yeniden sıralanmadığını, gerçekten gittiğini doğrulamak için yukarıdaki nmap veya openssl komutlarını tekrar çalıştırın.
İlgili hatalar
- ERR_SSL_PROTOCOL_ERROR, daha geniş, daha az spesifik el sıkışma başarısızlığıdır: portta TLS olmayan bir yanıt, bozuk el sıkışma verisi, veya ele geçirme yazılımı, sadece hiç örtüşme bulamayan temiz bir sürüm/şifre karşılaştırması yerine.
- ERR_CERT_DATE_INVALID, bir sertifika gerçekten alındıktan ve okunduktan sonra olur, bu hatadan bir adım daha ileride, ki bu hiç o kadar ilerlemez.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH nasıl önlenir
Tarayıcı satıcıları, kendi programlarına göre periyodik olarak eski TLS sürümlerine ve şifrelere desteği emekliye ayırır, ki bu geçen yıl gayet iyi çalışan bir sunucu yapılandırmasının, sunucu tarafında hiçbir değişiklik olmadan ziyaretçilerin giderek artan bir kısmı için başarısız olmaya başlayabileceği anlamına gelir. 158 şehirdeki 300'den fazla kontrol noktasından her çalıştırmada müzakere edilen protokolü ve şifreyi bildiren bir sertifika ve SSL kontrolü, gerçek trafiği etkilemeden önce kullanımdan kaldırılmış bir yapılandırmaya sürüklenmiş bir sunucuyu yakalar. HostTracker, bir kontrol başarısız olduğu anda e-posta, SMS, sesli arama, Slack, Telegram ve daha fazlasıyla uyarır.
Sık sorulan sorular
Bu, süresi dolmuş bir sertifika hatasıyla aynı mı?
Hayır. Bu hata, sertifikanın kendisi hiç değerlendirilmeden önce, protokol ve şifre müzakeresi sırasında olur. Süresi dolmuş bir sertifika, el sıkışmada bir adım sonra oluşan ayrı bir hata olurdu.
Bu neden sadece eski bilgisayarlardaki ziyaretçileri etkiliyor?
Çünkü güncelliğini yitirmiş bir işletim sistemi veya tarayıcı sadece TLS 1.0, TLS 1.1, veya eski şifreleri destekleyebilir, ki bunları düzgün şekilde sertleştirilmiş modern bir sunucu artık sunmuyor, o güncelliğini yitirmiş istemciye özgü temiz bir sürüm/şifre uyuşmazlığı üretiyor.
Eski ziyaretçiler için bunu düzeltmek üzere TLS 1.0'ı yeniden etkinleştirmeli miyim?
Genellikle hayır. TLS 1.0 ve 1.1'in bilinen zayıflıkları var ve çoğu güncel tarayıcı zaten onları kullanmayacak, bu yüzden onları yeniden etkinleştirmek, gerçek sorunu güncelliğini yitirmiş bir tarayıcı veya işletim sistemi olan etkilenen ziyaretçilerin çoğunluğu için uyumluluğu geri getirmeden esas olarak risk ekler.
Cloudflare'in "no SSL certificate for this hostname yet" mesajı özellikle ne anlama gelir?
Alan adı için DNS'in zaten Cloudflare'e işaret ettiği ama o ana bilgisayar adı için sertifika verilmesinin tamamlanmadığı anlamına gelir, bu yüzden Cloudflare'in kenarının el sıkışma sırasında sunacak henüz geçerli hiçbir şeyi yoktur. Genellikle verilme bittiğinde kendiliğinden çözülür.
Tahmin etmeden sunucumun şu anda hangi şifreleri sunduğunu nasıl bilirim?
nmap --script ssl-enum-ciphers -p 443 yourdomain.com çalıştırın, ki bu sürümleri birer birer test etmek yerine sunucunun kabul ettiği her protokol sürümünü ve şifreyi her biri için bir notla birlikte listeler.