SSL ile WebSocket


117

HTTPS ile WebSocketlere sahip olmak mümkün müdür?

HTTPS'ye geçerken, WebSocket'im bir güvenlik hatası veriyor ve normal HTTP ile mükemmel çalışıyor.

Aşağıda bir pasaj;

socket = new WebSocket("ws://my_www:1235"); 

hatam, kullandığım AIR soket sunucusunun güvenli olmadığını fark ettim, flash.net'i kullanmak için yeniden yazmam gerekiyor.SecureSocket ...
Eric

Yanıtlar:


172

WebSocket bağlantısı, bir HTTP veya HTTPS el sıkışmasıyla hayatına başlar. Sayfaya HTTP aracılığıyla erişildiğinde, WS veya WSS (Güvenli WebSocket: TLS üzerinden WS) kullanabilirsiniz. Bununla birlikte, sayfanız HTTPS aracılığıyla yüklendiğinde, yalnızca WSS'yi kullanabilirsiniz - tarayıcılar, güvenliği "düşürmeye" izin vermez.


sahip olduğum şey bu ama kullandığım AIR soket sunucusunun güvenli olmadığını fark ettim, flash.net'i kullanmak için yeniden yazmam gerekiyor.SecureSocket ...
Eric

Flash'ın da ciddi sorunları var ... Bir WebSocket sunucusu mu oluşturuyorsunuz (öyleyse neden), yoksa bir uygulama mı oluşturuyorsunuz?
Peter Moskovits

1
Evet çalışan bir AIR soket sunucum var.
Eric

Peki sayfa HTTP ile yüklenmemişse WSS nasıl seçilir?
anatoly techtonik

30

WebSockets'i HTTPS üzerinden kullanamazsınız, ancak WebSockets'i TLS üzerinden kullanabilirsiniz (HTTPS, TLS üzerinden HTTP'dir). URI'de "wss: //" kullanın.

Firefox'un son sürümünün bir HTTPS sayfasından TLS olmayan WebSocket'leri kullanmanıza izin vermeyeceğine inanıyorum, ancak bunun tersi bir sorun olmamalı.


Peki çözüm nedir? Http üzerinden çalışan bir WS sunucum var şimdi bir SSL satın aldım ve tarayıcı artık WS ile bağlanmama izin vermiyor.
WS'yi WSS'ye çevirdim

@muaaz WebSocket sunucunuz WSS modunda çalışıyor olmalı ve tercihen websocket sunucusuna bağlanmaya çalışan kaynak web sayfalarınızı sunan web sunucunuzla aynı SSL sertifikası / anahtarlarıyla yüklenmelidir.
kanaka

4
Teşekkür ederim. Btw, sadece geçme işlevini (kullanarak apache) talebi ile bunu çözdük wss://için ws://. Bu yüzden, wss://ws.domain.comapache proxy'yi kullanıyorum ve uyguluyorum ve isteği WS sunucusunun çalıştığı yere yönlendiriyorum. örneğin: ws://10.12.23.45:5641/server.php. ve bunun çok kötü bir çözüm olduğunu biliyorum - yine de benim için çalışıyor. Apache yapılandırmasında bana rehberlik ederseniz yardımınız için minnettar olurum. örneğin: .certvb. nereye koymalıyım teşekkürler!
muaaz

@muaaz üzgünüm, apache yapılandırmasını Google'da araştırmak dışında bilmiyorum.
kanaka

21

1 ek uyarı (kanaka / peter yanıtının yanı sıra): WSS kullanıyorsanız ve sunucu sertifikası tarayıcı tarafından kabul edilmiyorsa, herhangi bir tarayıcıdan oluşturulmuş iletişim kutusu alamayabilirsiniz (Web sayfalarında olduğu gibi). Bunun nedeni, WebSocket'lerin sözde "alt kaynak" olarak değerlendirilmesidir ve sertifika kabul / güvenlik istisnası / alt kaynaklar için hangi iletişim kutuları işlenmezse.


HTTPS için kullanılanla aynı sertifika olsa bile mi?
vekah

1
"Tarayıcı tarafından oluşturulan iletişim kutusu" ile ne demek istiyorsun? Beğen alert()?
Ivan Perevezentsev

2
Tarayıcının (bir sayfanın değil) doğal olarak oluşturduğu diyaloglar. "Bu sertifika geçersiz, devam etmek istiyor musunuz?"
oberstet

peki bunun üstesinden gelmenin bir yolu var mı? kendinden imzalı sertifika kullanırsam, yine de websocket kullanabilir miyim?
OhadR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.