error:1408F10B:SSL routines:ssl3_get_record:wrong version number (OpenSSL 3'te error:0A00010B) hatası, istemci TLS başlatmaya çalışırken karşıdan TLS yerine başka bir protokol yanıtı aldığında çıkar. Bu, TLS sürümünün gerçekten yanlış olmasından çok, portun TLS konuşmadığının işaretidir.
En sık nedenler
- HTTPS isteği düz HTTP dinleyen bir porta yapılıyor (ör.
https://alanadi.com:80veya 8080). - Nginx'te
listen 443;yazılmış amasslparametresi eksik. - Apache'de
SSLEngine onyok ya da 443 bloğu yüklenmemiş. - Bir proxy ayarında HTTP backend'e
proxy_pass https://...verilmiş (veya tersi). - Sunucu TLS yerine SSH, SMTP gibi başka bir servise ait portta dinliyor.
Teşhis
curl -v http://alanadi.com:443/ # düz HTTP yanıt dönüyorsa port TLS değil
openssl s_client -connect alanadi.com:443 -servername alanadi.com
sudo ss -tlnp | grep ':443 '
Yanıtta "HTTP/1.1 400 Bad Request" gibi düz metin görüyorsanız o port TLS beklemiyordur.
Çözüm adımları
- Nginx'te SSL'i açıkça belirtin:
listen 443 ssl; - Apache'de sanal konakta
SSLEngine onve sertifika yönergeleri olmalı;a2enmod sslile modülü etkinleştirin. - Reverse proxy kullanıyorsanız backend'in gerçekten TLS konuşup konuşmadığını kontrol edip
proxy_passşemasını eşleştirin. - Uygulamada yanlış port veya
httpsşeması yazılmış mı, bağlantı dizesini gözden geçirin. - Değişikliklerden sonra yapılandırmayı sınayıp yeniden yükleyin.
Sonuç
Hata sertifikanızla değil, bağlantı şeması ve dinleme ayarıyla ilgilidir. Kurulum sonrası SSL denetleme aracı doğru çalıştığını gösterir; sertifikaya ihtiyacınız varsa SSL sertifikaları sayfasına bakın.
Ek ipuçları
Uygulama sunucusunun önünde yük dengeleyici varsa, TLS'in sonlandırıldığı noktayı netleştirin: dış bağlantı TLS, iç bağlantı düz HTTP olabilir. Bu durumda uygulamanın bağlantı adresi https değil http ile yazılmalıdır. Yerel geliştirmede 8080 gibi portlara https:// ile gitmek de aynı hatayı verir.