TLS 1.3 geçişi ve şifre seçimi
TLS 1.3'te ne değişti, 2026'da hangi protokol sürümlerine ve şifre paketlerine izin verilmeli, sunucu yapılandırma örnekleri ve test yöntemleri.
TLS 1.3 ile ne değişti
TLS 1.3 (RFC 8446, 2018), 1.2 sürümünün küçük bir revizyonu değildir. Yıllar boyunca güvenlik açığı üreten özellikleri tümüyle kaldırmıştır: ileri gizlilik sağlamayan RSA anahtar değişimi, statik Diffie-Hellman, CBC modundaki şifreler, RC4, sıkıştırma ve yeniden anlaşma. Her TLS 1.3 bağlantısı geçici anahtar değişimi kullanır, yani her oturum için yeni ve yalnızca o oturuma ait bir anahtar üretilir. Bunun pratik sonucu şudur: çalınan bir sunucu anahtarı, daha önce kaydedilmiş trafiğin şifresini çözmeye yetmez.
El sıkışma da belirgin biçimde hızlanmıştır. Yeni bir bağlantıda uygulama verisi akmaya başlamadan önce, TLS 1.2'deki iki gidiş-dönüş yerine tek bir gidiş-dönüş yeterlidir ve el sıkışmanın çok daha büyük bir bölümü, sunucu sertifikası da dahil olmak üzere şifrelenir. İsteğe bağlı 0-RTT modu, daha önce bağlanmış istemcilerin veriyi hemen ilk mesajda göndermesine izin verir; bunun bedeli, o erken verinin bir saldırgan tarafından tekrar oynatılabilmesidir.
| Konu | TLS 1.2 | TLS 1.3 |
|---|---|---|
| İleri gizlilik | Yalnızca ECDHE/DHE paketleriyle | Her zaman |
| Şifre modları | CBC, GCM, ChaCha20 ve eski seçenekler | Yalnızca AEAD (GCM, ChaCha20-Poly1305, CCM) |
| Veriden önceki gidiş-dönüş sayısı | İki | Bir (0-RTT ile sıfır) |
| Sertifika hat üzerinde görünür mü | Evet | Hayır, şifrelenir |
| Paket adı anahtar değişimini içerir mi | Evet, örneğin ECDHE-RSA-AES128-GCM-SHA256 | Hayır, örneğin TLS_AES_128_GCM_SHA256 |
Hangi protokol sürümlerine izin vermeli
RFC 8996, TLS 1.0 ile 1.1'i 2021'de resmen kullanımdan kaldırdı; büyük tarayıcılar ise desteği zaten bir süre önce kesmişti. Bu iki sürümü açık tutmak yalnızca çok eski birkaç istemciye yarar sağlar, buna karşılık herkesi sürüm düşürmeye dayalı zayıflıklara açık bırakır ve uyumluluk taramalarında başarısız olmanıza yol açar. Herkese açık web siteleri için pratik taban çizgisi bu yüzden TLS 1.2 ve TLS 1.3'tür.
| Sürüm | Durum | Öneri |
|---|---|---|
| SSL 3.0 | Yasaklandı (RFC 7568) | Kapatın |
| TLS 1.0 | Kullanımdan kaldırıldı (RFC 8996) | Kapatın |
| TLS 1.1 | Kullanımdan kaldırıldı (RFC 8996) | Kapatın |
| TLS 1.2 | Güncel, doğru paketlerle güvenli | Açın |
| TLS 1.3 | Güncel | Açın |
Yalnızca TLS 1.3 kullanan bir yapılandırma, yani Mozilla'nın modern profili, istemcilerini sizin kontrol ettiğiniz API'ler ve iç servisler için makul bir seçimdir. Herkese açık siteler ise eski işletim sistemleri, gömülü cihazlar ve bazı kurumsal vekil sunucular nedeniyle genellikle TLS 1.2'yi de açık tutmayı sürdürür. Aradaki fark güvenlikten çok erişilebilirlikle ilgilidir: doğru paketlerle sınırlandırılmış bir TLS 1.2 bugün hâlâ güvenlidir. Bir bağlantının hangi sürümde anlaştığını görmek için TLS Kontrolü aracını kullanabilirsiniz.
Şifre paketlerini seçmek
TLS 1.3
TLS 1.3 küçük bir paket kümesi tanımlar ve yaygın olarak açık olanların hepsi güçlüdür. Sunucuların çoğu makul varsayılanlarla geldiği için burada genellikle yapılandırılacak bir şey yoktur. Paket yalnızca AEAD şifresini ve özet algoritmasını belirler; anahtar değişimi ile imza algoritmaları bundan bağımsız olarak ayrıca müzakere edilir.
| Paket | Notlar |
|---|---|
TLS_AES_128_GCM_SHA256 | Uygulanması zorunlu; AES donanım hızlandırmasıyla birlikte hızlı |
TLS_AES_256_GCM_SHA384 | Daha büyük anahtar; yaygın biçimde açık |
TLS_CHACHA20_POLY1305_SHA256 | AES hızlandırması olmayan cihazlarda hızlı |
TLS 1.2
Yapılandırmanın gerçekten önem taşıdığı yer TLS 1.2'dir. Yalnızca ileri gizlilik sağlayan ECDHE anahtar değişimini ve AEAD şifrelerini kullanan paketlere izin verin, geri kalan her şeyi kapatın. RFC 9325 (BCP 195) IETF'in bu konudaki güncel önerilerini toplar ve bakımı sürdürülen profillerin kullandığı listelerle örtüşür.
| İzin verin | Kaldırın |
|---|---|
ECDHE-ECDSA-AES128-GCM-SHA256 | RC4, 3DES, DES veya NULL içeren her şey |
ECDHE-RSA-AES128-GCM-SHA256 | AES128-SHA gibi statik RSA anahtar değişimi |
ECDHE-ECDSA-AES256-GCM-SHA384 | CBC modundaki paketler (...-CBC-..., GCM'siz ...-SHA) |
ECDHE-RSA-AES256-GCM-SHA384 | Export ve anonim paketler (EXP, aNULL) |
ECDHE-ECDSA-CHACHA20-POLY1305 | MD5 kullanan paketler |
ECDHE-RSA-CHACHA20-POLY1305 |
Anahtar değişim grupları ve post-kuantum melez yöntemler
Tarayıcı bulgularının anlamı
TLS tarayıcıları bulguları eski saldırıların adlarıyla raporlar; bu da hangisinin gerçekten önemli olduğunu anlamayı ve önceliklendirmeyi zorlaştırır. İyi haber şu ki bu bulguların çoğu, TLS 1.0 ile 1.1 kapatılıp TLS 1.2 yalnızca AEAD şifreli ECDHE paketleriyle sınırlandığında hep birlikte ortadan kalkar. Aşağıdaki tablo, sık karşılaşılan bulguları onları ortadan kaldıran yapılandırma değişikliğiyle eşleştirir.
| Bulgu | Anlamı | Çözüm |
|---|---|---|
| TLS 1.0 / 1.1 destekleniyor | Kullanımdan kaldırılmış protokol sürümleri kabul ediliyor | Yalnızca TLS 1.2 ve 1.3'e izin verin |
| İleri gizlilik yok | Statik RSA anahtar değişimli paketler sunuluyor | ECDHE dışındaki paketleri kaldırın |
| SWEET32 | 3DES gibi 64 bitlik blok şifreleri sunuluyor | 3DES paketlerini kaldırın |
| ROBOT | Padding oracle açığı taşıyan RSA anahtar değişimi | RSA anahtar değişimli paketleri kaldırın; TLS kitaplığını güncelleyin |
| Zayıf Diffie-Hellman (Logjam) | 2048 bitten küçük gruplarla DHE | DHE paketlerini kaldırın ya da güçlü gruplar kullanın; ECDHE'yi tercih edin |
| RC4 veya CBC paketleri | Bilinen zayıflıkları olan eski şifreler | Yalnızca AES-GCM ve ChaCha20-Poly1305 sunun |
| Eksik zincir | Ara sertifika eksik | Tam zincir dosyasını sunun |
| Sertifikanın süresi yakında doluyor | Yenileme hiç çalışmadı ya da başarısız oldu | Önce otomasyonu düzeltin, sonra yenileyin |
Eksik bir HSTS başlığı gibi HTTP başlıklarıyla ilgili bulgular çoğu zaman aynı raporda görünür, ancak bunlar TLS ayarlarında değil web sunucusunun başlık yapılandırmasında düzeltilir. İki konuyu birbirinden ayırmak, hangi değişikliğin hangi bulguyu kapattığını izlemeyi kolaylaştırır. HTTP Başlıkları Kontrolü bu bulguları ayrı olarak listeler.
Oturum sürdürme ve performans
Tam bir el sıkışma bir gidiş-dönüşe ve bir miktar işlemci zamanına mal olur; bu yüzden istemciler fırsat buldukları her yerde daha önceki oturumları sürdürmeyi tercih eder. TLS 1.3, eski oturum kimliği ve bilet mekanizmalarının yerine önceki bir oturumdan türetilen önceden paylaşılan anahtarları koydu ve varsayılan olarak sürdürmeyi yine de taze bir anahtar değişimiyle birleştirir. Böylece ileri gizlilik, sürdürülen oturumlar için de korunmuş olur.
TLS 1.2'de ise uzun ömürlü tek bir anahtarla şifrelenen oturum biletleri ileri gizliliği zayıflatır, çünkü o anahtarı ele geçiren biri, biletlerini koruduğu tüm kayıtlı oturumların şifresini sonradan çözebilir. Mozilla'nın profilleri bu nedenle, bilet anahtarları sık sık değiştirilmediği sürece TLS 1.2 oturum biletlerini kapatır. Sunucu üzerindeki paylaşılan bir oturum önbelleği ise bu ödünleşmeye girmeden performans kazancının büyük bölümünü size verir.
HTTP/2 ve HTTP/3, tek bir bağlantıyı çok sayıda istek için yeniden kullanarak TLS el sıkışmalarının sayısını daha da azaltır. HTTP/3, TLS 1.3'ü doğrudan taşıma katmanına gömen QUIC üzerinde çalışır; bunu açmak sertifikanızı değiştirmez ama UDP 443 portunun dışarıya açık olmasını gerektirir. Güvenlik duvarı kuralları yalnızca TCP'ye izin veriyorsa istemciler sessizce TCP üzerinden HTTP/2'ye geri düşer.
Sunucu yapılandırma örnekleri
Aşağıdaki örnekler, bu yazının hazırlandığı tarihteki Mozilla intermediate profilini izler. Öneriler zaman içinde değiştiği için, kendi sunucu ve kitaplık sürümlerinize uyan güncel yapılandırmayı Mozilla SSL Configuration Generator ile üretin. Her değişiklikten sonra sunucuyu yeniden yükleyin ve sonucu dışarıdan bir taramayla kontrol edin. Yapılandırma dosyasının doğru göründüğüne güvenmek yerine, bağlantının gerçekte ne müzakere ettiğine bakı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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:TLS:10m;
ssl_session_tickets off;SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets offexample.com {
tls {
protocols tls1.2 tls1.3
}
}ssl_prefer_server_ciphers off ayarı, izin verilen paketler arasından seçimi istemciye bırakır. Güncel öneri budur, çünkü izin verdiğiniz her paket zaten güçlüdür ve istemci kendisinde AES donanım hızlandırması olup olmadığını sunucudan daha iyi bilir. TLS 1.3 paketleri OpenSSL tabanlı sunucularda ayrı bir ayarla yapılandırılır ve bunların değiştirilmesi nadiren gerekir.
Bir CDN ya da yük dengeleyicinin arkasındayken TLS'i ziyaretçiler için uç nokta sonlandırır; dolayısıyla TLS Kontrolü ve tarayıcılar sizin sunucunuzun değil, o uç noktanın TLS politikasını görür. Minimum sürümü orada ayarlayın ve uç nokta ile kendi sunucunuz arasındaki bağlantıda da TLS kullanın.
Sertifikalar ve anahtar türleri
Özel anahtarları yalnızca TLS'i sonlandıran sunucularda ya da uç platformlarda tutun ve onları yalnızca ihtiyaç duyan servis hesabının okuyabilmesini sağlayın. Herhangi bir sızıntı şüphesinin ardından sertifika yeniden düzenlenirken sadece sertifikayı değil, anahtarı da mutlaka değiştirin. Aynı anahtarla yeniden düzenlenen bir sertifika, sızmış olabilecek anahtar materyalini olduğu gibi kullanımda tutar.
Sertifikanın anahtar türü, hangi paketlerin kullanılabileceğini doğrudan belirler. ECDSA P-256 sertifikaları RSA'ya göre daha küçüktür ve doğrulanmaları daha hızlıdır; RSA 2048 ise neredeyse her yerde desteklenmeye devam eder. Birçok sunucu ikisini aynı anda sunup istemciye göre birini seçebilir, ancak bugünkü istemcilerle tek bir ECDSA ya da RSA sertifikası fazlasıyla yeterlidir.
- Tam zinciri sunun: yaprak sertifika ve ara sertifikalar, kök sertifika değil.
- Yenilemeyi otomatikleştirin; herkesçe güvenilen sertifikaların ömrü CA/Browser Forum kurallarıyla giderek kısalıyor.
- Süre bitimini yenileme işinden bağımsız olarak izleyin; örneğin zamanlanmış bir kontrolde TLS Kontrolü ile ya da XGM API'si ile.
- HTTPS her yerde sorunsuz çalıştıktan sonra HTTP Strict Transport Security ekleyin; HSTS rehberi bu geçişin nasıl yapılacağını anlatır.
Yapılandırmanızı test etmek
Testi her zaman kendi ağınızın dışından yapın, çünkü vekil sunucular ve CDN'ler ziyaretçilerin gördüğü sonucu değiştirir. TLS 1.3 ile 1.2'nin bağlandığını, 1.0 ile 1.1'in reddedildiğini ve sunucunun gerçekte hangi paketleri sunduğunu tek tek kontrol edin. Aşağıdaki komutlar, her ikisi de hemen her sistemde bulunan OpenSSL ve nmap araçlarını kullanır.
# TLS 1.3 should connect
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
# TLS 1.1 should fail (depending on your OpenSSL build, the client may refuse locally)
openssl s_client -connect example.com:443 -servername example.com -tls1_1 </dev/null
# list offered protocol versions and suites
nmap --script ssl-enum-ciphers -p 443 example.com| Kontrol | Beklenen |
|---|---|
| TLS 1.3 bağlantısı | AES-GCM veya ChaCha20 paketiyle birlikte Protocol: TLSv1.3 |
| TLS 1.2 bağlantısı | Yalnızca GCM ya da ChaCha20 kullanan ECDHE paketleri |
| TLS 1.0 / 1.1 | El sıkışma hatası |
| Sertifika | Geçerli, tam zincirli, ana makine adıyla eşleşen ve süre bitimine uzak |
| nmap çıktısındaki derece | Zayıf olarak işaretlenmiş hiçbir paket yok |
Taramayı otomatikleştirin. Aynı kontrolleri haftada bir kez ya da her altyapı değişikliğinin ardından çalıştırmak, varsayılan ayarlarıyla devreye alınmış yeni bir yük dengeleyici veya eksik zincirle yenilenmiş bir sertifika gibi gerilemeleri erkenden yakalar. Sonuçları saklayın; böylece yalnızca mevcut durumun yanlış olduğunu değil, bozulmanın tam olarak ne zaman başladığını da görebilirsiniz.
Bir kontrol yalnızca bazı konumlardan başarısız oluyorsa, farklı uç konumların farklı yapılandırmalarla çalıştığı bir CDN ya da anycast kurulumundan veya henüz her çözümleyiciye ulaşmamış bir DNS değişikliğinden şüphelenin. Ana makine adının arkasındaki IP adreslerini tek tek denemek, yani curl'de --resolve ya da OpenSSL'de belirli bir IP'ye -connect kullanmak sorunu çok hızlı biçimde daraltır.
Diğer TLS uç noktalarını da unutmayın: 25, 465 ve 587 portlarındaki posta sunucuları, 993'teki IMAP ve standart dışı portlarda çalışan yönetim panelleri. Bunlar çoğu zaman daha eski varsayılanlarla gelen bambaşka yazılımlar çalıştırır. Port Tarayıcı internet üzerinden hangi portlara erişilebildiğini gösterir.
Uyumluluk ve devreye alma
TLS 1.0 ile 1.1'i kapatmak yalnızca TLS 1.2 konuşamayan istemcileri etkiler; bu da bugün çok eski işletim sistemleri, güncellenmemiş gömülü cihazlar ve birkaç eski entegrasyon demektir. Sunucu günlüklerinizde protokol sürümü kayıtlıysa, kapatma kararını vermeden önce kaç isteğin hâlâ eski sürümleri kullandığına bakın. Birçok ekip bu sayının, tarama botları dışında fiilen sıfır olduğunu görür.
- Sunucunuz destekliyorsa bir hafta boyunca anlaşılan protokolü ve şifre paketini günlüğe yazın.
- Geriye kalan eski istemcileri belirleyin; önemli entegrasyonların sahipleriyle önceden iletişime geçin.
- TLS 1.0 ile 1.1'i ve zayıf TLS 1.2 paketlerini tek bir değişiklikte kapatın, ardından tarayın.
- Birkaç gün boyunca hata oranlarını ve gelen destek taleplerini yakından izleyin.
- Yapılandırmayı yılda bir kez güncel Mozilla profiliyle karşılaştırarak gözden geçirin.
SSS
TLS 1.2 hâlâ güvenli mi?
Evet; ileri gizlilik sağlayan ECDHE paketleri ve AEAD şifreleriyle birlikte güvenlidir. TLS 1.2'nin sorunları, kapatabileceğiniz eski paketlerden ve özelliklerden kaynaklanır.
TLS 1.2'yi kapatıp yalnızca 1.3 mü kullanmalıyım?
Modern istemcileri olan API'ler ve servisler için makul bir tercihtir. Herkese açık web siteleri ise eski cihazlar ve kurumsal vekil sunucular nedeniyle genellikle TLS 1.2'yi açık tutmayı sürdürür.
TLS 1.3 şifre paketlerini yapılandırmam gerekir mi?
Nadiren. Güncel OpenSSL, BoringSSL ve diğer kitaplıklardaki varsayılan TLS 1.3 paketlerinin hepsi güçlüdür.
0-RTT nedir, açmalı mıyım?
0-RTT, daha önce bağlanmış istemcilerin ilk mesajlarında veri göndermesine izin vererek bir gidiş-dönüş kazandırır. Bu erken veri tekrar oynatılabildiği için yalnızca tekrarlanması güvenli olan istekler için açın, aksi halde kapalı bırakın.
Yapılandırmamda yokken tarayıcı neden sunucumun zayıf şifreleri desteklediğini söylüyor?
Tarayıcı başka bir uç noktaya, örneğin bir CDN'e, yük dengeleyiciye ya da varsayılan olarak sunulan eski bir sanal sunucuya ulaşıyor olabilir. O ana makine adı için TLS'i gerçekte hangi sunucunun sonlandırdığını kontrol edin.
Sertifika için ECDSA mı yoksa RSA mı daha iyi?
ECDSA P-256 anahtarları daha küçüktür, el sıkışmaları daha hızlıdır ve güncel tarayıcıların tamamı bunları destekler. RSA 2048 ise çok eski istemcilerle en geniş uyumluluğa sahiptir. Çoğu site için ikisi de uygundur.
İç servislerin de aynı TLS ayarlarına ihtiyacı var mı?
Evet, üstelik bu servisler çoğu zaman geride kalır. İç API'lerin, veritabanlarının ve yönetim araçlarının istemcilerini genellikle siz kontrol edersiniz; bu da yalnızca TLS 1.3 kullanan bir yapılandırmayı orada herkese açık sitelere göre çok daha kolay hale getirir.
Posta sunucularında TLS ne durumda?
Sunucular arası SMTP, STARTTLS kullanır ve uyumluluk uğruna genellikle web sitelerinden daha geniş bir sürüm aralığına izin verir. Posta yazılımınızın izin verdiği ölçüde SSL 3.0, TLS 1.0 ve 1.1'i orada da kapatın; teslimatta TLS'i zorunlu kılmak için MTA-STS rehberine bakın.
TLS sürümünün SEO açısından bir önemi var mı?
Arama motorları HTTPS bekler, ancak sıralamayı TLS sürümüne göre yapmaz. Modernleşmenin gerçek nedenleri güvenlik, uyumluluk ve hızdır.
Kaynaklar
- RFC 8446: Aktarım Katmanı Güvenliği (TLS) Protokolü Sürüm 1.3
- RFC 8996: TLS 1.0 ve TLS 1.1'in kullanımdan kaldırılması
- RFC 9325: TLS ve DTLS'in güvenli kullanımı için öneriler (BCP 195)
- RFC 7568: Secure Sockets Layer Sürüm 3.0'ın kullanımdan kaldırılması
- Mozilla SSL Configuration Generator
- Mozilla wiki: Sunucu tarafında TLS