WebSocket, tarayıcı ile sunucu arasında kalıcı ve çift yönlü bir kanal açar. Bu kanal şifresiz ws:// ile değil, TLS ile korunan wss:// şemasıyla kurulmalıdır; aksi halde oturum verileri ağ üzerinde düz metin akar.
WSS nasıl çalışır?
İstemci önce normal bir HTTPS bağlantısı kurar, ardından Upgrade: websocket başlığıyla protokolü yükseltir. Yani WSS, el sıkışma sırasında sunucunun SSL sertifikasını aynı HTTPS gibi doğrular. HTTPS sayfasından ws:// adresine bağlanmaya çalışırsanız tarayıcı bunu karma içerik (mixed content) olarak engeller.
Nginx ile ters vekil yapılandırması
Uygulama sunucusunu doğrudan internete açmak yerine TLS'i Nginx'te sonlandırmak yaygın bir yöntemdir:
location /ws/ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 300s;
}
Güvenlik önlemleri
- Origin denetimi: WebSocket, same-origin politikasına tabi değildir. Sunucu tarafında
Originbaşlığını beyaz listeyle doğrulayın; aksi halde başka bir sitedeki betik kullanıcının oturumuyla bağlanabilir (CSWSH). - Kimlik doğrulama: Bağlantı kurulurken kısa ömürlü bir belirteç kullanın; belirteci URL sorgusuna koymak günlüklere sızabileceği için mümkünse ilk mesajda veya çerezle iletin.
- Mesaj doğrulama: Gelen her çerçeveyi şema ve boyut açısından kontrol edin, mesaj boyutuna sınır koyun.
- Hız sınırı: Bağlantı sayısı ve mesaj sıklığını IP veya kullanıcı bazında sınırlayın.
Doğrulama
Bağlantıyı komut satırından denemek için openssl s_client -connect ornek.com:443 -servername ornek.com ile sertifikayı ve TLS sürümünü görebilirsiniz. Sertifika zincirini SSL Checker aracıyla da kontrol edebilirsiniz.
Sık hatalar
- Sertifika alan adıyla eşleşmiyor veya ara sertifika eksik: tarayıcı WSS el sıkışmasını reddeder.
- Vekil sunucu
Upgradebaşlıklarını iletmiyor: bağlantı 400 veya 426 ile düşer. - Boşta kalan bağlantılar zaman aşımına uğruyor: uygulama düzeyinde ping/pong gönderin.
Özetle WSS, HTTPS ile aynı sertifika altyapısını kullanır. Geçerli bir SSL sertifikası, Origin denetimi ve doğru vekil ayarlarıyla WebSocket trafiğini güvenle yayınlayabilirsiniz.