ChangeCipherSpec (CCS), TLS 1.2 ve öncesinde "bundan sonraki kayıtlar yeni anahtarla şifrelenecek" bilgisini veren tek baytlık bir mesajdır. Değeri her zaman 1'dir ve kayıt katmanında içerik türü 20 ile taşınır.
TLS 1.2'deki rolü
El sıkışma sırasında taraflar anahtar üretimini bitirir. Her taraf önce CCS gönderir, ardından yeni şifreleme durumuyla şifrelenmiş Finished mesajını yollar. Böylece geçişin hangi noktada olduğu net olur. CCS teknik olarak el sıkışma mesajı sayılmaz; ayrı bir protokol türüdür.
- ClientKeyExchange sonrası istemci CCS gönderir.
- İstemci, şifreli Finished mesajını gönderir.
- Sunucu kendi CCS'ini ve Finished'ini gönderir.
TLS 1.3'te durum
TLS 1.3'te anahtar geçişi mesaj akışının kendisinden anlaşıldığı için CCS gereksizdir. Yine de ağdaki bazı aracı cihazlar (middlebox) TLS 1.2 benzeri bir akış bekler; bu yüzden RFC 8446 uyumluluk modu tanımlar ve istemciler, ilk ClientHello'dan sonra anlamsız bir CCS gönderebilir. Alıcı bu mesajı yok sayar. Yani ağ yakalamalarında TLS 1.3 bağlantısında CCS görmek normaldir.
Güvenlik geçmişi
OpenSSL'de CVE-2014-0224 ("CCS injection") zafiyeti, CCS'in el sıkışmanın erken bir noktasında kabul edilmesinden kaynaklandı. Yama ile birlikte mesajın yalnızca beklenen durumda işlenmesi sağlandı. Bu olay, sunucu yazılımlarını güncel tutmanın önemini gösteren klasik örneklerdendir.
Gözlemleme
openssl s_client -connect example.com:443 -tls1_2 -msg < /dev/null | grep -i "ChangeCipherSpec"
Wireshark'ta tls.record.content_type == 20 filtresiyle CCS kayıtlarını görebilirsiniz.
Özet ipuçları
- TLS 1.2 akışında CCS'in eksik veya yanlış sırada olması el sıkışma hatasına yol açar.
- TLS 1.3'te tek CCS görmek sorun değildir.
Sunucunuzun desteklediği sürümleri SSL denetleme aracıyla görebilir, daha fazla protokol konusu için bilgi bankasına bakabilirsiniz.